12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- <?php
- use Workerman\Worker;
- use Workerman\WebServer;
- use Workerman\Autoloader;
- use PHPSocketIO\SocketIO;
- // composer autoload
- require_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();
- }
|