Exemplo n.º 1
0
        private void OnAcceptConnection(IAsyncResult iar)
        {
            if (IsRunning)
            {
                try
                {
                    var socket = ((Socket)iar.AsyncState).EndAccept(iar);
                    lock (_connections)
                    {
                        var connection = new TcpConnectionEntity(socket, (uint)_idProvider.GetId());

                        connection.Disconnected += (reason) =>
                        {
                            _connections.Remove(connection.Id);
                            OnClientDisconnected(connection, reason);
                        };

                        _connections.Add(connection.Id, connection);

                        connection.StartReception();
                        OnClientConnected(connection);
                    }
                }
                catch (Exception e)
                {
                    if (e is SocketException || e is ObjectDisposedException)
                    {
                        return;
                    }
                }

                if (IsRunning)
                {
                    _socket.BeginAccept(new AsyncCallback(OnAcceptConnection), _socket);
                }
            }
        }
Exemplo n.º 2
0
 protected virtual void OnClientDisconnected(TcpConnectionEntity connection, NetworkDisconnectReason reason)
 {
 }
Exemplo n.º 3
0
 protected virtual void OnClientConnected(TcpConnectionEntity connection)
 {
 }