diff --git a/src/server/haxe/ru/m/tankz/server/Server.hx b/src/server/haxe/ru/m/tankz/server/Server.hx index cc987df..04460fb 100755 --- a/src/server/haxe/ru/m/tankz/server/Server.hx +++ b/src/server/haxe/ru/m/tankz/server/Server.hx @@ -2,35 +2,22 @@ package ru.m.tankz.server; import ru.m.core.connect.IConnection.IPacketBuilder; import haxework.provider.Provider; -import ru.m.core.connect.neko.NekoWebConnection; -import ru.m.core.connect.neko.NekoConnection; import haxework.log.TraceLogger; import ru.m.tankz.server.session.Session; import haxe.io.Bytes; import sys.net.Socket; import neko.net.ThreadServer; -enum ServerMode { - NORMAL_SOCKET; - WEB_SOCKET; -} - class Server extends ThreadServer { private static inline var TAG = "Server"; - private var mode:ServerMode; - - public function new(mode:ServerMode) { + public function new() { super(); - this.mode = mode; } override function clientConnected(s:Socket):Session { - var session = new Session(s, switch(mode) { - case ServerMode.NORMAL_SOCKET: NekoConnection; - case ServerMode.WEB_SOCKET: NekoWebConnection; - }); + var session = new Session(s); L.d(TAG, "Client connected"); return session; } @@ -44,16 +31,14 @@ class Server extends ThreadServer { } override function clientMessage(session:Session, bytes:Bytes) { - session.connection.pushData(bytes); + session.pushData(bytes); } public static function main() { L.push(new TraceLogger()); L.d(TAG, "Running"); Provider.set(IPacketBuilder, new PacketBuilder()); - //var server = new Server(ServerMode.NORMAL_SOCKET); - //server.run("localhost", 5001); - var wserver = new Server(ServerMode.WEB_SOCKET); + var wserver = new Server(); wserver.run("localhost", 5001); } } \ No newline at end of file diff --git a/src/server/haxe/ru/m/tankz/server/session/Session.hx b/src/server/haxe/ru/m/tankz/server/session/Session.hx index 50ff15b..6408c55 100755 --- a/src/server/haxe/ru/m/tankz/server/session/Session.hx +++ b/src/server/haxe/ru/m/tankz/server/session/Session.hx @@ -1,5 +1,7 @@ package ru.m.tankz.server.session; +import ru.m.core.connect.neko.NekoWebConnection; +import haxe.io.Bytes; import ru.m.tankz.proto.PersonSelectResponse; import ru.m.tankz.proto.PersonSelectRequest; import ru.m.tankz.proto.Account; @@ -15,14 +17,31 @@ import sys.net.Socket; class Session implements IConnectionHandler implements IPacketHandler { public var account(default, null):Account; - public var connection(default, null):IConnection; - public var opened:Bool; - public function new(socket:Socket, connectionFactory:Class) { - opened = false; - connection = Type.createInstance(connectionFactory, [socket, this, this]); + private var connection(default, null):IConnection; + private var socket:Socket; + + public function new(socket:Socket) { + this.socket = socket; } + public function pushData(bytes:Bytes):Void { + if (connection != null) { + connection.pushData(bytes); + } else { + var str:String = bytes.getString(0, bytes.length); + if (StringTools.startsWith(str, "GET")) { + connection = new NekoWebConnection(socket, this, this); + } else { + connection = new NekoConnection(socket, this, this); + } + connection.pushData(bytes); + } + } + + /** + * Connection handlers + **/ public function onConnected():Void { } @@ -39,6 +58,9 @@ class Session implements IConnectionHandler implements IPacketHandler { ); } + /** + * Packets handlers + **/ public function onLoginRequest(packet:LoginRequest):Void { var db = new Db(); account = db.getAccount(packet.login, packet.password);