diff --git a/src/client/haxe/ru/m/armageddon/client/Client.hx b/src/client/haxe/ru/m/armageddon/client/Client.hx index d95e6aa..be922a7 100755 --- a/src/client/haxe/ru/m/armageddon/client/Client.hx +++ b/src/client/haxe/ru/m/armageddon/client/Client.hx @@ -1,5 +1,7 @@ package ru.m.armageddon.client; +import haxe.io.BytesInput; +import flash.events.ProgressEvent; import haxe.io.Bytes; import flash.events.Event; import flash.events.SecurityErrorEvent; @@ -9,7 +11,6 @@ import haxework.log.TraceLogger; import flash.net.Socket; - class Client { private static inline var TAG = "Armageddon"; @@ -36,7 +37,9 @@ class Client { socket.addEventListener(Event.CONNECT, onConnect); //socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); //socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); - //socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); + socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData); + //socket.endian = flash.utils.Endian.LITTLE_ENDIAN; + socket.connect("localhost", 5000); } @@ -50,4 +53,16 @@ class Client { socket.writeShort(bytes.length); socket.writeBytes(cast bytes.getData()); } + + private function onSocketData(_) { + L.d(TAG, "onSocketData"); + var b = new flash.utils.ByteArray(); + L.d(TAG, "socket.bytesAvailable: " + socket.bytesAvailable); + socket.readBytes(b); + var bs = Bytes.ofData(cast b); + L.d(TAG, "bs.length: " + bs.length); + var response = new LoginResponse(); + response.mergeFrom(bs); + L.d(TAG, response.user.login); + } } diff --git a/src/server/haxe/ru/m/armageddon/server/Server.hx b/src/server/haxe/ru/m/armageddon/server/Server.hx index 236ea7e..94fbf21 100755 --- a/src/server/haxe/ru/m/armageddon/server/Server.hx +++ b/src/server/haxe/ru/m/armageddon/server/Server.hx @@ -1,5 +1,7 @@ package ru.m.armageddon.server; +import haxe.io.BytesOutput; +import sys.db.Connection; import sys.db.Mysql; import neko.Lib; @@ -9,6 +11,7 @@ import haxe.io.Bytes; typedef Client = { var id:Int; + var socket:Socket; } typedef Message = { @@ -18,11 +21,15 @@ typedef Message = { class Server extends ThreadServer { // create a Client override function clientConnected(s:Socket):Client { + s.input.bigEndian = false; + s.output.bigEndian = false; var num = Std.random(100); Lib.println("client " + num + " is " + s.peer()); - return { id: num }; + return { id: num, socket: s }; } + + override function clientDisconnected(c:Client) { Lib.println("client " + Std.string(c.id) + " disconnected"); } @@ -33,26 +40,30 @@ class Server extends ThreadServer { request.mergeFrom(buf); Lib.println(request.login); Lib.println(request.password); + var db = new Db(); + var data = db.getUser(); -// find out if there's a full message, and if so, how long it is. - var complete = false; - var cpos = pos; - while (cpos < (pos + len) && !complete) { -//check for a period/full stop (i.e.: "." ) to signify a complete message - complete = (buf.get(cpos) == 46); - cpos++; - } + var user = new User(); + user.login = data.login; + user.nickname = data.login; -// no full message - if (!complete) return null; + var response = new LoginResponse(); + response.user = user; -// got a full message, return it - var msg:String = buf.readString(pos, cpos - pos); - return {msg: {str: msg}, bytes: cpos - pos}; + var b = new BytesOutput(); + response.writeTo(b); + var bytes = b.getBytes(); + c.socket.output.writeUInt16(bytes.length); + c.socket.output.writeBytes(bytes, 0, bytes.length); + + return { + msg : null, + bytes : len + }; } override function clientMessage(c:Client, msg:Message) { - Lib.println(c.id + " sent: " + msg.str); + } public static function main() { @@ -63,17 +74,23 @@ class Server extends ThreadServer { class Db { - public function new() { - var cnx = Mysql.connect({ - host : "localhost", - port : 3306, - user : "shmyga", - pass : "xkbp8jh9z2", - socket : null, - database : "armageddon" - }); + private var db:Connection; - cnx.close(); + public function new() { + db = Mysql.connect({ + host : "localhost", + port : 3306, + user : "shmyga", + pass : "xkbp8jh9z2", + socket : null, + database : "armageddon" + }); + } + + public function getUser() { + var rset = db.request("SELECT * FROM Users"); + var user = rset.next(); + return user; } }