Beispiel #1
0
 protected function addSocketError($id, $preMessage)
 {
     if (isset($this->clients[$id])) {
         $errorNo = $this->clients[$id]->errCode;
         $errorStr = socket_strerror($errorNo);
     } else {
         $errorNo = 0;
         $errorStr = '';
     }
     Logger::addError($preMessage . ': ' . $id . ' ' . $errorStr . '[' . $errorNo . ']');
 }
Beispiel #2
0
 protected function dealWebsocketPacket($server, $fd, $from_id)
 {
     $session = $this->getSwooleSession($server, $fd, $from_id);
     $sessionManager = SessionManager::getInstance();
     for (;;) {
         $packetStr = $this->wsBuffProcessor->consumePacket($fd, $response);
         if ($response == WebsocketBufferProcessor::$PONG) {
             Logger::addInfo('send pong packet : (fd: ' . $fd . ')');
             $this->instance->send($fd, WebsocketBufferProcessor::$PONG);
         } else {
             if ($response == WebsocketBufferProcessor::$CLOSE) {
                 $this->close($session);
                 // browser not close the connection but send a close packet, so close it manual.
             }
         }
         if (is_string($packetStr)) {
             if ($packet = $this->parsePacket($packetStr, $sessionId, $serverInfo)) {
                 Logger::addInfo('parsed packet info: (fd: ' . $fd . ')' . str_replace("\n", ' ', var_export($packet, true)) . 'session: ' . $sessionId . '|serverInfo: ' . $serverInfo);
                 if (!$sessionManager->isValidSession($session) && $sessionId && ($fs = $sessionManager->getSessionBySessionId($sessionId))) {
                     $session = $fs;
                 }
                 if (false === $this->dispatchReceive($session, $packet)) {
                     Logger::addInfo('dispatch receive failed: (fd: ' . $fd . ')');
                 }
             } else {
                 $this->increaseError();
                 Logger::addError('str can not convert packet(fd: ' . $fd . ')[BEGIN]' . $packetStr . '[END]');
             }
         } else {
             if (false === $packetStr) {
                 $this->increaseError();
                 Logger::addError('packet parse failed(fd: ' . $fd . ')');
                 break;
             } else {
                 break;
             }
         }
     }
 }
Beispiel #3
0
 public function onSwoolePipeMessage(swoole_server $server, $from_worker_id, $message)
 {
     /**
      * @var SwooleSession $session
      * @var Packet $packet
      */
     Logger::addInfo('got pipe message');
     $sessionInfo = unpack('N', substr($message, 0, 4));
     $packetInfo = unpack('N', substr($message, 4, 4));
     if (isset($sessionInfo[1], $packetInfo[1]) && strlen($message) == $sessionInfo[1] + $packetInfo[1] + 8) {
         if ($session = ConvertUtil::unpack(substr($message, 8, $sessionInfo[1]))) {
             if ($packet = ConvertUtil::unpack(substr($message, 8 + $sessionInfo[1]))) {
                 $this->sendPacketOfCurrentProcess($session, $packet);
             } else {
                 Logger::addError('pipe crashed packet info');
             }
         } else {
             Logger::addError('pipe crashed session info');
         }
     } else {
         Logger::addError('pipe crashed length info');
     }
 }