From af180155a8c997bfc5e353bf9a696457405b2b79 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Sun, 16 May 2010 19:21:21 -0500 Subject: [PATCH] Create FABridge tester. Move wstest into tests subdir. --- include/fab-test/FABTest.as | 37 +++++++ include/fab-test/FABTestMain.as | 28 +++++ include/fab-test/FABTestMain.swf | Bin 0 -> 6171 bytes include/fab-test/FABTestMessageEvent.as | 14 +++ include/fab-test/bridge/FABridge.as | 1 + include/fab-test/fab-test.js | 136 ++++++++++++++++++++++++ tests/fab.html | 114 ++++++++++++++++++++ wstest.html => tests/ws.html | 6 +- wstest.py => tests/ws.py | 4 +- 9 files changed, 336 insertions(+), 4 deletions(-) create mode 100644 include/fab-test/FABTest.as create mode 100644 include/fab-test/FABTestMain.as create mode 100644 include/fab-test/FABTestMain.swf create mode 100644 include/fab-test/FABTestMessageEvent.as create mode 120000 include/fab-test/bridge/FABridge.as create mode 100755 include/fab-test/fab-test.js create mode 100644 tests/fab.html rename wstest.html => tests/ws.html (98%) rename wstest.py => tests/ws.py (97%) diff --git a/include/fab-test/FABTest.as b/include/fab-test/FABTest.as new file mode 100644 index 00000000..fe3ed616 --- /dev/null +++ b/include/fab-test/FABTest.as @@ -0,0 +1,37 @@ +package { + +import flash.events.*; +import flash.external.*; +import flash.utils.*; + +[Event(name="message", type="FABTestMessageEvent")] +public class FABTest extends EventDispatcher { + + private var main:FABTestMain; + private var intervalID:int; + private var seqCnt:int; + + public function FABTest(main:FABTestMain) { + this.main = main; + ExternalInterface.call("console.log", "[FABTest] FABTest()"); + } + + public function start(eventDelay:int):void { + ExternalInterface.call("console.log", "[FABTest] start()"); + seqCnt = 0; + intervalID = setInterval(sendEvent, eventDelay); + } + + public function stop():void { + ExternalInterface.call("console.log", "[FABTest] stop()"); + clearInterval(intervalID); + } + + private function sendEvent():void { + //ExternalInterface.call("console.log", "[FABTest] sendEvent " + seqCnt); + dispatchEvent(new FABTestMessageEvent("message", encodeURIComponent(seqCnt.toString()))); + seqCnt = seqCnt + 1; + } +} + +} diff --git a/include/fab-test/FABTestMain.as b/include/fab-test/FABTestMain.as new file mode 100644 index 00000000..e16ded98 --- /dev/null +++ b/include/fab-test/FABTestMain.as @@ -0,0 +1,28 @@ +package { + +import flash.display.*; +import flash.events.*; +import bridge.FABridge; + +public class FABTestMain extends Sprite { + + public function FABTestMain() { + + // This is to avoid "You are trying to call recursively into the Flash Player ..." + // error which (I heard) happens when you pass bunch of messages. + // This workaround was written here: + // http://www.themorphicgroup.com/blog/2009/02/14/fabridge-error-you-are-trying-to-call-recursively-into-the-flash-player-which-is-not-allowed/ + FABridge.EventsToCallLater["flash.events::Event"] = "true"; + FABridge.EventsToCallLater["FABTestMessageEvent"] = "true"; + + var fab:FABridge = new FABridge(); + fab.rootObject = this; + //log("Flash initialized"); + } + + public function create():FABTest { + return new FABTest(this); + } +} + +} diff --git a/include/fab-test/FABTestMain.swf b/include/fab-test/FABTestMain.swf new file mode 100644 index 0000000000000000000000000000000000000000..fcdb9c8af2aefc94cdd9988d3f050ee6bb0a1a64 GIT binary patch literal 6171 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 literal 0 HcmV?d00001 diff --git a/include/fab-test/FABTestMessageEvent.as b/include/fab-test/FABTestMessageEvent.as new file mode 100644 index 00000000..fbf14650 --- /dev/null +++ b/include/fab-test/FABTestMessageEvent.as @@ -0,0 +1,14 @@ +package { + +import flash.events.*; + +public class FABTestMessageEvent extends Event { + public var data:String; + + public function FABTestMessageEvent(type:String, data:String) { + super(type); + this.data = data; + } +} + +} diff --git a/include/fab-test/bridge/FABridge.as b/include/fab-test/bridge/FABridge.as new file mode 120000 index 00000000..7d525f84 --- /dev/null +++ b/include/fab-test/bridge/FABridge.as @@ -0,0 +1 @@ +../../web-socket-js/flash-src/bridge/FABridge.as \ No newline at end of file diff --git a/include/fab-test/fab-test.js b/include/fab-test/fab-test.js new file mode 100755 index 00000000..499366e5 --- /dev/null +++ b/include/fab-test/fab-test.js @@ -0,0 +1,136 @@ +// Copyright: Hiroshi Ichikawa +// Lincense: New BSD Lincense + +(function() { + + var console = window.console; + if (!console) console = {log: function(){ }, error: function(){ }}; + + function hasFlash() { + if ('navigator' in window && 'plugins' in navigator && navigator.plugins['Shockwave Flash']) { + return !!navigator.plugins['Shockwave Flash'].description; + } + if ('ActiveXObject' in window) { + try { + return !!new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version'); + } catch (e) {} + } + return false; + } + + if (!hasFlash()) { + console.error("Flash Player is not installed."); + return; + } + + FABTest = function() { + var self = this; + FABTest.__addTask(function() { + self.__flash = + FABTest.__flash.create(); + + self.__flash.addEventListener("message", function(fe) { + var data = decodeURIComponent(fe.getData()); + try { + if (self.onmessage) { + var e; + if (window.MessageEvent) { + e = document.createEvent("MessageEvent"); + e.initMessageEvent("message", false, false, data, null, null, window); + } else { // IE + e = {data: data}; + } + self.onmessage(e); + } + } catch (e) { + console.error(e.toString()); + } + }); + + //console.log("[FABTest] Flash object is ready"); + }); + } + + FABTest.prototype.start = function(eventDelay) { + if (!this.__flash) { + throw "INVALID_STATE_ERR: FABTest connection has not been established"; + } + var result = this.__flash.start(eventDelay); + if (result < 0) { // success + return true; + } else { + return false; + } + }; + + FABTest.prototype.stop = function() { + if (!this.__flash) return; + this.__flash.stop(); + }; + + + + FABTest.__tasks = []; + + FABTest.__initialize = function() { + if (!FABTest.__swfLocation) { + console.error("[FABTest] set FABTest.__swfLocation to location of FABTestMain.swf"); + return; + } + var container = document.createElement("div"); + container.id = "fabTestContainer"; + // Puts the Flash out of the window. Note that we cannot use display: none or visibility: hidden + // here because it prevents Flash from loading at least in IE. + container.style.position = "absolute"; + container.style.left = "-100px"; + container.style.top = "-100px"; + var holder = document.createElement("div"); + holder.id = "fabTestFlash"; + container.appendChild(holder); + document.body.appendChild(container); + swfobject.embedSWF( + FABTest.__swfLocation, "fabTestFlash", "8", "8", "9.0.0", + null, {bridgeName: "fabTest"}, null, null, + function(e) { + if (!e.success) console.error("[FABTest] swfobject.embedSWF failed"); + } + ); + FABridge.addInitializationCallback("fabTest", function() { + try { + console.log("[FABTest] FABridge initializad"); + FABTest.__flash = FABridge.fabTest.root(); + for (var i = 0; i < FABTest.__tasks.length; ++i) { + FABTest.__tasks[i](); + } + FABTest.__tasks = []; + } catch (e) { + console.error("[FABTest] " + e.toString()); + } + }); + }; + + FABTest.__addTask = function(task) { + if (FABTest.__flash) { + task(); + } else { + FABTest.__tasks.push(task); + } + } + + // called from Flash + function fabTestLog(message) { + console.log(decodeURIComponent(message)); + } + + // called from Flash + function fabTestError(message) { + console.error(decodeURIComponent(message)); + } + + if (window.addEventListener) { + window.addEventListener("load", FABTest.__initialize, false); + } else { + window.attachEvent("onload", FABTest.__initialize); + } + +})(); diff --git a/tests/fab.html b/tests/fab.html new file mode 100644 index 00000000..6079eccc --- /dev/null +++ b/tests/fab.html @@ -0,0 +1,114 @@ + + + FABridge Event Test + + + + Event Delay (ms):   +   + +

+ + + + + + + + +
Good Events Received:
0
Errors (Bad Events Received:)
0
+ +
+ Errors:
+ + + + + + + + + + + + + diff --git a/wstest.html b/tests/ws.html similarity index 98% rename from wstest.html rename to tests/ws.html index c0ca6230..a2f223d1 100644 --- a/wstest.html +++ b/tests/ws.html @@ -37,9 +37,9 @@ src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'> --> - - - + + +