diff options
author | hai.phan <hai.phan@gmail.com> | 2013-06-24 12:54:33 -0700 |
---|---|---|
committer | hai.phan <hai.phan@gmail.com> | 2013-06-24 12:54:33 -0700 |
commit | 0991abd0f5b969e5eaccc9f140835e41e0696555 (patch) | |
tree | bcddaa3371e86833fb63279d54cd96879c60cafb | |
parent | c0855c6caec589c33acc22b6ee5e562287e65f3d (diff) | |
download | web-socket-js-0991abd0f5b969e5eaccc9f140835e41e0696555.tar.gz |
handle continuation frame from server #129
-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 |