forked from LeenkxTeam/LNXSDK
69 lines
1.6 KiB
Haxe
69 lines
1.6 KiB
Haxe
package kha.netsync;
|
|
|
|
import haxe.io.Bytes;
|
|
import js.html.BinaryType;
|
|
import js.html.WebSocket;
|
|
|
|
class Network {
|
|
var socket: WebSocket;
|
|
var open: Bool = false;
|
|
|
|
public function new(url: String, port: Int, errorCallback: Void->Void, closeCallback: Void->Void) {
|
|
socket = new WebSocket("ws://" + url + ":" + port);
|
|
socket.onerror = function(error) {
|
|
trace("Network error.");
|
|
errorCallback();
|
|
}
|
|
socket.binaryType = BinaryType.ARRAYBUFFER;
|
|
socket.onopen = function() {
|
|
open = true;
|
|
};
|
|
socket.onclose = function(event) {
|
|
trace("Network connection closed. " + webSocketCloseReason(event.code) + " (" + event.reason + ").");
|
|
closeCallback();
|
|
}
|
|
}
|
|
|
|
static function webSocketCloseReason(code: Int): String {
|
|
switch (code) {
|
|
case 1000:
|
|
return "Normal Closure";
|
|
case 1001:
|
|
return "Going Away";
|
|
case 1002:
|
|
return "Protocol error";
|
|
case 1003:
|
|
return "Unsupported Data";
|
|
case 1005:
|
|
return "No Status Rcvd";
|
|
case 1006:
|
|
return "Abnormal Closure";
|
|
case 1007:
|
|
return "Invalid frame";
|
|
case 1008:
|
|
return "Policy Violation";
|
|
case 1009:
|
|
return "Message Too Big";
|
|
case 1010:
|
|
return "Mandatory Ext.";
|
|
case 1011:
|
|
return "Internal Server Error";
|
|
case 1015:
|
|
return "TLS handshake";
|
|
default:
|
|
return "";
|
|
}
|
|
}
|
|
|
|
public function send(bytes: Bytes, mandatory: Bool): Void {
|
|
if (open)
|
|
socket.send(bytes.getData());
|
|
}
|
|
|
|
public function listen(listener: Bytes->Void): Void {
|
|
socket.onmessage = function(message) {
|
|
listener(Bytes.ofData(message.data));
|
|
};
|
|
}
|
|
}
|