| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | <?phpuse Workerman\Worker;use Workerman\WebServer;use Workerman\Autoloader;use PHPSocketIO\SocketIO;// composer autoloadrequire_once join(DIRECTORY_SEPARATOR, array(__DIR__, "..", "..", "vendor", "autoload.php"));$io = new SocketIO(2020);$io->on('connection', function($socket){    $socket->addedUser = false;    // when the client emits 'new message', this listens and executes    $socket->on('new message', function ($data)use($socket){        // we tell the client to execute 'new message'        $socket->broadcast->emit('new message', array(            'username'=> $socket->username,            'message'=> $data        ));    });    // when the client emits 'add user', this listens and executes    $socket->on('add user', function ($username) use($socket){    if ($socket->addedUser)      return;        global $usernames, $numUsers;        // we store the username in the socket session for this client        $socket->username = $username;        ++$numUsers;        $socket->addedUser = true;        $socket->emit('login', array(             'numUsers' => $numUsers        ));        // echo globally (all clients) that a person has connected        $socket->broadcast->emit('user joined', array(            'username' => $socket->username,            'numUsers' => $numUsers        ));    });    // when the client emits 'typing', we broadcast it to others    $socket->on('typing', function () use($socket) {        $socket->broadcast->emit('typing', array(            'username' => $socket->username        ));    });    // when the client emits 'stop typing', we broadcast it to others    $socket->on('stop typing', function () use($socket) {        $socket->broadcast->emit('stop typing', array(            'username' => $socket->username        ));    });    // when the user disconnects.. perform this    $socket->on('disconnect', function () use($socket) {        global $usernames, $numUsers;        if($socket->addedUser) {            --$numUsers;           // echo globally that this client has left           $socket->broadcast->emit('user left', array(               'username' => $socket->username,               'numUsers' => $numUsers            ));        }   });   });if (!defined('GLOBAL_START')) {    Worker::runAll();}
 |