Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- define('HOST',"localhost");
- define('PORT',"9000");
- //Create TCP/IP sream socket
- $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
- //reuseable port
- socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1);
- //bind socket to specified host
- socket_bind($socket, 0, PORT);
- //listen to port
- socket_listen($socket);
- //create & add listning socket to the list
- $clients = array($socket);
- //start endless loop, so that our script doesn't stop
- while (true) {
- //manage multipal connections
- $changed = $clients;
- //returns the socket resources in $changed array
- socket_select($changed, $null, $null, 0, 10);
- //check for new socket
- if (in_array($socket, $changed)) {
- $socket_new = socket_accept($socket); //accpet new socket
- $clients[] = $socket_new; //add socket to client array
- $header = socket_read($socket_new, 1024); //read data sent by the socket
- ** perform_handshaking($header, $socket_new, HOST, PORT); //perform websocket handshake Validation and acl etc ..
- socket_getpeername($socket_new, $ip); //get ip address of connected socket
- $response = mask(json_encode(array('type'=>'system', 'message'=>$ip.' connected'))); //prepare json data
- send_message($response); //notify all users about new connection
- //make room for new socket
- $found_socket = array_search($socket, $changed);
- unset($changed[$found_socket]);
- }
- //loop through all connected sockets
- foreach ($changed as $changed_socket) {
- //check for any incomming data
- while(socket_recv($changed_socket, $buf, 1024, 0) >= 1)
- {
- $received_text = unmask($buf); //unmask data
- $tst_msg = json_decode($received_text); //json decode
- $user_name = $tst_msg->name; //sender name
- $user_message = $tst_msg->message; //message text
- $user_color = $tst_msg->color; //color
- //prepare data to be sent to client
- $response_text = mask(json_encode(array('type'=>'usermsg', 'name'=>$user_name, 'message'=>$user_message, 'color'=>$user_color)));
- send_message($response_text); //send data
- break 2; //exist this loop
- }
- $buf = socket_read($changed_socket, 1024, PHP_NORMAL_READ);
- // check disconnected client
- if ($buf === false) {
- // remove client for $clients array
- $found_socket = array_search($changed_socket, $clients);
- socket_getpeername($changed_socket, $ip);
- unset($clients[$found_socket]);
- //notify all users about disconnected connection
- $response = mask(json_encode(array('type'=>'system', 'message'=>$ip.' disconnected')));
- send_message($response);
- }
- }
- }
- // close the listening socket
- socket_close($sock);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement