connections[$conn->resourceId] = compact('conn') + ['user_id' => null]; } /** * This is called before or after a socket is closed (depends on how it's closed). SendMessage to $conn will not result in an error if it has already been closed. * @param ConnectionInterface $conn The socket/connection that is closing/closed * @throws \Exception */ function onClose(ConnectionInterface $conn){ $disconnectedId = $conn->resourceId; unset($this->connections[$disconnectedId]); foreach($this->connections as &$connection) $connection['conn']->send(json_encode([ 'offline_user' => $disconnectedId, 'from_user_id' => 'server control', 'from_resource_id' => null ])); } /** * If there is an error with one of the sockets, or somewhere in the application where an Exception is thrown, * the Exception is sent back down the stack, handled by the Server and bubbled back up the application through this method * @param ConnectionInterface $conn * @param \Exception $e * @throws \Exception */ function onError(ConnectionInterface $conn, \Exception $e){ $userId = $this->connections[$conn->resourceId]['user_id']; echo "An error has occurred with user $userId: {$e->getMessage()}\n"; unset($this->connections[$conn->resourceId]); $conn->close(); } /** * Triggered when a client sends data through the socket * @param \Ratchet\ConnectionInterface $conn The socket/connection that sent the message to your application * @param string $msg The message received * @throws \Exception */ function onMessage(ConnectionInterface $conn, $msg){ $msg = json_decode($msg, true); $konten = $msg['content']; Iseng::insert([ 'msg' => $konten ]); // if(is_null($this->connections[$conn->resourceId]['user_id'])){ // $this->connections[$conn->resourceId]['user_id'] = $msg; // $onlineUsers = []; // foreach($this->connections as $resourceId => &$connection){ // $connection['conn']->send(json_encode([$conn->resourceId => $msg])); // if($conn->resourceId != $resourceId) // $onlineUsers[$resourceId] = $connection['user_id']; // } // $conn->send(json_encode(['online_users' => $onlineUsers])); // } else{ // $fromUserId = $this->connections[$conn->resourceId]['user_id']; // $msg = json_decode($msg, true); // $this->connections[$msg['to']]['conn']->send(json_encode([ // 'msg' => $msg['content'], // 'from_user_id' => $fromUserId, // 'from_resource_id' => $conn->resourceId // ])); // } } }