Exemple #1
0
 /**
  * 有消息时
  * @param int $uid
  * @param string $message
  */
 public static function onMessage($uid, $message)
 {
     $message_data = json_decode($message, true);
     // 向所有人发送
     if ($message_data['to_uid'] == 'all') {
         return GateWay::sendToAll($message);
     } else {
         return GateWay::sendToUid($message_data['to_uid'], $message);
     }
 }
 /**
  * 当有用户连接时,会触发该方法
  */
 public static function onConnect($message)
 {
     // WebSocket 握手阶段
     if (0 === strpos($message, 'GET')) {
         // 解析Sec-WebSocket-Key
         $Sec_WebSocket_Key = '';
         if (preg_match("/Sec-WebSocket-Key: *(.*?)\r\n/", $message, $match)) {
             $Sec_WebSocket_Key = $match[1];
         }
         $new_key = base64_encode(sha1($Sec_WebSocket_Key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));
         $origin_host = 'workerman.net';
         if (preg_match("/Origin: *(.*?)\r\n/", $message, $match)) {
             $origin_url = $match[1];
             $url_info = parse_url($origin_url);
             if (isset($url_info['host'])) {
                 $origin_host = $url_info['host'];
             }
         }
         // 握手返回的数据
         $new_message = "HTTP/1.1 101 Switching Protocols\r\n";
         $new_message .= "Upgrade: websocket\r\n";
         $new_message .= "Sec-WebSocket-Version: 13\r\n";
         $new_message .= "Connection: Upgrade\r\n";
         $new_message .= "Sec-WebSocket-Protocol: {$origin_host}\r\n";
         $new_message .= "Sec-WebSocket-Accept: {$new_key}\r\n\r\n";
         // 把时间戳当成uid,uid固定为10位数字
         $uid = substr(strval(microtime(true)), 2, 7) * 100 % 10000000000;
         if ($uid < 1000000000) {
             $uid += 1000000000;
         }
         // 记录uid到gateway通信地址的映射
         GateWay::storeUid($uid);
         // 发送数据包到address对应的gateway,确认connection成功
         GateWay::notifyConnectionSuccess($uid);
         // 发送数据包到客户端 完成握手
         $new_message .= WebSocket::encode(pack("CI", 0, $uid));
         $new_message .= WebSocket::encode(pack("CII", 6, 2007987396, 11350));
         GateWay::sendToCurrentUid($new_message);
         // 地图
         Gateway::sendToCurrentUid(pack("H*", '827e04b50396000000f30100005e0000001e030000c7000000480400009c000000710500002f0000009a06000042000000c1070000c3000000e8080000c00000000f0a00004a000000340b0000b9000000590c0000850000007d0d0000df000000a00e00008e000000c30f000093000000e5100000d1000000061200005e000000271300002800000046140000aa000000651500007900000084160000d3000000a11700002b000000be1800006a000000da1900004e000000f61a0000bd000000111c0000d00000002b1d0000cc000000441e0000ad0000005d1f0000c500000075200000da0000008c2100008a000000a2220000b9000000b8230000cf000000cd24000083000000e225000059000000f52600002700000009280000430000001b290000510000002d2a00009c0000003e2b00006e0000004e2c0000c10000005e2d0000c20000006d2e0000440000007b2f00005700000088300000d70000009531000022000000a23200009a000000ad3300008d000000b8340000c9000000c23500009e000000cc36000040000000d537000054000000dd380000d8000000e539000048000000ec3a000075000000f23b00005d000000f83c000029000000fd3d0000a2000000013f00009200000005400000df00000008410000270000000a4200003f0000000c4300009b0000000d440000230000000d450000cf0000000d460000c40000000c470000cf0000000b4800006b00000009490000a9000000064a0000b5000000034b0000af000000ff4b0000bd000000fa4c00006b000000f54d0000be000000ef4e00002c000000e84f000075000000e1500000b4000000d951000027000000d1520000df000000c85300006b000000be54000051000000b455000070000000a9560000980000009e5700004b000000925800006a000000855900009f000000785a0000750000006a5b0000d50000005b5c0000630000004c5d0000420000003d5e0000910000002c5f0000310000001b600000b20000000a61000056000000f861000069000000e562000061000000d2630000cc000000be640000e1000000a9650000b600000094660000a30000007f670000730000006868000097000000526900006d0000003a6a0000ca000000226b0000730000000a6c000097000000f06c00007a000000d76d000049000000bc6e000052000000a26f0000a600000086700000980000006a7100005e0000004e720000a200000030730000d90000001374000047000000f47400003a000000d575000039000000b67600007400000096770000260000007678000052000000547900007e000000337a0000c2000000117b0000e3000000ee7b000028000000cb7c0000c7000000a77d0000e5000000827e00008f0000005d7f00006200000038800000920000001281000062000000eb810000c6000000c4820000450000009c8300007b000000748400005f0000004b850000720000002286000094000000f8860000e1000000ce87000051000000a38800008c00000077890000ad0000004b8a0000330000001f8b000070000000f28b000083000000c48c000084000000968d0000b1000000688e0000c7000000388f0000c9000000099000003a000000d990000099000000a89100002f000000779200002f0000004593000026000000'));
         return;
     } elseif (trim($message) === '<policy-file-request/>') {
         $policy_xml = '<?xml version="1.0"?><cross-domain-policy><site-control permitted-cross-domain-policies="all"/><allow-access-from domain="*" to-ports="*"/></cross-domain-policy>' . "";
         return GateWay::sendToCurrentUid($policy_xml);
     }
     return null;
 }
Exemple #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));
     }
 }
Exemple #4
0
 function getTransferData(&$_GS, $withReg = FALSE)
 {
     global $_GP, $_GA, $_GE;
     $_S =& new AppSettings();
     loadSQL($user = new User(), "SELECT email FROM @user WHERE isAdm=1 LIMIT 1");
     $data = "id=" . $_GS->reg;
     $data .= "&ip=" . urlencode($_SERVER["REMOTE_ADDR"]);
     $data .= "&name=" . urlencode(Controller::getBaseUrl());
     $data .= "&php=" . urlencode(phpversion());
     $data .= "&mysql=" . urlencode(mysql_get_server_info());
     $data .= "&version=" . urlencode($_GS->instver);
     $data .= "&date=" . urlencode($_GS->creationtime->getDbFormat());
     $data .= "&lastUpdate=" . urlencode($_GS->lastUpdate->getDbFormat());
     $data .= "&systemEmail=" . urlencode($_S->adminEmail);
     $data .= "&adminEmail=" . urlencode($user->email);
     if (!empty($_GE)) {
         $data .= "&orderEmail=" . urlencode($_GE);
     }
     if (!empty($_GP)) {
         $data .= "&orderCode=" . urlencode($_GP);
     }
     if (!empty($_GA)) {
         $data .= "&affiliateId=" . urlencode($_GA);
     }
     $branch = $this->getBranch();
     $data .= "&branch={$branch}";
     getDbCount($count, "SELECT COUNT(*) FROM @item");
     $data .= "&itemNum={$count}";
     getDbCount($count, "SELECT COUNT(*) FROM @category");
     $data .= "&catNum={$count}";
     $data .= "&webServer=" . (!empty($_SERVER['REQUEST_URI']) ? 'Apache' : 'IIS');
     $data .= "&theme=" . urlencode($_S->defaultTheme);
     $data .= "&lang=" . urlencode($_S->defaultLanguage);
     $data .= "&allowSelectTheme=" . $_S->allowSelectTheme;
     $data .= "&enablePermalinks=" . $_S->enablePermalinks;
     $data .= "&cascadingCategorySelect=" . $_S->cascadingCategorySelect;
     $data .= "&ecommerceEnabled=" . $_S->ecommerceEnabled;
     $data .= "&enableCombine=" . $_S->enableCombine;
     $data .= "&mainTitle=" . urlencode($_S->mainTitle);
     $data .= "&mainDescription=" . urlencode($_S->mainDescription);
     $data .= "&mainKeywords=" . urlencode($_S->mainKeywords);
     if ($_S->ecommerceEnabled == Settings_ecommEnabled) {
         $_ES =& new ECommSettings();
         $data .= "&model=" . $_ES->model;
         $data .= "&paypal_enabled=" . $_ES->paypal_enabled;
         $data .= "&authorize_net_enabled=" . $_ES->authorize_net_enabled;
         $data .= "&paypal_integrationMethod=" . $_ES->paypal_integrationMethod;
         $data .= "&authorize_net_integrationMethod=" . $_ES->authorize_net_integrationMethod;
         $gateways = array();
         foreach (GateWay::getGateways() as $gateway) {
             if ($gateway != 'paypal' && $gateway != 'authorize_net') {
                 $gateways[] = $gateway;
             }
         }
         $data .= "&extraGateways=" . urlencode(implode(", ", $gateways));
     }
     if ($withReg) {
         $data .= "&company=" . urlencode($_POST["company"]);
         $data .= "&firstName=" . urlencode($_POST["firstName"]);
         $data .= "&lastName=" . urlencode($_POST["lastName"]);
         $data .= "&email=" . urlencode($_POST["email"]);
     }
     return $data;
 }
Exemple #5
0
 /**
  * 当用户断开连接时触发
  * @param int $client_id 连接id
  */
 public static function onClose($client_id)
 {
     // 向所有人发送
     GateWay::sendToAll("{$client_id} logout");
 }
Exemple #6
0
 /**
  * 当用户断开连接时触发的方法
  * @param integer $client_id 断开连接的用户id
  * @return void
  */
 public static function onClose($client_id)
 {
     // 广播 xxx 退出了
     GateWay::sendToAll(TextProtocol::encode("{$_SESSION['name']}[{$client_id}] logout"));
 }
 /**
  * 当用户断开连接时
  * @param integer $client_id 用户id
  */
 public static function onClose($client_id)
 {
     // 广播 xxx 退出了
     GateWay::sendToAll(json_encode(array('type' => 'closed', 'id' => $client_id)));
 }
Exemple #8
0
 /**
  * 当用户断开连接时触发
  * @param int $client_id 连接id
  */
 public static function onClose($client_id)
 {
     // 向所有人发送 @see http://gatewayworker-doc.workerman.net/gateway-worker-development/send-to-all.html
     GateWay::sendToAll("{$client_id} logout");
 }
Exemple #9
0
 /**
  * 有消息时触发该方法
  * @param int $uid 发消息的uid
  * @param string $message 消息
  * @return void
  */
 public static function onMessage($uid, $message)
 {
     $message_data = TextProtocol::decode($message);
     // 判断是否是私聊,私聊数据格式 uid:xxxxx
     $explode_array = explode(':', $message, 2);
     if (count($explode_array) > 1) {
         $to_uid = (int) $explode_array[0];
         GateWay::sendToUid($uid, TextProtocol::encode($_SESSION['name'] . "[{$uid}] said said to [{$to_uid}] :" . $explode_array[1]));
         return GateWay::sendToUid($to_uid, TextProtocol::encode($_SESSION['name'] . "[{$uid}] said to You :" . $explode_array[1]));
     }
     // 群聊
     return GateWay::sendToAll(TextProtocol::encode($_SESSION['name'] . "[{$uid}] said :" . $message));
 }