Пример #1
0
 /**
  * 有消息时
  * @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));
     }
 }
Пример #2
0
 /**
  * 有消息时
  * @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;
     }
 }
Пример #3
0
 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));
     }
 }
Пример #4
0
 /**
  * 有消息时
  * @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));
     }
 }
Пример #5
0
 /**
  * 当客户端断开连接时
  * @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);
         }
     }
 }
Пример #6
0
 /**
  * 当客户端发来消息时触发
  * @param int $client_id 连接id
  * @param mixed $message 具体消息
  */
 public static function onMessage($client_id, $message)
 {
     // 向所有人发送
     Gateway::sendToAll("{$client_id} said {$message}");
 }
Пример #7
0
 /**
  * 当客户端发来消息时触发
  * @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}");
 }
Пример #8
0
 /**
  * 不允许多用户登录
  * 剔除存储用户
  */
 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;
 }
Пример #9
0
 /**
  * 有消息时
  * @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);
     }
 }
Пример #10
0
 /**
  * 向客户端推送消息
  * @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);
 }
Пример #11
0
 /**
  * 向客户端推送消息
  * @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);
     }
 }