From e9825e0ba7bd608c2b3303fdcd264e017f3e2721 Mon Sep 17 00:00:00 2001 From: Chris Boden Date: Sun, 20 May 2012 01:04:09 -0400 Subject: [PATCH] [WebSocket] Message refactoring Moved the message buffering into its own class --- src/Ratchet/WebSocket/MessageParser.php | 37 +++++++++++++++++++++++ src/Ratchet/WebSocket/WsServer.php | 39 ++----------------------- 2 files changed, 40 insertions(+), 36 deletions(-) create mode 100644 src/Ratchet/WebSocket/MessageParser.php diff --git a/src/Ratchet/WebSocket/MessageParser.php b/src/Ratchet/WebSocket/MessageParser.php new file mode 100644 index 0000000..4ac294a --- /dev/null +++ b/src/Ratchet/WebSocket/MessageParser.php @@ -0,0 +1,37 @@ +WebSocket->message)) { + $from->WebSocket->message = $from->WebSocket->version->newMessage(); + } + + // There is a frame fragment attatched to the connection, add to it + if (!isset($from->WebSocket->frame)) { + $from->WebSocket->frame = $from->WebSocket->version->newFrame(); + } + + $from->WebSocket->frame->addBuffer($data); + if ($from->WebSocket->frame->isCoalesced()) { + if ($from->WebSocket->frame->getOpcode() > 2) { + $from->close(); + throw new \UnexpectedValueException('Control frame support coming soon!'); + } + // Check frame + // If is control frame, do your thing + // Else, add to message + // Control frames (ping, pong, close) can be sent in between a fragmented message + + $from->WebSocket->message->addFrame($from->WebSocket->frame); + unset($from->WebSocket->frame); + } + + if ($from->WebSocket->message->isCoalesced()) { + $parsed = (string)$from->WebSocket->message; + unset($from->WebSocket->message); + + return $parsed; + } + } +} \ No newline at end of file diff --git a/src/Ratchet/WebSocket/WsServer.php b/src/Ratchet/WebSocket/WsServer.php index 2ca5e75..1dac9e2 100644 --- a/src/Ratchet/WebSocket/WsServer.php +++ b/src/Ratchet/WebSocket/WsServer.php @@ -69,7 +69,7 @@ class WsServer implements MessageComponentInterface { // mb_internal_encoding('UTF-8'); $this->handshaker = new HandshakeNegotiator; - //$this->messager = new MessageParser; + $this->messager = new MessageParser; $this->_decorating = $component; $this->connections = new \SplObjectStorage; @@ -115,41 +115,8 @@ class WsServer implements MessageComponentInterface { return $this->_decorating->onOpen($conn); } - /* - if (null !== ($parsed = $this->messager->onData($from, $msg))) { - $this->_decorating->onMessage($from, $parsed); - } - /**/ - -/*************************************************************/ - - if (!isset($from->WebSocket->message)) { - $from->WebSocket->message = $from->WebSocket->version->newMessage(); - } - - // There is a frame fragment attatched to the connection, add to it - if (!isset($from->WebSocket->frame)) { - $from->WebSocket->frame = $from->WebSocket->version->newFrame(); - } - - $from->WebSocket->frame->addBuffer($msg); - if ($from->WebSocket->frame->isCoalesced()) { - if ($from->WebSocket->frame->getOpcode() > 2) { - $from->close(); - throw new \UnexpectedValueException('Control frame support coming soon!'); - } - // Check frame - // If is control frame, do your thing - // Else, add to message - // Control frames (ping, pong, close) can be sent in between a fragmented message - - $from->WebSocket->message->addFrame($from->WebSocket->frame); - unset($from->WebSocket->frame); - } - - if ($from->WebSocket->message->isCoalesced()) { - $this->_decorating->onMessage($this->connections[$from], (string)$from->WebSocket->message); - unset($from->WebSocket->message); + if (null !== ($parsed = $this->messager->onData($conn, $msg))) { + $this->_decorating->onMessage($conn, $parsed); } }