Hola, estoy rehaciendo un chat donde un cliente puede chatear con un asesor. anteriormente lo hice usando peticiones AJAX pero consume muchos recursos. Ahora quiero usar websockets pero no encuentro la manera de que los mensajes enviados se muestren solamente a los implicados en la conversación; los mensajes se muestran en todos los clientes. A continuación les coloco parte del código que uso:
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
$hora=date('h:m');
$response_text = mask(json_encode(array('type'=>'usermsg', 'name'=>$ip, 'message'=>$user_message, 'color'=>$user_color, 'hora'=>$hora)));
send_message($response_text); //send data
break 2; //exist this loop
}
$buf = @socket_read($changed_socket, 1024, PHP_NORMAL_READ);
if ($buf === false) { // check disconnected client
// 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);
}
}