2019-03-10 00:29:15 +01:00
|
|
|
class GameServerConnection
|
|
|
|
{
|
|
|
|
constructor(ip, port)
|
|
|
|
{
|
|
|
|
this.ip = ip;
|
|
|
|
this.port = port;
|
|
|
|
this.player = null;
|
|
|
|
this.socket = null;
|
|
|
|
this.registered = false;
|
|
|
|
|
|
|
|
this.game_manager = null;
|
|
|
|
this.connected = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
set_player(p)
|
|
|
|
{
|
|
|
|
this.player = p;
|
|
|
|
}
|
|
|
|
|
|
|
|
set_game_manager(gm)
|
|
|
|
{
|
|
|
|
this.game_manager = gm;
|
|
|
|
}
|
|
|
|
|
|
|
|
is_registered()
|
|
|
|
{
|
|
|
|
return this.registered;
|
|
|
|
}
|
|
|
|
|
|
|
|
is_connected()
|
|
|
|
{
|
|
|
|
return this.connected;
|
|
|
|
}
|
|
|
|
|
|
|
|
on_open(callback_func)
|
|
|
|
{
|
|
|
|
// TODO
|
|
|
|
console.log("connected to " + this.ip + ":" + this.port);
|
|
|
|
this.connected = true;
|
|
|
|
callback_func();
|
|
|
|
}
|
|
|
|
|
|
|
|
on_close()
|
|
|
|
{
|
|
|
|
this.game_manager.end_game_listener()
|
|
|
|
}
|
|
|
|
|
|
|
|
on_error()
|
|
|
|
{
|
|
|
|
console.log("error in websocket connection");
|
|
|
|
this.game_manager.connection_error_listener();
|
|
|
|
}
|
|
|
|
|
|
|
|
on_message(event)
|
|
|
|
{
|
|
|
|
var json_msg = event.data;
|
|
|
|
var msg = JSON.parse(json_msg);
|
|
|
|
|
|
|
|
if (!msg.hasOwnProperty("type") || !msg.hasOwnProperty("data"))
|
|
|
|
{
|
|
|
|
console.log("received wrong formatted message");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch(msg.type)
|
|
|
|
{
|
|
|
|
case "register_response":
|
|
|
|
this.on_register_response(msg.data);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "game_starts":
|
|
|
|
this.on_game_starts(msg.data);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "move":
|
|
|
|
this.on_move(msg.data);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "move_response":
|
|
|
|
this.on_move_response(msg.data);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "end_game":
|
|
|
|
this.on_end_game(msg.data);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
on_register_response(data)
|
|
|
|
{
|
|
|
|
var success = data.success;
|
|
|
|
this.game_manager.register_response_listener(success);
|
|
|
|
|
|
|
|
if (!success)
|
|
|
|
{
|
|
|
|
this.socket.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
on_game_starts(data)
|
|
|
|
{
|
|
|
|
var op_name = data.opponent_name;
|
|
|
|
var is_first_move = data.is_first_move;
|
|
|
|
|
|
|
|
this.game_manager.start_game_listener(op_name, is_first_move);
|
|
|
|
}
|
|
|
|
|
|
|
|
on_move(data)
|
|
|
|
{
|
|
|
|
var sub_x = data.sub_x;
|
|
|
|
var sub_y = data.sub_y;
|
|
|
|
var x = data.x;
|
|
|
|
var y = data.y;
|
|
|
|
|
|
|
|
this.game_manager.move_listener(sub_x, sub_y, x, y);
|
|
|
|
}
|
|
|
|
|
|
|
|
on_move_response(data)
|
|
|
|
{
|
|
|
|
if (data.success)
|
|
|
|
{
|
|
|
|
console.log("move accepted");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
console.error("move not accepted");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
on_end_game(data)
|
|
|
|
{
|
|
|
|
this.game_manager.end_game_listener();
|
|
|
|
this.close();
|
|
|
|
}
|
|
|
|
|
|
|
|
connect(callback_func)
|
|
|
|
{
|
2019-03-10 13:30:18 +01:00
|
|
|
this.socket = new WebSocket("wss://" + this.ip + ":" + this.port);
|
2019-03-10 00:29:15 +01:00
|
|
|
this.socket.onmessage = (e => this.on_message(e));
|
|
|
|
this.socket.onopen = (() => this.on_open(callback_func));
|
|
|
|
this.socket.onerror = (() => this.on_error());
|
|
|
|
this.socket.onclose = (() => this.on_close());
|
|
|
|
}
|
|
|
|
|
|
|
|
send_move(sub_x, sub_y, x, y)
|
|
|
|
{
|
|
|
|
var msg_object = {
|
|
|
|
type: "move",
|
|
|
|
data: {
|
|
|
|
sub_x: "" + sub_x,
|
|
|
|
sub_y: "" + sub_y,
|
|
|
|
x: "" + x,
|
|
|
|
y: "" + y
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
this.socket.send(JSON.stringify(msg_object));
|
|
|
|
}
|
|
|
|
|
|
|
|
register()
|
|
|
|
{
|
|
|
|
// register for game queue
|
|
|
|
var msg_object = {
|
|
|
|
type: "register",
|
|
|
|
data: {
|
|
|
|
id: this.player.get_id(),
|
|
|
|
name: this.player.get_name()
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
this.socket.send(JSON.stringify(msg_object));
|
|
|
|
}
|
|
|
|
|
|
|
|
send_disconnect()
|
|
|
|
{
|
|
|
|
if (!this.is_connected)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var msg_object = {
|
|
|
|
type: "end_game",
|
|
|
|
data: {
|
|
|
|
msg: ""
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
this.socket.send(JSON.stringify(msg_object));
|
|
|
|
}
|
|
|
|
|
|
|
|
close()
|
|
|
|
{
|
|
|
|
if (this.is_connected)
|
|
|
|
{
|
|
|
|
this.is_connected = false;
|
|
|
|
this.socket.close();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|