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); }
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); }