/// public bool TryUnregister(TcpListenerConnection listener) { lock (_listeners) { return(RemoveListener(listener)); } }
/// <summary> /// Register for a specific port /// </summary> public void Register(TcpListenerConnection listener) { // First check if port was taken var port = listener.Port; var address = listener.Address; var interpreter = listener.Validator.Interpreter; if (!PortMap.Register(address, port, interpreter)) { throw new InvalidOperationException($"Attempted to register protocol header {interpreter} on port {port}, but port was already taken"); } // Get port listeners TcpPortListener portListener; lock (_listeners) { portListener = FindListener(listener); if (portListener == null) { portListener = new TcpPortListener(address, port); _listeners.Add(portListener); } } portListener.Register(listener); }
/// <summary> /// Unregister the connection /// </summary> /// <param name="listener"></param> public void Unregister(TcpListenerConnection listener) { TcpPortListener target; lock (_listeners) { target = FindListener(listener); } target.TryUnregister(listener); }
/// <summary> /// Unregister the connection /// </summary> /// <param name="listener"></param> public void Unregister(TcpListenerConnection listener) { TcpPortListener target; lock (_listeners) { target = _listeners.First(l => l.Port == listener.Port); } target.TryUnregister(listener); }
private bool RemoveListener(TcpListenerConnection listener) { var found = _listeners.Remove(listener); if (found && _listeners.Count == 0) { _listening = false; _tcpListener.Stop(); } return(found); }
/// public void Register(TcpListenerConnection listener) { lock (_listeners) { // Steal objects from the first listener if (_protocolInterpreter == null) { _protocolInterpreter = listener.Validator.Interpreter; } if (_logger == null) { _logger = listener.Logger.GetChild(string.Empty, typeof(TcpPortListener)); } _listeners.Add(listener); StartListening(); } }
private TcpPortListener FindListener(TcpListenerConnection listener) { return(_listeners.FirstOrDefault(l => l.Address.Equals(listener.Address) && l.Port == listener.Port)); }
public ServerConnectedState(TcpListenerConnection context, StateMap stateMap) : base(context, stateMap, BinaryConnectionState.Connected) { }