Example #1
0
        /// <summary>
        /// Accept the new client and store it in memory.
        /// </summary>
        /// <param name="AsyncEvent">The <see cref="SocketAsyncEventArgs"/> instance containing the event data.</param>
        private static void ProcessAccept(SocketAsyncEventArgs AsyncEvent)
        {
            if (AsyncEvent.AcceptSocket.Connected)
            {
                string IpAddress = ((IPEndPoint)AsyncEvent.AcceptSocket.RemoteEndPoint).Address.ToString();

                if (IpAddress.StartsWith("192.168."))
                {
                    SocketAsyncEventArgs ReadEvent = NetworkTcp.ReadPool.Dequeue();

                    if (ReadEvent != null)
                    {
                        NetworkToken Token  = new NetworkToken(ReadEvent, AsyncEvent.AcceptSocket);
                        Device       Device = new Device(Token);

                        Devices.Add(Device);

                        if (!Token.Socket.ReceiveAsync(ReadEvent))
                        {
                            NetworkTcp.ProcessReceive(ReadEvent);
                        }
                    }
                    else
                    {
                        Logging.Warning(typeof(NetworkTcp), "Server is full, new connections cannot be accepted.");
                    }
                }
            }

            NetworkTcp.StartAccept(AsyncEvent);
        }
Example #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="NetworkGateway"/> class.
        /// </summary>
        public static void Initialize()
        {
            if (NetworkTcp.Initialized)
            {
                return;
            }

            NetworkTcp.FillPools();

            NetworkTcp.Listener          = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            NetworkTcp.Listener.NoDelay  = true;
            NetworkTcp.Listener.Blocking = false;

            NetworkTcp.Initialized = true;

            NetworkTcp.Listener.Bind(new IPEndPoint(IPAddress.Any, 9339));
            NetworkTcp.Listener.Listen(150);

            Logging.Info(typeof(NetworkTcp), "Listener has been bound to " + NetworkTcp.Listener.LocalEndPoint + ".");

            SocketAsyncEventArgs AcceptEvent = new SocketAsyncEventArgs();

            AcceptEvent.Completed            += NetworkTcp.OnAcceptCompleted;
            AcceptEvent.DisconnectReuseSocket = true;

            NetworkTcp.StartAccept(AcceptEvent);
        }
Example #3
0
 /// <summary>
 /// Called when the client has been accepted.
 /// </summary>
 /// <param name="Sender">The sender.</param>
 /// <param name="AsyncEvent">The <see cref="SocketAsyncEventArgs"/> instance containing the event data.</param>
 private static void OnAcceptCompleted(object Sender, SocketAsyncEventArgs AsyncEvent)
 {
     if (AsyncEvent.SocketError == SocketError.Success)
     {
         NetworkTcp.ProcessAccept(AsyncEvent);
     }
     else
     {
         NetworkTcp.StartAccept(AsyncEvent);
     }
 }