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