diff options
-rw-r--r-- | WebSocketMain.swf | bin | 177139 -> 179939 bytes | |||
-rw-r--r-- | flash-src/src/net/gimite/websocket/WebSocket.as | 21 |
2 files changed, 20 insertions, 1 deletions
diff --git a/WebSocketMain.swf b/WebSocketMain.swf Binary files differindex f286c81..cda89d6 100644 --- a/WebSocketMain.swf +++ b/WebSocketMain.swf diff --git a/flash-src/src/net/gimite/websocket/WebSocket.as b/flash-src/src/net/gimite/websocket/WebSocket.as index dcde61b..6ae5aba 100644 --- a/flash-src/src/net/gimite/websocket/WebSocket.as +++ b/flash-src/src/net/gimite/websocket/WebSocket.as @@ -66,6 +66,7 @@ public class WebSocket extends EventDispatcher { private var expectedDigest:String; private var buffer:ByteArray = new ByteArray(); + private var fragmentsBuffer:ByteArray = null; private var headerState:int = 0; private var readyState:int = CONNECTING; @@ -329,15 +330,33 @@ public class WebSocket extends EventDispatcher { } else { switch (frame.opcode) { case OPCODE_CONTINUATION: - close(1003, "Received continuation frame, which is not implemented."); + if (fragmentsBuffer == null) { + close(1002, "Unexpected continuation frame"); + } else { + fragmentsBuffer.writeBytes(frame.payload); + if (frame.fin) { + data = readUTFBytes(fragmentsBuffer, 0, fragmentsBuffer.length); + try { + this.dispatchEvent(new WebSocketEvent("message", encodeURIComponent(data))); + } catch (ex:URIError) { + close(1007, "URIError while encoding the received data."); + } + fragmentsBuffer = null; + } + } break; case OPCODE_TEXT: + if (frame.fin) { var data:String = readUTFBytes(frame.payload, 0, frame.payload.length); try { this.dispatchEvent(new WebSocketEvent("message", encodeURIComponent(data))); } catch (ex:URIError) { close(1007, "URIError while encoding the received data."); } + } else { + fragmentsBuffer = new ByteArray(); + fragmentsBuffer.writeBytes(frame.payload); + } break; case OPCODE_BINARY: // See https://github.com/gimite/web-socket-js/pull/89 |