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));
 | |
| 		};
 | |
| 	}
 | |
| }
 |