/** * 有消息时 * @param int $client_id * @param string $message */ public static function onMessage($client_id, $message) { // 获取客户端请求 $message_data = json_decode($message, true); if (!$message_data) { return; } switch ($message_data['type']) { case 'login': Gateway::sendToCurrentClient('{"type":"welcome","id":' . $client_id . '}'); break; // 更新用户 // 更新用户 case 'update': // 转播给所有用户 Gateway::sendToAll(json_encode(array('type' => 'update', 'id' => $client_id, 'angle' => $message_data["angle"] + 0, 'momentum' => $message_data["momentum"] + 0, 'x' => $message_data["x"] + 0, 'y' => $message_data["y"] + 0, 'life' => 1, 'name' => isset($message_data['name']) ? $message_data['name'] : 'Guest.' . $client_id, 'authorized' => false))); return; // 聊天 // 聊天 case 'message': // 向大家说 $new_message = array('type' => 'message', 'id' => $client_id, 'message' => $message_data['message']); return Gateway::sendToAll(json_encode($new_message)); } }
/** * 有消息时 * @param int $client_id 客户端id * @param string $message 请求数据 */ public static function onMessage($client_id, $message) { // to do $app = app(); $app['client_id'] = $client_id; print_r("Client request + " . $message . " + \n"); try { $app['request'] = $app['decoder']->decode($message); } catch (Webmozart\Json\DecodingFailedException $e) { $response['code'] = 400; $response['message'] = 'Bad request'; print_r("Client bad request + " . $app['encoder']->encode($response) . " + \n"); Gateway::sendToAll($app['encoder']->encode($response)); return; } switch ($app['request']->type) { case 'pong': return; break; case 'login': // $app['bus']->dispatch(new LoginCommand($app)); break; case 'say': // $app['bus']->dispatch(new SayCommand($app)); break; default: break; } }
public static function onMessage($client_id, $message) { // 获取客户端请求 $message_data = json_decode($message, true); echo 'message' . $message . 'ID' . $client_id; if (!$message_data) { return; } //text-info 是系统发送的。text-user 是其他用户发送的。 switch ($message_data['type']) { case 'JOIN': // 转播给所有用户 Gateway::sendToAll(json_encode(array('type' => 'NOTE', 'id' => $client_id, 'text_type' => 'text-info', 'msg' => $message_data['user_nickname'] . '加入聊天。当前共有' . count(Gateway::getOnlineStatus()) . '把剪子在线。'))); break; case 'QUIT': // 转播给所有用户 GateWay::sendToAll(json_encode(array('type' => 'QUIT', 'msg' => $message_data['from'] . '退出聊天啦 T^T'), true)); break; case 'EDIT': // 转播给所有用户 Gateway::sendToAll(json_encode(array('type' => 'EDIT', 'from' => $message_data['from'], 'to' => $message_data['to'], 'head' => $message_data['head']))); break; case 'NAME': // var_export(Gateway::getOnlineStatus()); // echo 'online num :'.count(Gateway::getOnlineStatus()); $id = mt_rand(1, 9); Gateway::sendToCurrentClient('{"type":"NAME","head":"http://img3.178.com/acg1/201507/230072993522/230073874484.jpg","name":"剪纸' . $client_id . '号","msg":"大家好,剪纸' . $client_id . '号来啦。"}'); echo 'NAME IS come '; break; // 更新用户 // 更新用户 case 'POST': // 转播给所有用户 echo 'POST IS IN'; Gateway::sendToAll(json_encode(array('type' => 'POST', 'from' => $message_data['from'], 'msg' => $message_data['context'], 'head' => $message_data['head']))); return; // 聊天 // 聊天 case 'message': // 向大家说 $new_message = array('type' => 'message', 'id' => $client_id, 'message' => $message_data['message']); return Gateway::sendToAll(json_encode($new_message)); } }
/** * 有消息时 * @param int $client_id * @param string $message */ public static function onMessage($client_id, $message) { // debug echo "client:{$_SERVER['REMOTE_ADDR']}:{$_SERVER['REMOTE_PORT']} gateway:{$_SERVER['GATEWAY_ADDR']}:{$_SERVER['GATEWAY_PORT']} client_id:{$client_id} session:" . json_encode($_SESSION) . " onMessage:" . $message . "\n"; // 客户端传递的是json数据 $message_data = json_decode($message, true); if (!$message_data) { return; } // 根据类型做相应的业务逻辑 switch ($message_data['type']) { // 发送数据给用户 message: {type:send, to_client_id:xx, content:xx} case 'send': // 向某个浏览器窗口发送消息 if ($message_data['to_client_id'] != 'all') { $new_message = array('type' => 'send', 'from_client_id' => $client_id, 'to_client_id' => $message_data['to_client_id'], 'content' => nl2br($message_data['content']), 'time' => date('Y-m-d :i:s')); return Gateway::sendToClient($message_data['to_client_id'], json_encode($new_message)); } // 向所有浏览器发送消息 $new_message = array('type' => 'send', 'from_client_id' => $client_id, 'to_client_id' => 'all', 'content' => nl2br($message_data['content']), 'time' => date('Y-m-d :i:s')); return Gateway::sendToAll(json_encode($new_message)); } }
/** * 当客户端断开连接时 * @param integer $client_id 客户端id */ public static function onClose($client_id) { // debug echo "client:{$_SERVER['REMOTE_ADDR']}:{$_SERVER['REMOTE_PORT']} gateway:{$_SERVER['GATEWAY_ADDR']}:{$_SERVER['GATEWAY_PORT']} client_id:{$client_id} onClose:''\n"; // 从房间的客户端列表中删除 if (isset($_SESSION['room_id'])) { $room_id = $_SESSION['room_id']; self::delClientFromRoom($room_id, $client_id); // 广播 xxx 退出了 if ($all_clients = self::getClientListFromRoom($room_id)) { $client_list = self::formatClientsData($all_clients); $new_message = array('type' => 'logout', 'from_client_id' => $client_id, 'from_client_name' => $_SESSION['client_name'], 'client_list' => $client_list, 'time' => date('Y-m-d H:i:s')); $client_id_array = array_keys($all_clients); Gateway::sendToAll(json_encode($new_message), $client_id_array); } } }
/** * 当客户端发来消息时触发 * @param int $client_id 连接id * @param mixed $message 具体消息 */ public static function onMessage($client_id, $message) { // 向所有人发送 Gateway::sendToAll("{$client_id} said {$message}"); }
/** * 当客户端发来消息时触发 * @param int $client_id 连接id * @param string $message 具体消息 * @link http://gatewayworker-doc.workerman.net/gateway-worker-development/onmessage.html */ public static function onMessage($client_id, $message) { // 向所有人发送 @see http://gatewayworker-doc.workerman.net/gateway-worker-development/send-to-all.html Gateway::sendToAll("{$client_id} said {$message}"); }
/** * 不允许多用户登录 * 剔除存储用户 */ public static function notAllowMoreClient($clientList, $clientName) { if (is_array($clientList)) { $unsetKey = array_keys($clientList, $clientName); if ($unsetKey) { Gateway::sendToAll(json_encode(array('type' => 'error', 'info' => 'loginconflict', 'msg' => '您已在另一客户端登陆')), $unsetKey); foreach ($unsetKey as $unkey) { unset($clientList[$unkey]); //下线用户 Gateway::closeClient($unkey); //删除存储用户 RedisModel::hashDel('webChat', Storekey::USER_ONLINE_LIST, $unkey); } } } return; }
/** * 有消息时 * @param int $client_id * @param string $message */ public static function onMessage($client_id, $message) { $db = Db::instance('db'); // debug //echo "client:{$_SERVER['REMOTE_ADDR']}:{$_SERVER['REMOTE_PORT']} gateway:{$_SERVER['GATEWAY_ADDR']}:{$_SERVER['GATEWAY_PORT']} client_id:$client_id session:".json_encode($_SESSION)." onMessage:".$message."\n"; //$db->query("INSERT INTO `hs_test` (`ip`, `content`) VALUES ('".$_SERVER['REMOTE_ADDR']."','".$client_id."')"); $select = $db->query("select `content`,`ip` from `hs_test`"); //var_dump($select); foreach ($select as $v) { $clients[$v['ip']][] = $v['content']; } //var_dump($clients); // echo $message; ///echo $client_id; // 客户端传递的是json数据 $message_data = json_decode($message, true); if (!$message_data) { return; } var_export($message_data); // 根据类型做相应的业务逻辑 switch ($message_data['type']) { // 发送数据给用户 message: {type:send, to_client_id:xx, content:xx} case 'login': //$db = Db::instance('db'); $db->update('hs_craftsman')->cols(array('client_id' => $client_id))->where('craftsmanid=' . $message_data['id'])->query(); $db->query("INSERT INTO `hs_test` (`ip`, `content`) VALUES ('" . $message_data['id'] . "','" . $client_id . "')"); break; case 'group': echo $message_data['id'] . "\n"; $db->query("INSERT INTO `hs_test` (`ip`, `content`) VALUES ('" . $message_data['id'] . "','" . $client_id . "')"); break; case 'order': if (empty($message_data['data'])) { return; } /* $send_data = array(); $send_data['type'] = $message_data['data']['order_type']; $send_data['orderid'] = $message_data['data']['orderid']; $client_array_id = self::merge_client_id($clients,$message_data['data']['to_client_id']); echo "***************************"; var_export($client_array_id); Gateway::sendToAll(json_encode($send_data),$client_array_id); */ foreach ($message_data['data'] as $data) { $send_data = array(); echo $send_data['type'] = $data['order_type']; echo "****************\n"; $send_data['orderid'] = $data['orderid']; //var_export($data['to_client_id']); //echo ('-----------/n'); $client_array_id = self::merge_client_id($clients, $data['to_client_id']); var_export($client_array_id); Gateway::sendToAll(json_encode($send_data), $client_array_id); } break; case 'send': //var_dump($message_data['data']); if (is_array($message_data['data'])) { //向群组发 foreach ($message_data['data'] as $data) { $new_message = array('type' => 'send', 'from_client_id' => $client_id, 'to_client_id' => $data['to_client_id'], 'orderid' => $data['orderid'], 'time' => date('Y-m-d H:i:s')); $client_array_id = self::merge_client_id($clients, $data['to_client_id']); // var_dump($data['to_client_id']); //echo "**********".$client_id."************"; //var_dump($client_array_id); Gateway::sendToAll(json_encode($new_message), $client_array_id); //return Gateway::sendToAll(json_encode($new_message),array(97,98,99)); //return Gateway::sendToAll(json_encode($new_message)); } } else { if ($message_data['to_client_id'] != 'all') { $new_message = array('type' => 'send', 'from_client_id' => $client_id, 'to_client_id' => $message_data['to_client_id'], 'orderid' => nl2br($message_data['orderid']), 'time' => date('Y-m-d H:i:s')); return Gateway::sendToClient($message_data['to_client_id'], json_encode($new_message)); } else { // 向所有浏览器发送消息 $new_message = array('type' => 'send', 'from_client_id' => $client_id, 'to_client_id' => 'all', 'orderid' => nl2br($message_data['orderid']), 'time' => date('Y-m-d H:i:s'), 'ss' => 'taotao'); return Gateway::sendToAll(json_encode($new_message)); } } return true; //$db = Db::instance('db'); //$data = $db->update("SELECT ID,Sex FROM `hs_admin` WHERE userid=1"); //echo $row_count = $db->update('hs_admin')->cols(array('roleid'=>'10'))->where('userid=1')->query(); //var_dump($data); } }
/** * 向客户端推送消息 * @param array $data 需要推送的消息列表 * @param array|string $users 需要推送到的用户UID列表 * @param bool $remove_current_user 是否包含当前用户 * @throws Exception */ protected static function pushMessageData($data, $users, $remove_current_user = true) { $client_ids = Message::getClientByUser($users, $remove_current_user); $message = json_encode(array('type' => 'push_message', 'result' => array('length' => count($data), 'list' => $data), 'status' => 0, 'msg' => '')); Gateway::sendToAll($message, $client_ids); }
/** * 向客户端推送消息 * @param array $data 需要推送的消息列表 * @param array|string $users 需要推送到的用户UID列表 * @param bool $remove_current_user 是否包含当前用户 * @throws Exception */ protected static function pushMessageData($data, $users, $remove_current_user = true) { $count = count($data); $client_ids = Message::getClientByUser($users, $remove_current_user); if ($client_ids) { $message = json_encode(array('type' => 'push_message', 'result' => array('from' => 'app', 'length' => $count, 'list' => $data), 'status' => 0, 'msg' => '')); Gateway::sendToAll($message, array_values($client_ids)); $users = array_diff($users, array_keys($client_ids)); } if ($remove_current_user) { $uid = (int) Message::getLoggedUserInfo('uid'); if (in_array($uid, $users)) { $key = @array_search($uid, $users); if (isset($users[$key])) { unset($users[$key]); } } } if ($users) { $data = array_pop($data); $alert = $data['content']; $data['push_type'] = 'message'; \Lib\Jpush::pushMessage($users, $alert, $data); } }