71 lines
1.7 KiB
JavaScript
71 lines
1.7 KiB
JavaScript
class Packet {
|
|
constructor(id, data) {
|
|
this.id = id;
|
|
this.data = data;
|
|
}
|
|
getId() { return this.id; }
|
|
getData() { return this.data; }
|
|
static fromString(data) {
|
|
return new Packet(data[0], data.slice(1).split("\n"));
|
|
}
|
|
}
|
|
class JoinPacket extends Packet {
|
|
constructor(name) {
|
|
super("J", [name]);
|
|
}
|
|
}
|
|
class MessagePacket extends Packet {
|
|
constructor(message) {
|
|
super("M", [message]);
|
|
}
|
|
}
|
|
class KeyPacket extends Packet {
|
|
constructor(key, pressed) {
|
|
super("K", [key, pressed ? "1" : "0"]);
|
|
}
|
|
}
|
|
class PlaceBlockPacket extends Packet {
|
|
constructor(x, y, type) {
|
|
super("P", [x.toString(), y.toString(), type]);
|
|
}
|
|
}
|
|
class DestroyBlockPacket extends Packet {
|
|
constructor(x, y) {
|
|
super("D", [x.toString(), y.toString()]);
|
|
}
|
|
}
|
|
class PositionPacket extends Packet {
|
|
constructor(x, y) {
|
|
super("X", [x.toString(), y.toString()]);
|
|
}
|
|
}
|
|
class VelocityPacket extends Packet {
|
|
constructor(x, y) {
|
|
super("V", [x.toString(), y.toString()]);
|
|
}
|
|
}
|
|
class Connection {
|
|
constructor(address, on_packet, on_close) {
|
|
this.socket = new WebSocket("ws://" + address, "cubic");
|
|
this.on_packet = on_packet;
|
|
this.on_close = on_close;
|
|
this.socket.onmessage = this._on_message;
|
|
this.socket.onclose = this._on_close;
|
|
this.socket.onerror = this._on_error;
|
|
}
|
|
_on_message(event) {
|
|
this.on_packet(Packet.fromString(event.data));
|
|
}
|
|
_on_close(event) {
|
|
this.on_close(null);
|
|
}
|
|
_on_error(event) {
|
|
this.on_close(event.toString());
|
|
}
|
|
close() {
|
|
this.socket.close();
|
|
}
|
|
send(packet) {
|
|
this.socket.send(packet.getId() + packet.getData());
|
|
}
|
|
}
|