I would like to know how many clients actually subscribe to the chat / conversation.
To be more precise, I just want to know if there is more than one client. (Chat chat is actually a private conversation between two users).
There is only one chat / private conversation at a time (per user).
class Chat implements WampServerInterface { protected $conversationId; public function __construct(){ $this->conversationId = null; } public function onSubscribe(ConnectionInterface $conn, $conversation_id){ $this->conversationId = $conversation_id; echo "Client $conn->resourceId assigned to the conversation : $conversation_id\n"; } public function onPublish(ConnectionInterface $conn, $conversation_id, $event, array $exclude, array $eligible){
So, in this code, how to get $ nb_clients?
Update:
I think I'm starting to see a solution.
Here is my second attempt:
class Chat implements WampServerInterface { protected $conversation = array(); public function onSubscribe(ConnectionInterface $conn, $conversation_id){ $conversation_id = (string) $conversation_id; if(!array_key_exists($conversation_id, $this->conversation)){ $this->conversation[$conversation_id] = 1; } else{ $this->conversation[$conversation_id]++; } echo "{$this->conversation[$conversation_id]}\n"; echo "Client $conn->resourceId assigned to the conversation : {$conversation_id}\n"; } public function onUnSubscribe(ConnectionInterface $conn, $conversation_id){ // Foreach conversations or given conversation remove one client $this->conversation[$conversation_id]--; echo "$this->conversation[$conversation_id]\n"; echo "Client $conn->resourceId left the conversation : $conversation_id\n"; } public function onOpen(ConnectionInterface $conn){ echo "New connection! ({$conn->resourceId})\n"; } public function onClose(ConnectionInterface $conn){ $this->onUnsubscribe($conn, $this->conversation); echo "Connection closed!\n"; } public function onCall(ConnectionInterface $conn, $id, $fn, array $params){ } public function onPublish(ConnectionInterface $conn, $conversation_id, $event, array $exclude, array $eligible){ $conversation_id = (string) $conversation_id; $nb_clients = $this->conversation[$conversation_id] echo "$nb_clients User(s) in conversation"; echo "Message sent to $conversation_id : $event"; // ... $message = $event; // Send data to conversation $this->conversation[$conversation_id]->broadcast($message); } public function onError(ConnectionInterface $conn, \Exception $e){ echo "An error has occurred: {$e->getMessage()}\n"; $conn->close(); } }
Any ideas if this would work correctly? It actually works, but I'm still not sure if this is the best solution. I really got inspiration from Ratchet github .