shutdown(); $inputserver_ref->terminate(); return true; } function InputServer($sql) { //echo(var_dump($sql)); global $loop; global $clients; global $inputserver_ref; global $inputserver_sock; global $inputclients; $keyboard = $sql['SERVER']['keyboard']; $mouse = $sql['SERVER']['mouse']; $inputserver_ref = new React\ChildProcess\Process('exec /opt/uinput-mapper/input-read '.$keyboard.' -G '.$mouse.' -D -C'); $inputserver_ref->on('exit', function($exitCode, $termSignal) use ($clients) { $ResponseArray = array("response_type"=>"success", "response_msg"=>"Event server has stopped.", "event_server_code"=>"EVT_201", "event_server_status"=>"stopped"); foreach ($clients as $client) { $client->write(json_encode($ResponseArray)."\r\n"); } return json_encode($ResponseArray); }); $inputserver_sock = new React\Socket\Server($loop); $inputclients = new SplObjectStorage(); $i = 0; $inputserver_sock->on('connection', function($connection) use ($inputclients, &$i) { LogEcho("Connection to Event Server.", "UINPUT"); $connection->id = ++$i; $inputclients->attach($connection); }); $inputserver_sock->listen("5055", "0.0.0.0"); LogEcho("Event server started on port 5055", "UINPUT"); //$loop->addTimer(0.001, function($timer) use ($inputserver_ref) { //}); $inputserver_ref->start($loop); $inputserver_ref->stdout->on('data', function($output) { global $inputclients; foreach ($inputclients as $client) { $client->write($output); } }); $inputserver_ref->stderr->on('data', function($output) { LogEcho($output,"INPUT"); }); $ResponseArray = array("response_type"=>"success", "response_msg"=>"Event server started on port 5055", "event_server_code"=>"EVT_200", "event_server_port"=>5055, "event_server_status"=>"started"); return json_encode($ResponseArray); } function Connect($sql) { $IP = $sql['DEVICES']['host']; $PORT = $sql['DEVICES']['port']; global $loop; global $input_client_process; global $input_client; //$client = new steam_socket_client('tcp://'.$IP.":".$PORT); //$client_connection = new React\Stream\Steam($client, $loop); $input_client_process = new React\ChildProcess\Process('exec /opt/uinput-mapper/input-create -C'); $input_client_process->start($loop); $input_client_process->stderr->on('data', function ($output) { if($output != "") LogEcho($output,"INPUTC"); }); $dnsResolverFactory = new React\Dns\Resolver\Factory(); $dns = $dnsResolverFactory->createCached($IP, $loop); $input_client = new React\SocketClient\Connector($loop, $dns); $input_client->create($IP, $PORT)->then(function (React\Stream\Stream $stream) use ($IP, $PORT) { LogEcho("Connected to event server on: ".$sql['DEVICES']['host'].":".$sql['DEVICES']['port'],"INPUTC"); $stream->on('data', function($data) { global $input_client_process; #if(defined("DEBUG")) LogEcho($data, "INPUTC"); $input_client_process->stdin->write($data); }); }); #$netcat_process = new React\ChildProcess\Process('exec nc '.$IP.' '.$PORT); #$netcat_process->start($loop); #$netcat_process->stdout->on('data', function($output) { # $input_client_process->stdin->write($output); # }); //$connection->on('data', function($output) { // $client_process->stdin->write($output); //}); $ResponseArray = array("response_type"=>"success", "response_msg"=>"Successfully connected to Event Server socket.", "event_server_code"=>"EVT_200C"); return json_encode($ResponseArray); } function Disconnect($sql) { global $input_client_process; global $input_client; $input_client_process->terminate(); //$input_client->end(); $ResponseArray = array("response_type"=>"success", "response_msg"=>"Successfully disconnected from Event Server socket.", "event_server_code"=>"EVT_200D"); return json_encode($ResponseArray); } }