コード例 #1
0
        private void Listen()
        {
            while (ServerRunning)
            {
                if (socket.Poll(-1, SelectMode.SelectRead))
                {
                    var task = socket.AcceptAsync();
                    task.ContinueWith((taskResult) =>
                    {
                        var clientSocket = taskResult.Result;

                        clients.Add(clientSocket);

                        var tcpClient = new TcpSocket(clientSocket);

                        SocketMapper.Mapper(clientSocket, tcpClient);

                        ConnectionController?.HandleConnection(tcpClient);

                        resetEvent.Set();
                    });
                }
                else if (socket.Poll(10, SelectMode.SelectError))
                {
                    ConnectionController?.HandleError(this);
                    break;
                }
            }
        }
コード例 #2
0
        private void Handler()
        {
            while (ServerRunning)
            {
                if (clients.Count == 0)
                {
                    resetEvent.Reset();
                    resetEvent.Wait(-1);
                }

                SocketsSelector.Clear();
                SocketsErrors.Clear();

                SocketsSelector.AddRange(clients);
                SocketsErrors.AddRange(clients);

                try
                {
                    Socket.Select(SocketsSelector, null, SocketsErrors, -1);
                }
                catch (Exception ex)
                {
                }

                for (var i = 0; i < SocketsSelector.Count; i++)
                {
                    var socketSpeaker = SocketsSelector[i];
                    var bytes         = ConnectionController?.HandleMesage(SocketMapper.GetISocket(socketSpeaker));
                    if (bytes == 0)
                    {
                        SocketMapper.RemoveISocketMapper(socketSpeaker);
                        clients.Remove(socketSpeaker);
                    }
                }

                for (var i = 0; i < SocketsErrors.Count; i++)
                {
                    var socketError = SocketsErrors[i];

                    ConnectionController?.HandleError(SocketMapper.GetISocket(socketError));
                    SocketMapper.RemoveISocketMapper(socketError);
                    clients.Remove(socketError);
                }
            }

            while (ClientRunning)
            {
                if (socket.Poll(-1, SelectMode.SelectRead))
                {
                    ConnectionController?.HandleMesage(null);
                }
            }
        }
コード例 #3
0
        public void Close()
        {
            socket.Close();

            for (var i = 0; i < clients.Count; i++)
            {
                SocketMapper.RemoveISocketMapper(clients[i]);
            }

            clients.Clear();
            ServerRunning = false;
            ClientRunning = false;
        }