/// <summary> /// Initialize UDP server with a given IP address and port number /// </summary> /// <param name="address">IP address</param> /// <param name="port">Port number</param> public UdpServer(string address, int port, Func <IPEndPoint, byte[], Task <byte[]> > responseHandlerAsync, ILogger logger, UdpServerOptionsModel options = null) : this(new IPEndPoint(IPAddress.Parse(address), port), responseHandlerAsync, logger, options) { }
/// <summary> /// Initialize UDP server with a given IP endpoint /// </summary> /// <param name="receivingEndpoint">IP endpoint</param> public UdpServer(IPEndPoint receivingEndpoint, Func <IPEndPoint, byte[], Task <byte[]> > responseHandlerAsync, ILogger logger, UdpServerOptionsModel options = null) { Id = Guid.NewGuid(); LocalEndpoint = receivingEndpoint; _options = options ?? new UdpServerOptionsModel(); if (_options.LingerState == null) { _options.LingerState = new LingerOption(true, 10); } if (_options.BufferSize == null) { _options.BufferSize = 256; } if (_options.ConnectTimeoutInMilliseconds <= 0) { _options.ConnectTimeoutInMilliseconds = 15000; } _logger = logger; receiveEventArg = new SocketAsyncEventArgs(); receiveEventArg.Completed += ProcessReceiveCompleted; receiveEventArg.RemoteEndPoint = new IPEndPoint((LocalEndpoint.AddressFamily == AddressFamily.InterNetworkV6) ? IPAddress.IPv6Any : IPAddress.Any, 0); var bufferSize = _options.BufferSize.Value; var buffer = new byte[bufferSize]; receiveEventArg.SetBuffer(buffer, 0, (int)buffer.Length); this.onReceivedFuncAsync = responseHandlerAsync; }