From 47c316c59312f137079aa67adae1d8ea6b126cc9 Mon Sep 17 00:00:00 2001 From: Hiroshi Ichikawa Date: Sat, 17 Dec 2011 21:04:17 +0900 Subject: Firing close event on error in send(). Hopefully fixes issue #92 . --- WebSocketMain.swf | Bin 177103 -> 177119 bytes WebSocketMainInsecure.zip | Bin 170287 -> 170252 bytes flash-src/src/net/gimite/websocket/WebSocket.as | 12 +++++++----- web_socket.js | 8 ++++---- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/WebSocketMain.swf b/WebSocketMain.swf index d14c51c..3307084 100644 Binary files a/WebSocketMain.swf and b/WebSocketMain.swf differ diff --git a/WebSocketMainInsecure.zip b/WebSocketMainInsecure.zip index e3f974f..1cc1862 100644 Binary files a/WebSocketMainInsecure.zip and b/WebSocketMainInsecure.zip differ diff --git a/flash-src/src/net/gimite/websocket/WebSocket.as b/flash-src/src/net/gimite/websocket/WebSocket.as index 111b705..4508557 100644 --- a/flash-src/src/net/gimite/websocket/WebSocket.as +++ b/flash-src/src/net/gimite/websocket/WebSocket.as @@ -156,7 +156,6 @@ public class WebSocket extends EventDispatcher { var dataBytes:ByteArray = new ByteArray(); dataBytes.writeUTFBytes(data); if (readyState == OPEN) { - // TODO: binary API support var frame:WebSocketFrame = new WebSocketFrame(); frame.opcode = OPCODE_TEXT; frame.payload = dataBytes; @@ -467,10 +466,13 @@ public class WebSocket extends EventDispatcher { socket.writeBytes(header); socket.writeBytes(maskedPayload); socket.flush(); - } catch (ex:IOError) { - logger.error("IOError while sending frame"); - // TODO Fire close event if it hasn't - readyState = CLOSED; + } catch (ex:Error) { + logger.error("Error while sending frame: " + ex.message); + setTimeout(function():void { + if (readyState != CLOSED) { + close(STATUS_CONNECTION_ERROR); + } + }, 0); return false; } return true; diff --git a/web_socket.js b/web_socket.js index 6b629a6..c92676e 100644 --- a/web_socket.js +++ b/web_socket.js @@ -99,10 +99,10 @@ */ WebSocket.prototype.close = function() { if (this.__createTask) { - clearTimeout(this.__createTask); - this.__createTask = null; - this.readyState = WebSocket.CLOSED; - return; + clearTimeout(this.__createTask); + this.__createTask = null; + this.readyState = WebSocket.CLOSED; + return; } if (this.readyState == WebSocket.CLOSED || this.readyState == WebSocket.CLOSING) { return; -- cgit v1.2.1