gimite / web-socket-js

HTML5 Web Socket implementation powered by Flash
BSD 3-Clause "New" or "Revised" License
2.73k stars 489 forks source link

close() call should call __flash.close() when CONNECTING #37

Closed kanaka closed 13 years ago

kanaka commented 14 years ago

Right now the close() call only calls __flash.close() if readyState is OPEN. But it should really call close any time that readyState is not CLOSED or CLOSING.

The case I ran into is when I want to do the following:

  1. make a test connection
  2. tell the server to setup for a connection
  3. connect again

I call close on the test connection, but since it is ignored when CONNECTING, it eventually times out with a error. But by that time I have already issued a new connection, it causes the new connection to fail. close() should cancel CONNECTING state too.

Here is my recommended change:

--- a/web-socket-js/web_socket.js
+++ b/web-socket-js/web_socket.js
@@ -119,7 +119,10 @@
   WebSocket.prototype.close = function() {
     if (!this.__flash) return;
     this.readyState = this.__flash.getReadyState();
-    if (this.readyState != WebSocket.OPEN) return;
+    if ((this.readyState === WebSocket.CLOSED) ||
+        (this.readState === WebSocket.CLOSING)) {
+        return;
+    }
     this.__flash.close();
     // Sets/calls them manually here because Flash WebSocketConnection.close cannot fire events
     // which causes weird error:
gimite commented 14 years ago

Thanks for the patch. Patched.