big update

This commit is contained in:
2015-08-10 12:13:38 +03:00
parent 93c8912dc0
commit 43c5be9455
24 changed files with 323 additions and 438 deletions

View File

@@ -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);
}
});
}
}

View File

@@ -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;

View File

@@ -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));
}
}

View File

@@ -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));
}
}

View File

@@ -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;

View File

@@ -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;
}