big update
This commit is contained in:
@@ -1,26 +1,27 @@
|
||||
package ru.m.core.connect;
|
||||
|
||||
import haxework.dispath.Dispatcher;
|
||||
import haxework.dispath.IDispatcher;
|
||||
import haxework.provider.Provider;
|
||||
import haxework.net.callback.ICallback;
|
||||
import haxe.io.Bytes;
|
||||
import protohx.Message;
|
||||
import ru.m.core.connect.IConnection;
|
||||
|
||||
class BaseConnection implements IConnection {
|
||||
public var handler(default,default):IConnectionHandler;
|
||||
public var packetHandler(default,default):IPacketHandler;
|
||||
public var handler(default,default):IDispatcher<IConnectionHandler>;
|
||||
public var packetHandler(default,default):IDispatcher<IPacketHandler>;
|
||||
public var connected(default, null):Bool;
|
||||
public var queue(default, null):PacketQueue;
|
||||
public var builder(default, null):IPacketBuilder;
|
||||
|
||||
public function new(?handler:IConnectionHandler = null, ?packetHandler:IPacketHandler) {
|
||||
public function new() {
|
||||
this.builder = Provider.get(IPacketBuilder);
|
||||
this.queue = new PacketQueue(builder);
|
||||
this.packetHandler = packetHandler;
|
||||
this.handler = handler;
|
||||
this.handler = new Dispatcher<IConnectionHandler>();
|
||||
this.packetHandler = new Dispatcher<IPacketHandler>();
|
||||
}
|
||||
|
||||
public function connect():ICallback<Dynamic> {
|
||||
public function connect():Void {
|
||||
throw "Not implemented";
|
||||
}
|
||||
|
||||
@@ -36,7 +37,7 @@ class BaseConnection implements IConnection {
|
||||
receive(packet);
|
||||
} catch (error:Dynamic) {
|
||||
trace(error);
|
||||
handler.onError(error);
|
||||
handler.dispatch(function(h) h.onError(error));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -46,13 +47,14 @@ class BaseConnection implements IConnection {
|
||||
|
||||
public function receive(packet:Message):Void {
|
||||
L.d("Receive", Type.getClassName(Type.getClass(packet)).split(".").pop());
|
||||
if (packetHandler == null) return;
|
||||
var name = "on" + Type.getClassName(Type.getClass(packet)).split(".").pop();
|
||||
var method = Reflect.field(packetHandler, name);
|
||||
if (method != null && Reflect.isFunction(method)) {
|
||||
Reflect.callMethod(packetHandler, method, [packet]);
|
||||
} else {
|
||||
packetHandler.onPacket(packet);
|
||||
}
|
||||
packetHandler.dispatch(function(h) {
|
||||
var method = Reflect.field(h, name);
|
||||
if (method != null && Reflect.isFunction(method)) {
|
||||
Reflect.callMethod(h, method, [packet]);
|
||||
} else {
|
||||
h.onPacket(packet);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,17 @@
|
||||
package ru.m.core.connect;
|
||||
|
||||
import haxework.net.callback.ICallback;
|
||||
import haxework.dispath.IDispatcher;
|
||||
import haxe.io.Bytes;
|
||||
import protohx.Message;
|
||||
|
||||
interface IConnection {
|
||||
public var connected(default,null):Bool;
|
||||
public var handler(default,default):IConnectionHandler;
|
||||
public var packetHandler(default,default):IPacketHandler;
|
||||
public var handler(default,default):IDispatcher<IConnectionHandler>;
|
||||
public var packetHandler(default,default):IDispatcher<IPacketHandler>;
|
||||
|
||||
public var builder(default,null):IPacketBuilder;
|
||||
|
||||
public function connect():ICallback<Dynamic>;
|
||||
public function connect():Void;
|
||||
public function disconnect():Void;
|
||||
public function send(packet:Message):Void;
|
||||
public function pushData(bytes:Bytes):Void;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
package ru.m.core.connect.flash;
|
||||
|
||||
import haxework.net.callback.Callback;
|
||||
import haxework.net.callback.ICallback;
|
||||
import ru.m.core.connect.IConnection.IConnectionHandler;
|
||||
import flash.utils.Endian;
|
||||
import haxe.io.BytesOutput;
|
||||
@@ -20,10 +18,8 @@ class FlashConnection extends BaseConnection {
|
||||
private var port:Int;
|
||||
private var socket:Socket;
|
||||
|
||||
private var callback:ICallback<Dynamic>;
|
||||
|
||||
public function new(host:String, port:Int, ?handler:IConnectionHandler = null) {
|
||||
super(handler);
|
||||
public function new(host:String, port:Int) {
|
||||
super();
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
connected = false;
|
||||
@@ -36,55 +32,43 @@ class FlashConnection extends BaseConnection {
|
||||
socket.endian = Endian.LITTLE_ENDIAN;
|
||||
}
|
||||
|
||||
override public function connect():ICallback<Dynamic> {
|
||||
callback = Callback.build();
|
||||
override public function connect():Void {
|
||||
socket.connect(host, port);
|
||||
return callback;
|
||||
}
|
||||
|
||||
override public function disconnect():Void {
|
||||
if (socket.connected) {
|
||||
socket.close();
|
||||
connected = false;
|
||||
if (handler != null) handler.onDisconnected();
|
||||
handler.dispatch(function(h) h.onDisconnected());
|
||||
}
|
||||
}
|
||||
|
||||
private function onError(event:ErrorEvent):Void {
|
||||
socket.close();
|
||||
connected = false;
|
||||
if (handler != null) handler.onError(event);
|
||||
if (callback != null) {
|
||||
var c = callback;
|
||||
callback = null;
|
||||
c.callFail(event);
|
||||
}
|
||||
handler.dispatch(function(h) h.onError(event));
|
||||
}
|
||||
|
||||
private function onConnect(_):Void {
|
||||
connected = true;
|
||||
if (handler != null) handler.onConnected();
|
||||
if (callback != null) {
|
||||
var c = callback;
|
||||
callback = null;
|
||||
c.callSuccess(null);
|
||||
}
|
||||
handler.dispatch(function(h) h.onConnected());
|
||||
}
|
||||
|
||||
private function onClose(_):Void {
|
||||
socket.close();
|
||||
connected = false;
|
||||
if (handler != null) handler.onDisconnected();
|
||||
handler.dispatch(function(h) h.onDisconnected());
|
||||
}
|
||||
|
||||
private function onSocketData(_):Void {
|
||||
try {
|
||||
var b = new flash.utils.ByteArray();
|
||||
socket.readBytes(b);
|
||||
var bs = Bytes.ofData(cast b);
|
||||
pushData(bs);
|
||||
var b = new flash.utils.ByteArray();
|
||||
socket.readBytes(b);
|
||||
var bs = Bytes.ofData(cast b);
|
||||
pushData(bs);
|
||||
} catch (error:Dynamic) {
|
||||
handler.onError(error);
|
||||
handler.dispatch(function(h) h.onError(error));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
package ru.m.core.connect.js;
|
||||
|
||||
import ru.m.core.Base64;
|
||||
import haxework.net.callback.Callback;
|
||||
import haxework.net.callback.ICallback;
|
||||
import ru.m.core.connect.IConnection.IConnectionHandler;
|
||||
import protohx.Message;
|
||||
import haxe.io.Bytes;
|
||||
@@ -23,10 +21,8 @@ class JsConnection extends BaseConnection {
|
||||
private var port:Int;
|
||||
private var socket:WebSocket;
|
||||
|
||||
private var callback:ICallback<Dynamic>;
|
||||
|
||||
public function new(host:String, port:Int, ?handler:IConnectionHandler = null) {
|
||||
super(handler);
|
||||
public function new(host:String, port:Int) {
|
||||
super();
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
connected = false;
|
||||
@@ -36,8 +32,7 @@ class JsConnection extends BaseConnection {
|
||||
return untyped __js__("self.socket = new WebSocket('ws://'+host+':'+port); ");
|
||||
}
|
||||
|
||||
override public function connect():ICallback<Dynamic> {
|
||||
callback = Callback.build();
|
||||
override public function connect():Void {
|
||||
var self = this;
|
||||
var decodeBytes = Base64.decodeBase64;
|
||||
socket = buildSocket(host, port);
|
||||
@@ -45,40 +40,29 @@ class JsConnection extends BaseConnection {
|
||||
socket.onclose = this.onClose;
|
||||
socket.onerror = this.onError;
|
||||
socket.onmessage = this.onSocketData;
|
||||
return callback;
|
||||
}
|
||||
|
||||
override public function disconnect():Void {
|
||||
socket.close();
|
||||
connected = false;
|
||||
if (handler != null) handler.onDisconnected();
|
||||
handler.dispatch(function(h) h.onDisconnected());
|
||||
}
|
||||
|
||||
private function onError(event:Dynamic):Void {
|
||||
socket.close();
|
||||
connected = false;
|
||||
if (handler != null) handler.onError(event);
|
||||
if (callback != null) {
|
||||
var c = callback;
|
||||
callback = null;
|
||||
c.callFail(event);
|
||||
}
|
||||
handler.dispatch(function(h) h.onError(event));
|
||||
}
|
||||
|
||||
private function onConnect(_):Void {
|
||||
connected = true;
|
||||
if (handler != null) handler.onConnected();
|
||||
if (callback != null) {
|
||||
var c = callback;
|
||||
callback = null;
|
||||
c.callSuccess(null);
|
||||
}
|
||||
handler.dispatch(function(h) h.onConnected());
|
||||
}
|
||||
|
||||
private function onClose(_):Void {
|
||||
socket.close();
|
||||
connected = false;
|
||||
if (handler != null) handler.onDisconnected();
|
||||
handler.dispatch(function(h) h.onDisconnected());
|
||||
}
|
||||
|
||||
private function onSocketData(event:Dynamic):Void {
|
||||
@@ -87,7 +71,7 @@ class JsConnection extends BaseConnection {
|
||||
var packet = WebSocketTools.string2packet(data, builder);
|
||||
receive(packet);
|
||||
} catch (error:Dynamic) {
|
||||
handler.onError(error);
|
||||
handler.dispatch(function(h) h.onError(error));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -10,8 +10,8 @@ class NekoConnection extends BaseConnection {
|
||||
|
||||
public var socket(default, null):Socket;
|
||||
|
||||
public function new(socket:Socket, ?handler:IConnectionHandler = null, ?packetHandler:IPacketHandler = null) {
|
||||
super(handler, packetHandler);
|
||||
public function new(socket:Socket) {
|
||||
super();
|
||||
this.socket = socket;
|
||||
socket.setFastSend(true);
|
||||
socket.output.bigEndian = false;
|
||||
|
||||
@@ -11,8 +11,8 @@ class NekoWebConnection extends NekoConnection {
|
||||
|
||||
private var opened:Bool;
|
||||
|
||||
public function new(socket:Socket, ?handler:IConnectionHandler = null, ?packetHandler:IPacketHandler = null) {
|
||||
super(socket, handler, packetHandler);
|
||||
public function new(socket:Socket) {
|
||||
super(socket);
|
||||
opened = false;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user