Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <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);
            }
        }
Пример #3
0
        /// <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);
            }
        }