Exemplo n.º 1
0
 /// <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;
 }
Exemplo n.º 2
0
        /// <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);
        }