Esempio n. 1
0
        private void ProcessAccept(object sender, SocketAsyncEventArgs e)
        {
            if (e.SocketError != SocketError.Success && e.AcceptSocket != null && e.AcceptSocket.Connected)
            {
                e.AcceptSocket.Close();
                _poolOfAcceptEventArgs.Push(e);
                StartAccept();
                return;
            }

            ClientToken clientToken = _poolOfDataEventArgs.Pop();

            clientToken.AcceptConnection(e, true);
            _poolOfAcceptEventArgs.Push(e);

            Interlocked.Increment(ref _numberOfAcceptedSockets);

            //Fire ClientConnected event
            if (ClientConnected != null)
            {
                if (CallClientConnectedAsync)
                {
                    ClientConnected.BeginInvoke(this, clientToken.Id, r => ClientConnected.EndInvoke(r), null);
                }
                else
                {
                    ClientConnected(this, clientToken.Id);
                }
            }

            StartReceive(clientToken);

            StartAccept();
        }
        private void OnClientConnect(IAsyncResult ar)
        {
            if (!_isStarted)
            {
                return;
            }
            Thread.CurrentThread.Name = "OnClientConnect(Server)";
            Socket socket = _socket.EndAccept(ar);

            _socketList.Add(socket);
            IPEndPoint ipEndPoint = socket.RemoteEndPoint as IPEndPoint;

            if (ipEndPoint != null)
            {
                Log(LogLevel.Info, "Client Connected                   " + ipEndPoint.Address + " port " + ipEndPoint.Port);
                Thread listenWorkerThread = new Thread(StartListening);
                listenWorkerThread.Name = "ListenThread_" + ipEndPoint;
                listenWorkerThread.Start(socket);

                if (ClientConnected != null)
                {
                    ClientConnected.BeginInvoke(this, new ClientConnectionEventArgs(ipEndPoint), null, null);
                }
            }
            _socket.BeginAccept(new AsyncCallback(OnClientConnect), null);
        }