Ejemplo n.º 1
0
        public void ConnectionCreated(ConnectionClient connection)
        {
            if (Connection != null)
            {
                Disconnect(EDisconnectReason.ClientJoinedAnotherServer);
            }

            Connection = connection;
            OnConnectionCreated?.Invoke(Connection);
            Connection.Connect();

            Logger.Debug("Connection to server created {connection}", Connection);
        }
Ejemplo n.º 2
0
        private void ProcessAccept(SocketAsyncEventArgs e)
        {
            if (_shutdownEvent.Wait(0)) // 仅检查标志,立即返回
            {
                // 关闭事件触发,退出loop
                return;
            }

            BaseConnection connection = null;

            try
            {
                Interlocked.Increment(ref _connectedCount);
                connection = CreateConnection(e);
                connection.OnConnectionClosed += ConnectionClosed;
                connection.Start();
                ConnectionList.TryAdd(_connectedCount, connection);
                OnConnectionCreated?.Invoke(this, new ConnectionInfo {
                    Num = connection.Id, Description = string.Empty, Time = DateTime.Now
                });
            }
            catch (SocketException ex)
            {
                Print(ex.Message);
            }
            catch (ConnectionAbortedException ex)
            {
                Print(ex.Message);
                connection.Close();
                _acceptedClientsSemaphore.Release();
                Interlocked.Decrement(ref _connectedCount);
                OnConnectionAborted?.Invoke(this, new ConnectionInfo {
                    Num = connection.Id, Description = string.Empty, Time = DateTime.Now
                });
            }
            catch (Exception ex)
            {
                Print(ex.Message);
            }

            StartAccept(e);
        }