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