Bugfixed handling of fin flag in WebSocketConnection
This commit is contained in:
parent
6f45622b09
commit
560e5f7881
@ -18,6 +18,7 @@ class WebSocketConnection implements WebSocketInterface
|
||||
{
|
||||
use EventEmitterTrait;
|
||||
|
||||
// TODO maybe move constants to WebSocketProtocol?
|
||||
const OP_CONTINUATION = 0x0;
|
||||
const OP_FRAME_TEXT = 0x1;
|
||||
const OP_FRAME_BINARY = 0x2;
|
||||
@ -58,10 +59,7 @@ class WebSocketConnection implements WebSocketInterface
|
||||
$this->groupManager = $groupManager;
|
||||
|
||||
$this->inStream->on('data', $this->onWebSocketData(...));
|
||||
$this->inStream->on('close', function () {
|
||||
$this->close();
|
||||
$this->emit('close', []);
|
||||
});
|
||||
$this->inStream->on('close', $this->close(...));
|
||||
}
|
||||
|
||||
private function onWebSocketData($data)
|
||||
@ -79,15 +77,15 @@ class WebSocketConnection implements WebSocketInterface
|
||||
} else {
|
||||
$this->buffer .= $payload;
|
||||
}
|
||||
// Break out to avoid processing partial messages
|
||||
return;
|
||||
}
|
||||
|
||||
if ($final) {
|
||||
if ($this->bufferedOp !== null) {
|
||||
$payload = $this->buffer . $payload;
|
||||
$this->buffer = null;
|
||||
if ($this->bufferedOp !== null) {
|
||||
$opcode = $this->bufferedOp;
|
||||
$this->bufferedOp = null;
|
||||
}
|
||||
$opcode = $this->bufferedOp;
|
||||
$this->bufferedOp = null;
|
||||
}
|
||||
|
||||
switch ($opcode) {
|
||||
@ -257,15 +255,14 @@ class WebSocketConnection implements WebSocketInterface
|
||||
*/
|
||||
public function close()
|
||||
{
|
||||
// TODO send close
|
||||
$this->outStream->close();
|
||||
$this->inStream->close();
|
||||
// TODO emit close event
|
||||
|
||||
$this->emit('close', []);
|
||||
}
|
||||
|
||||
public function closeWithReason(string $reason, int $code=1000)
|
||||
{
|
||||
// TODO send close
|
||||
$payload = chr(($code >> 8) & 0xFF) . chr($code & 0xFF) . $reason;
|
||||
$this->send(self::OP_CLOSE, $payload);
|
||||
}
|
||||
@ -275,7 +272,7 @@ class WebSocketConnection implements WebSocketInterface
|
||||
*/
|
||||
public function end($data = null)
|
||||
{
|
||||
|
||||
// TODO implement me
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user