-
This commit is contained in:
@@ -1,33 +1,39 @@
|
||||
package ru.m.armageddon.core.connect;
|
||||
|
||||
import flash.errors.Error;
|
||||
import haxework.net.callback.ICallback;
|
||||
import haxe.io.Bytes;
|
||||
import protohx.Message;
|
||||
import ru.m.armageddon.core.connect.IConnection;
|
||||
|
||||
class BaseConnection implements IConnection {
|
||||
public var handler(default,default):IConnectionHandler;
|
||||
public var packetHandler(default,default):IPacketHandler;
|
||||
public var connected(default, null):Bool;
|
||||
|
||||
private var builder:IPacketBuilder;
|
||||
private var handler:IConnectionHandler;
|
||||
|
||||
public function new(handler:IConnectionHandler) {
|
||||
public function new(?handler:IConnectionHandler = null) {
|
||||
this.builder = new PacketBuilder();
|
||||
this.handler = handler;
|
||||
}
|
||||
|
||||
public function connect():Void {}
|
||||
public function connect():ICallback<Dynamic> {
|
||||
throw new Error("Not implemented");
|
||||
}
|
||||
|
||||
public function pushData(bytes:Bytes):Void {}
|
||||
|
||||
public function send(packet:Message):Void {}
|
||||
|
||||
private function receive(packet:Message):Void {
|
||||
if (packetHandler == null) return;
|
||||
var name = "on" + Type.getClassName(Type.getClass(packet)).split(".").pop();
|
||||
var method = Reflect.field(handler, name);
|
||||
var method = Reflect.field(packetHandler, name);
|
||||
if (method != null && Reflect.isFunction(method)) {
|
||||
Reflect.callMethod(handler, method, [packet]);
|
||||
Reflect.callMethod(packetHandler, method, [packet]);
|
||||
} else {
|
||||
handler.onPacket(packet);
|
||||
packetHandler.onPacket(packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +1,17 @@
|
||||
package ru.m.armageddon.core.connect;
|
||||
|
||||
import haxework.net.callback.ICallback;
|
||||
import haxe.io.Bytes;
|
||||
import protohx.Message;
|
||||
|
||||
interface IConnection {
|
||||
public var connected(default, null):Bool;
|
||||
public var connected(default,null):Bool;
|
||||
public var handler(default,default):IConnectionHandler;
|
||||
public var packetHandler(default,default):IPacketHandler;
|
||||
|
||||
private var builder:IPacketBuilder;
|
||||
private var handler:IConnectionHandler;
|
||||
|
||||
public function connect():Void;
|
||||
public function connect():ICallback<Dynamic>;
|
||||
public function send(packet:Message):Void;
|
||||
public function pushData(bytes:Bytes):Void;
|
||||
private function receive(packet:Message):Void;
|
||||
@@ -19,6 +21,9 @@ interface IConnectionHandler {
|
||||
public function onConnected():Void;
|
||||
public function onDisconnected():Void;
|
||||
public function onError(error:Dynamic):Void;
|
||||
}
|
||||
|
||||
interface IPacketHandler {
|
||||
public function onPacket(packet:Message):Void;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package ru.m.armageddon.core.connect.flash;
|
||||
|
||||
import haxework.net.callback.Callback;
|
||||
import haxework.net.callback.ICallback;
|
||||
import ru.m.armageddon.core.connect.IConnection.IConnectionHandler;
|
||||
import flash.utils.Endian;
|
||||
import haxe.io.BytesOutput;
|
||||
@@ -18,7 +20,9 @@ class FlashConnection extends BaseConnection {
|
||||
private var port:Int;
|
||||
private var socket:Socket;
|
||||
|
||||
public function new(host:String, port:Int, handler:IConnectionHandler) {
|
||||
private var callback:ICallback<Dynamic>;
|
||||
|
||||
public function new(host:String, port:Int, ?handler:IConnectionHandler = null) {
|
||||
super(handler);
|
||||
this.host = host;
|
||||
this.port = port;
|
||||
@@ -30,28 +34,39 @@ class FlashConnection extends BaseConnection {
|
||||
socket.addEventListener(Event.CONNECT, onConnect);
|
||||
socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);
|
||||
socket.endian = Endian.LITTLE_ENDIAN;
|
||||
//socket.connect(host, port);
|
||||
}
|
||||
|
||||
override public function connect():Void {
|
||||
override public function connect():ICallback<Dynamic> {
|
||||
callback = Callback.build();
|
||||
socket.connect(host, port);
|
||||
return callback;
|
||||
}
|
||||
|
||||
private function onError(event:ErrorEvent):Void {
|
||||
socket.close();
|
||||
connected = false;
|
||||
handler.onError(event);
|
||||
if (handler != null) handler.onError(event);
|
||||
if (callback != null) {
|
||||
var c = callback;
|
||||
callback = null;
|
||||
c.callFail(event);
|
||||
}
|
||||
}
|
||||
|
||||
private function onConnect(_):Void {
|
||||
connected = true;
|
||||
handler.onConnected();
|
||||
if (handler != null) handler.onConnected();
|
||||
if (callback != null) {
|
||||
var c = callback;
|
||||
callback = null;
|
||||
c.callSuccess(null);
|
||||
}
|
||||
}
|
||||
|
||||
private function onClose(_):Void {
|
||||
socket.close();
|
||||
connected = false;
|
||||
handler.onDisconnected();
|
||||
if (handler != null) handler.onDisconnected();
|
||||
}
|
||||
|
||||
private function onSocketData(_):Void {
|
||||
|
||||
Reference in New Issue
Block a user