Browse Source

added Socket Wrapper.

Nicolas Cannasse 18 years ago
parent
commit
0db48c63f1

+ 2 - 0
std/haxe/ImportAll.hx

@@ -64,6 +64,7 @@ import haxe.remoting.Connection;
 import haxe.remoting.DelayedConnection;
 import haxe.remoting.DelayedConnection;
 #if flash
 #if flash
 import haxe.remoting.LocalConnection;
 import haxe.remoting.LocalConnection;
+import haxe.remoting.SocketWrapper;
 #end
 #end
 import haxe.remoting.Proxy;
 import haxe.remoting.Proxy;
 #if !js
 #if !js
@@ -551,6 +552,7 @@ import js.Boot;
 import js.Lib;
 import js.Lib;
 import js.Dom;
 import js.Dom;
 import js.XMLHttpRequest;
 import js.XMLHttpRequest;
+import js.XMLSocket;
 
 
 #end
 #end
 
 

+ 6 - 2
std/haxe/remoting/SocketConnection.hx

@@ -27,6 +27,8 @@ package haxe.remoting;
 import flash.net.XMLSocket;
 import flash.net.XMLSocket;
 #else flash
 #else flash
 import flash.XMLSocket;
 import flash.XMLSocket;
+#else js
+import js.XMLSocket;
 #end
 #end
 
 
 class SocketConnection extends AsyncConnection {
 class SocketConnection extends AsyncConnection {
@@ -140,7 +142,7 @@ class SocketConnection extends AsyncConnection {
 		s.output.writeChar(c2);
 		s.output.writeChar(c2);
 		s.output.write(msg);
 		s.output.write(msg);
 		s.output.writeChar(0);
 		s.output.writeChar(0);
-		#else flash
+		#else (flash || js)
 		var s : XMLSocket = __data;
 		var s : XMLSocket = __data;
 		s.send(Std.chr(c1)+Std.chr(c2)+msg);
 		s.send(Std.chr(c1)+Std.chr(c2)+msg);
 		#else error
 		#else error
@@ -188,6 +190,8 @@ class SocketConnection extends AsyncConnection {
 			var obj = flash.Lib.eval(path.join("."));
 			var obj = flash.Lib.eval(path.join("."));
 			#else neko
 			#else neko
 			var obj = sc.__r.resolvePath(path);
 			var obj = sc.__r.resolvePath(path);
+			#else js
+			var obj = js.Lib.eval(path.join("."));
 			#else error
 			#else error
 			#end
 			#end
 			var fptr = Reflect.field(obj,fname);
 			var fptr = Reflect.field(obj,fname);
@@ -247,7 +251,7 @@ class SocketConnection extends AsyncConnection {
 		return cnx.__data;
 		return cnx.__data;
 	}
 	}
 
 
-	#else flash
+	#else (flash || js)
 
 
 	public static function socketConnect( s : XMLSocket ) {
 	public static function socketConnect( s : XMLSocket ) {
 		var sc = new SocketConnection(s,[]);
 		var sc = new SocketConnection(s,[]);

+ 58 - 0
std/haxe/remoting/SocketWrapper.hx

@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2005-2007, The haXe Project Contributors
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE HAXE PROJECT CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE HAXE PROJECT CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+package haxe.remoting;
+
+/**
+	See [js.XMLSocket]
+**/
+class SocketWrapper {
+
+	static var sockets = Reflect.empty();
+
+	static function create( id : String ) {
+		#if flash9
+		throw "Not implemented";
+		#else true
+		var s = new flash.XMLSocket();
+		var cnx : { private function __resolve( id : String ) : haxe.remoting.Connection; } = haxe.remoting.Connection.jsConnect().js.XMLSocket.sockets;
+		var cnx = cnx.__resolve(id);
+		Reflect.setField(sockets,id,s);
+		s.onConnect = function(b) {
+			cnx.onConnect.call([b]);
+		};
+		s.onData = function(data) {
+			cnx.onData.call([data]);
+		};
+		s.onClose = function() {
+			cnx.onClose.call([]);
+		};
+		#end
+	}
+
+	static function destroy( id : String ) {
+		Reflect.deleteField(sockets,id);
+	}
+
+}

+ 74 - 0
std/js/XMLSocket.hx

@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2005-2007, The haXe Project Contributors
+ * All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   - Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ *   - Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE HAXE PROJECT CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE HAXE PROJECT CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ */
+package js;
+
+/**
+	By compiling the [flash.SocketWrapper] into a SWF, you can create and use XMLSockets directly from Javascript.
+**/
+class XMLSocket {
+
+	static var sockets = Reflect.empty();
+	static var ID = 0;
+
+	var id : String;
+	var rcnx : haxe.remoting.Connection;
+	var cnx : haxe.remoting.Connection;
+
+	public function new( flashObject : String ) {
+		id = "s"+(ID++);
+		rcnx = haxe.remoting.Connection.flashConnect(flashObject).haxe.remoting.SocketWrapper;
+		rcnx.create.call([id]);
+		var cnx : { private function __resolve( id : String ) : haxe.remoting.Connection; } = rcnx.sockets;
+		this.cnx = cnx.__resolve(Std.string(id));
+		Reflect.setField(sockets,id,this);
+	}
+
+	public function destroy() {
+		rcnx.destroy.call([id]);
+		Reflect.deleteField(sockets,id);
+	}
+
+	public function connect( host : String, port : Int ) {
+		cnx.connect.call([host,port]);
+	}
+
+	public function send( data : String ) {
+		cnx.send.call([data]);
+	}
+
+	public function close() {
+		cnx.close.call([]);
+	}
+
+	public function onData( data : String ) {
+	}
+
+	public function onClose() {
+	}
+
+	public function onConnect( b : Bool ) {
+	}
+
+}