forked from LeenkxTeam/LNXSDK
		
	
		
			
				
	
	
		
			231 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
| /*
 | |
|  * Copyright (C)2014-2020 Haxe Foundation
 | |
|  *
 | |
|  * Permission is hereby granted, free of charge, to any person obtaining a
 | |
|  * copy of this software and associated documentation files (the "Software"),
 | |
|  * to deal in the Software without restriction, including without limitation
 | |
|  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 | |
|  * and/or sell copies of the Software, and to permit persons to whom the
 | |
|  * Software is furnished to do so, subject to the following conditions:
 | |
|  *
 | |
|  * The above copyright notice and this permission notice shall be included in
 | |
|  * all copies or substantial portions of the Software.
 | |
|  *
 | |
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | |
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | |
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | |
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | |
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 | |
|  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 | |
|  * DEALINGS IN THE SOFTWARE.
 | |
|  */
 | |
| 
 | |
| package js.node.dgram;
 | |
| 
 | |
| import js.node.events.EventEmitter;
 | |
| import js.node.net.Socket.SocketAdress;
 | |
| #if haxe4
 | |
| import js.lib.Error;
 | |
| #else
 | |
| import js.Error;
 | |
| #end
 | |
| 
 | |
| /**
 | |
| 	Enumeration of events for the `Socket` object.
 | |
| **/
 | |
| @:enum abstract SocketEvent<T:haxe.Constraints.Function>(Event<T>) to Event<T> {
 | |
| 	/**
 | |
| 		Emitted when a new datagram is available on a socket.
 | |
| 		Listener arguments:
 | |
| 			msg - received data
 | |
| 			rinfo - sender's address information and the number of bytes in the datagram
 | |
| 	**/
 | |
| 	var Message:SocketEvent<MessageListener> = "message";
 | |
| 
 | |
| 	/**
 | |
| 		Emitted when a socket starts listening for datagrams.
 | |
| 		This happens as soon as UDP sockets are created.
 | |
| 	**/
 | |
| 	var Listening:SocketEvent<Void->Void> = "listening";
 | |
| 
 | |
| 	/**
 | |
| 		Emitted when a socket is closed with `close`.
 | |
| 		No new message events will be emitted on this socket.
 | |
| 	**/
 | |
| 	var Close:SocketEvent<Void->Void> = "close";
 | |
| 
 | |
| 	/**
 | |
| 		Emitted when an error occurs.
 | |
| 	**/
 | |
| 	var Error:SocketEvent<Error->Void> = "error";
 | |
| }
 | |
| 
 | |
| /**
 | |
| 	Remote address information for the `SocketEvent.Message` event.
 | |
| **/
 | |
| typedef MessageRemoteInfo = {
 | |
| 	> SocketAdress,
 | |
| 
 | |
| 	/**
 | |
| 		The message size.
 | |
| 	**/
 | |
| 	var size:Int;
 | |
| }
 | |
| 
 | |
| typedef MessageListener = Buffer->MessageRemoteInfo->Void;
 | |
| 
 | |
| /**
 | |
| 	Enumeration of possible datagram socket types
 | |
| **/
 | |
| @:enum abstract SocketType(String) from String to String {
 | |
| 	var Udp4 = "udp4";
 | |
| 	var Udp6 = "udp6";
 | |
| }
 | |
| 
 | |
| /**
 | |
| 	Options passed to the Socket consturctor.
 | |
| **/
 | |
| typedef SocketOptions = {
 | |
| 	/**
 | |
| 		Type of the socket. Either udp4 or udp6.
 | |
| 	**/
 | |
| 	var type:SocketType;
 | |
| 
 | |
| 	/**
 | |
| 		When true, `Socket.bind` will reuse the address, even if another process has already bound a socket on it.
 | |
| 		Defaults to false.
 | |
| 	**/
 | |
| 	@:optional var reuseAddr:Bool;
 | |
| }
 | |
| 
 | |
| /**
 | |
| 	Options for `Socket.bind` method.
 | |
| **/
 | |
| typedef SocketBindOptions = {
 | |
| 	var port:Int;
 | |
| 	@:optional var address:String;
 | |
| 
 | |
| 	/**
 | |
| 		If false (default), then cluster workers will use the same underlying handle, allowing connection handling
 | |
| 		duties to be shared. When true, the handle is not shared, and attempted port sharing results in an error.
 | |
| 	**/
 | |
| 	@:optional var exclusive:Bool;
 | |
| }
 | |
| 
 | |
| /**
 | |
| 	Encapsulates the datagram functionality.
 | |
| 	It should be created via `Dgram.createSocket`.
 | |
| **/
 | |
| @:jsRequire("dgram", "Socket")
 | |
| extern class Socket extends EventEmitter<Socket> {
 | |
| 	@:overload(function(type:SocketType, ?callback:MessageListener):Void {})
 | |
| 	private function new(options:SocketOptions, ?callback:MessageListener);
 | |
| 
 | |
| 	/**
 | |
| 		The destination `port` and `address` must be specified.
 | |
| 		A string may be supplied for the `address` parameter, and it will be resolved with DNS.
 | |
| 
 | |
| 		If the `address` is omitted or is an empty string, '0.0.0.0' or '::0' is used instead.
 | |
| 		Depending on the network configuration, those defaults may or may not work; it's best to be
 | |
| 		explicit about the destination address.
 | |
| 
 | |
| 		If the socket has not been previously bound with a call to `bind`, it gets assigned a random
 | |
| 		port number and is bound to the "all interfaces" address ('0.0.0.0' for udp4 sockets, '::0' for udp6 sockets.)
 | |
| 
 | |
| 		An optional `callback` may be specified to detect DNS errors or for determining when it's safe
 | |
| 		to reuse the buf object. Note that DNS lookups delay the time to send for at least one tick.
 | |
| 		The only way to know for sure that the datagram has been sent is by using a `callback`.
 | |
| 	**/
 | |
| 	function send(buf:Buffer, offset:Int, length:Int, port:Int, address:String, ?callback:Error->Int->Void):Void;
 | |
| 
 | |
| 	/**
 | |
| 		Listen for datagrams on a named `port` and optional `address`.
 | |
| 		If `port` is not specified, the OS will try to bind to a random port.
 | |
| 		If `address` is not specified, the OS will try to listen on all addresses.
 | |
| 		After binding is done, a "listening" event is emitted and the `callback` (if specified) is called.
 | |
| 		Specifying both a "listening" event listener and `callback` is not harmful but not very useful.
 | |
| 
 | |
| 		A bound datagram socket keeps the node process running to receive datagrams.
 | |
| 
 | |
| 		If binding fails, an "error" event is generated. In rare case (e.g. binding a closed socket),
 | |
| 		an `Error` may be thrown by this method.
 | |
| 	**/
 | |
| 	@:overload(function(options:SocketBindOptions, ?callback:Void->Void):Void {})
 | |
| 	@:overload(function(port:Int, address:String, ?callback:Void->Void):Void {})
 | |
| 	@:overload(function(port:Int, ?callback:Void->Void):Void {})
 | |
| 	function bind(?callback:Void->Void):Void;
 | |
| 
 | |
| 	/**
 | |
| 		Close the underlying socket and stop listening for data on it.
 | |
| 
 | |
| 		If a `callback` is provided, it is added as a listener for the 'close' event.
 | |
| 	**/
 | |
| 	function close(?callback:Void->Void):Void;
 | |
| 
 | |
| 	/**
 | |
| 		Returns an object containing the address information for a socket.
 | |
| 	**/
 | |
| 	function address():SocketAdress;
 | |
| 
 | |
| 	/**
 | |
| 		Sets or clears the SO_BROADCAST socket option.
 | |
| 		When this option is set, UDP packets may be sent to a local interface's broadcast address.
 | |
| 	**/
 | |
| 	function setBroadcast(flag:Bool):Void;
 | |
| 
 | |
| 	/**
 | |
| 		Sets the IP_TTL socket option. TTL stands for "Time to Live," but in this context it specifies
 | |
| 		the number of IP hops that a packet is allowed to go through. Each router or gateway that forwards
 | |
| 		a packet decrements the TTL. If the TTL is decremented to 0 by a router, it will not be forwarded.
 | |
| 		Changing TTL values is typically done for network probes or when multicasting.
 | |
| 
 | |
| 		The argument to `setTTL` is a number of hops between 1 and 255. The default on most systems is 64.
 | |
| 	**/
 | |
| 	function setTTL(ttl:Int):Void;
 | |
| 
 | |
| 	/**
 | |
| 		Sets the IP_MULTICAST_TTL socket option. TTL stands for "Time to Live," but in this context it specifies
 | |
| 		the number of IP hops that a packet is allowed to go through, specifically for multicast traffic.
 | |
| 		Each router or gateway that forwards a packet decrements the TTL. If the TTL is decremented to 0 by a router,
 | |
| 		it will not be forwarded.
 | |
| 
 | |
| 		The argument to `setMulticastTTL` is a number of hops between 0 and 255. The default on most systems is 1.
 | |
| 	**/
 | |
| 	function setMulticastTTL(ttl:Int):Void;
 | |
| 
 | |
| 	/**
 | |
| 		Sets or clears the IP_MULTICAST_LOOP socket option.
 | |
| 		When this option is set, multicast packets will also be received on the local interface.
 | |
| 	**/
 | |
| 	function setMulticastLoopback(flag:Bool):Void;
 | |
| 
 | |
| 	/**
 | |
| 		Tells the kernel to join a multicast group with IP_ADD_MEMBERSHIP socket option.
 | |
| 
 | |
| 		If `multicastInterface` is not specified, the OS will try to add membership to all valid interfaces.
 | |
| 	**/
 | |
| 	function addMembership(multicastAddress:String, ?multicastInterface:String):Void;
 | |
| 
 | |
| 	/**
 | |
| 		Opposite of `addMembership` - tells the kernel to leave a multicast group with IP_DROP_MEMBERSHIP socket option.
 | |
| 		This is automatically called by the kernel when the socket is closed or process terminates,
 | |
| 		so most apps will never need to call this.
 | |
| 
 | |
| 		If `multicastInterface` is not specified, the OS will try to drop membership to all valid interfaces.
 | |
| 	**/
 | |
| 	function dropMembership(multicastAddress:String, ?multicastInterface:String):Void;
 | |
| 
 | |
| 	/**
 | |
| 		Calling `unref` on a socket will allow the program to exit if this is the only active socket in the event system.
 | |
| 		If the socket is already `unref`d calling `unref` again will have no effect.
 | |
| 	**/
 | |
| 	function unref():Void;
 | |
| 
 | |
| 	/**
 | |
| 		Opposite of `unref`, calling `ref` on a previously `unref`d socket will not let
 | |
| 		the program exit if it's the only socket left (the default behavior).
 | |
| 		If the socket is `ref`d calling `ref` again will have no effect.
 | |
| 	**/
 | |
| 	function ref():Void;
 | |
| }
 |