summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhai.phan <hai.phan@gmail.com>2013-06-24 12:54:33 -0700
committerhai.phan <hai.phan@gmail.com>2013-06-24 12:54:33 -0700
commit0991abd0f5b969e5eaccc9f140835e41e0696555 (patch)
treebcddaa3371e86833fb63279d54cd96879c60cafb
parentc0855c6caec589c33acc22b6ee5e562287e65f3d (diff)
downloadweb-socket-js-0991abd0f5b969e5eaccc9f140835e41e0696555.tar.gz
handle continuation frame from server #129
-rw-r--r--WebSocketMain.swfbin177139 -> 179939 bytes
-rw-r--r--flash-src/src/net/gimite/websocket/WebSocket.as21
2 files changed, 20 insertions, 1 deletions
diff --git a/WebSocketMain.swf b/WebSocketMain.swf
index f286c81..cda89d6 100644
--- a/WebSocketMain.swf
+++ b/WebSocketMain.swf
Binary files 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