self.__flash =
WebSocket.__flash.create(url, protocol, proxyHost || null, proxyPort || 0, headers || null);
+ self.__messageHandler = function() {
+ var i, arr, data;
+ arr = self.__flash.readSocketData();
+ for (i=0; i < arr.length; i++) {
+ data = decodeURIComponent(arr[i]);
+ try {
+ if (self.onmessage) {
+ var e;
+ if (window.MessageEvent) {
+ e = document.createEvent("MessageEvent");
+ e.initMessageEvent("message", false, false, data, null, null, window, null);
+ } else { // IE
+ e = {data: data};
+ }
+ self.onmessage(e);
+ }
+ } catch (e) {
+ console.error(e.toString());
+ }
+ }
+ };
+
self.__flash.addEventListener("open", function(fe) {
- console.log("web-socket.js open");
+ self.readyState = self.__flash.getReadyState();
+
+ // For browsers (like Opera) that drop events, also poll for
+ // message data
+ if (self.__messageHandlerID) {
+ clearInterval(self.__messageHandlerID);
+ }
+ self.__messageHandlerID = setInterval(function () {
+ //console.log("polling for message data");
+ self.__messageHandler; }, 500);
+
try {
if (self.onopen) {
self.onopen();
});
self.__flash.addEventListener("close", function(fe) {
+ self.readyState = self.__flash.getReadyState();
+
+ if (self.__messageHandlerID) {
+ clearInterval(self.__messageHandlerID);
+ }
try {
if (self.onclose) self.onclose();
} catch (e) {
}
});
- self.__flash.addEventListener("message", function(fe) {
- var i, arr, data;
- arr = self.__flash.readSocketData();
- for (i=0; i < arr.length; i++) {
- data = decodeURIComponent(arr[i]);
- try {
- if (self.onmessage) {
- var e;
- if (window.MessageEvent) {
- e = document.createEvent("MessageEvent");
- e.initMessageEvent("message", false, false, data, null, null, window, null);
- } else { // IE
- e = {data: data};
- }
- self.onmessage(e);
- }
- } catch (e) {
- console.error(e.toString());
- }
- }
- });
+ self.__flash.addEventListener("message", self.__messageHandler);
self.__flash.addEventListener("error", function(fe) {
+ if (self.__messageHandlerID) {
+ clearInterval(self.__messageHandlerID);
+ }
try {
if (self.onerror) self.onerror();
} catch (e) {
// which causes weird error:
// > You are trying to call recursively into the Flash Player which is not allowed.
this.readyState = WebSocket.CLOSED;
+ if (this.__messageHandlerID) {
+ clearInterval(this.__messageHandlerID);
+ }
if (this.onclose) this.onclose();
};