This commit is contained in:
2014-06-23 07:46:03 +04:00
parent 1bf3e4cc80
commit 44c82ec71c
2 changed files with 59 additions and 27 deletions

View File

@@ -1,5 +1,7 @@
package ru.m.armageddon.client; package ru.m.armageddon.client;
import haxe.io.BytesInput;
import flash.events.ProgressEvent;
import haxe.io.Bytes; import haxe.io.Bytes;
import flash.events.Event; import flash.events.Event;
import flash.events.SecurityErrorEvent; import flash.events.SecurityErrorEvent;
@@ -9,7 +11,6 @@ import haxework.log.TraceLogger;
import flash.net.Socket; import flash.net.Socket;
class Client { class Client {
private static inline var TAG = "Armageddon"; private static inline var TAG = "Armageddon";
@@ -36,7 +37,9 @@ class Client {
socket.addEventListener(Event.CONNECT, onConnect); socket.addEventListener(Event.CONNECT, onConnect);
//socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); //socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
//socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); //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); socket.connect("localhost", 5000);
} }
@@ -50,4 +53,16 @@ class Client {
socket.writeShort(bytes.length); socket.writeShort(bytes.length);
socket.writeBytes(cast bytes.getData()); 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);
}
} }

View File

@@ -1,5 +1,7 @@
package ru.m.armageddon.server; package ru.m.armageddon.server;
import haxe.io.BytesOutput;
import sys.db.Connection;
import sys.db.Mysql; import sys.db.Mysql;
import neko.Lib; import neko.Lib;
@@ -9,6 +11,7 @@ import haxe.io.Bytes;
typedef Client = { typedef Client = {
var id:Int; var id:Int;
var socket:Socket;
} }
typedef Message = { typedef Message = {
@@ -18,11 +21,15 @@ typedef Message = {
class Server extends ThreadServer<Client, Message> { class Server extends ThreadServer<Client, Message> {
// create a Client // create a Client
override function clientConnected(s:Socket):Client { override function clientConnected(s:Socket):Client {
s.input.bigEndian = false;
s.output.bigEndian = false;
var num = Std.random(100); var num = Std.random(100);
Lib.println("client " + num + " is " + s.peer()); Lib.println("client " + num + " is " + s.peer());
return { id: num }; return { id: num, socket: s };
} }
override function clientDisconnected(c:Client) { override function clientDisconnected(c:Client) {
Lib.println("client " + Std.string(c.id) + " disconnected"); Lib.println("client " + Std.string(c.id) + " disconnected");
} }
@@ -33,26 +40,30 @@ class Server extends ThreadServer<Client, Message> {
request.mergeFrom(buf); request.mergeFrom(buf);
Lib.println(request.login); Lib.println(request.login);
Lib.println(request.password); 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 user = new User();
var complete = false; user.login = data.login;
var cpos = pos; user.nickname = data.login;
while (cpos < (pos + len) && !complete) {
//check for a period/full stop (i.e.: "." ) to signify a complete message
complete = (buf.get(cpos) == 46);
cpos++;
}
// no full message var response = new LoginResponse();
if (!complete) return null; response.user = user;
// got a full message, return it var b = new BytesOutput();
var msg:String = buf.readString(pos, cpos - pos); response.writeTo(b);
return {msg: {str: msg}, bytes: cpos - pos}; 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) { override function clientMessage(c:Client, msg:Message) {
Lib.println(c.id + " sent: " + msg.str);
} }
public static function main() { public static function main() {
@@ -63,8 +74,10 @@ class Server extends ThreadServer<Client, Message> {
class Db { class Db {
private var db:Connection;
public function new() { public function new() {
var cnx = Mysql.connect({ db = Mysql.connect({
host : "localhost", host : "localhost",
port : 3306, port : 3306,
user : "shmyga", user : "shmyga",
@@ -72,8 +85,12 @@ class Db {
socket : null, socket : null,
database : "armageddon" database : "armageddon"
}); });
}
cnx.close(); public function getUser() {
var rset = db.request("SELECT * FROM Users");
var user = rset.next();
return user;
} }
} }