/// <summary> /// Initializes a new instance of the <see cref="ServerContainer"/> class. /// </summary> /// <param name="serverId">The server id.</param> /// <param name="listener">The listener.</param> /// <param name="manager">The manager.</param> /// <param name="serverStreamFactory">The stream factory.</param> internal ServerContainer(long serverId, ITcpListener listener, NetworkManager manager, IServerStreamFactory serverStreamFactory) { this.mServerId = serverId; this.mListener = listener; this.mManager = manager; this.mServerStreamFactory = serverStreamFactory; }
/// <summary> /// Starts the server. /// </summary> /// <param name="endPoint">The end point.</param> /// <param name="serverStreamFactory">The server stream factory.</param> /// <returns>Identifier of the listener</returns> public long StartServer(AddressEndPoint endPoint, IServerStreamFactory serverStreamFactory) { DoDisposeCheck(); if (endPoint == null) { ThrowHelper.ThrowArgumentNullException("endPoint"); } ITcpListener listener = mNetworkFactory.CreateTcpListener(endPoint); listener.Start(); // ez dobhat kivételt ServerContainer container = new ServerContainer(Interlocked.Increment(ref mServerGlobalId), listener, this, serverStreamFactory); mLockForServers.EnterWriteLock(); try { mServers.Add(container.ServerId, container); container.Initialize(); } catch (Exception ex) { if (LOGGER.IsFatalEnabled) { LOGGER.Fatal(ex.Message, ex); } listener.Stop(); throw; } finally { mLockForServers.ExitWriteLock(); } return(container.ServerId); }