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 . ']'); }
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; } } } }
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'); } }