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