/// <summary> /// Sends the specified message. /// </summary> /// <param name="Message">The message.</param> internal void Send(Message Message) { if (Message.Device.Connected) { SocketAsyncEventArgs WriteEvent = this.WritePool.Dequeue(); if (WriteEvent == null) { WriteEvent = new SocketAsyncEventArgs { DisconnectReuseSocket = false }; } WriteEvent.SetBuffer(Message.ToBytes, Message.Offset, Message.Length + 7 - Message.Offset); WriteEvent.AcceptSocket = Message.Device.Socket; WriteEvent.RemoteEndPoint = Message.Device.Socket.RemoteEndPoint; WriteEvent.UserToken = Message.Device.Token; if (!Message.Device.Socket.SendAsync(WriteEvent)) { this.ProcessSend(Message, WriteEvent); } } else { this.Disconnect(Message.Device?.Token?.Args); } }
/// <summary> /// Sends the specified byte array. /// </summary> /// <param name="Message">The array.</param> internal void Send(Device Device, byte[] Message) { if (Device.Connected) { SocketAsyncEventArgs WriteEvent = this.WritePool.Dequeue(); if (WriteEvent == null) { WriteEvent = new SocketAsyncEventArgs { DisconnectReuseSocket = false }; } WriteEvent.SetBuffer(Message, 0, Message.Length); WriteEvent.AcceptSocket = Device.Socket; WriteEvent.RemoteEndPoint = Device.Socket.RemoteEndPoint; WriteEvent.UserToken = Device.Token; if (!Device.Socket.SendAsync(WriteEvent)) { this.ProcessSend(Device, Message, 0, WriteEvent); } } else { this.Disconnect(Device.Token.Args); } }
/// <summary> /// Sends the specified message. /// </summary> /// <param name="Buffer">The buffer.</param> /// <param name="Token">The token.</param> public static void Send(byte[] Buffer, NetworkToken Token) { if (Buffer == null) { throw new ArgumentNullException(nameof(Message), "Buffer == null at Send(Buffer, Token)."); } if (Token == null) { throw new ArgumentNullException(nameof(Token), "Token == null at Send(Buffer, Token)."); } if (Token.IsConnected) { SocketAsyncEventArgs WriteEvent = NetworkTcp.WritePool.Dequeue(); if (WriteEvent == null) { WriteEvent = new SocketAsyncEventArgs { DisconnectReuseSocket = false }; } WriteEvent.SetBuffer(Buffer, 0, Buffer.Length); WriteEvent.AcceptSocket = Token.Socket; WriteEvent.RemoteEndPoint = Token.Socket.RemoteEndPoint; WriteEvent.UserToken = Token; if (!Token.Socket.SendAsync(WriteEvent)) { NetworkTcp.ProcessSend(WriteEvent); } } else { NetworkTcp.Disconnect(Token.AsyncEvent); } }