From 0991abd0f5b969e5eaccc9f140835e41e0696555 Mon Sep 17 00:00:00 2001 From: "hai.phan" Date: Mon, 24 Jun 2013 12:54:33 -0700 Subject: handle continuation frame from server #129 --- WebSocketMain.swf | Bin 177139 -> 179939 bytes flash-src/src/net/gimite/websocket/WebSocket.as | 21 ++++++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/WebSocketMain.swf b/WebSocketMain.swf index f286c81..cda89d6 100644 Binary files a/WebSocketMain.swf and b/WebSocketMain.swf differ 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 -- cgit v1.2.1