예제 #1
0
        /// <summary>
        /// Start the server.
        /// </summary>
        public void Start()
        {
            try
            {
                // Start the server.
                if (_server != null)
                {
                    _server.Start();
                }
            }
            catch (Exception)
            {
                if (_server != null)
                {
                    _server.Dispose();
                }

                _server  = null;
                _clients = null;
                throw;
            }
        }
예제 #2
0
        /// <summary>
        /// Dispose(bool disposing) executes in two distinct scenarios.  If disposing
        /// equals true, the method has been called directly or indirectly by a user's
        /// code. Managed and unmanaged resources can be disposed.  If disposing equals
        /// false, the method has been called by the runtime from inside the finalizer
        /// and you should not reference other objects. Only unmanaged resources can
        /// be disposed.
        /// </summary>
        protected virtual void Dispose(bool disposing)
        {
            // Check to see if Dispose has already been called.
            if (!this._disposed)
            {
                // Note disposing has been done.
                _disposed = true;

                // If disposing equals true, dispose all managed
                // and unmanaged resources.
                if (disposing)
                {
                    // Dispose managed resources.
                    if (_server != null)
                    {
                        _server.Dispose();
                    }
                }

                // Call the appropriate methods to clean up
                // unmanaged resources here.
                _server = null;
            }
        }
예제 #3
0
        /// <summary>
        /// Initialise the server.
        /// </summary>
        private void Init()
        {
            try
            {
                // Create the client list.
                _clients        = new SortedDictionary <string, Nequeo.Net.Data.ConnectionContext>();
                _loadServers    = Data.Helper.GetLoadBalanceServer();
                _contextManager = new Nequeo.Server.SingleContextManager();

                string socketProviderHostPrefix   = "LoadBalance_";
                string hostProviderFullName       = socketProviderHostPrefix + "SocketProviderV6";
                string hostProviderFullNameSecure = socketProviderHostPrefix + "SocketProviderV6Ssl";

                // Get the certificate reader.
                Nequeo.Security.Configuration.Reader certificateReader = new Nequeo.Security.Configuration.Reader();
                Nequeo.Net.Configuration.Reader      hostReader        = new Nequeo.Net.Configuration.Reader();

                // Create the server endpoint.
                Nequeo.Net.Sockets.MultiEndpointModel[] model = new Nequeo.Net.Sockets.MultiEndpointModel[]
                {
                    // None secure.
                    new Nequeo.Net.Sockets.MultiEndpointModel()
                    {
                        Port      = hostReader.GetServerHost(hostProviderFullName).Port,
                        Addresses = new System.Net.IPAddress[]
                        {
                            System.Net.IPAddress.IPv6Any,
                            System.Net.IPAddress.Any
                        }
                    },
                    // Secure.
                    new Nequeo.Net.Sockets.MultiEndpointModel()
                    {
                        Port      = hostReader.GetServerHost(hostProviderFullNameSecure).Port,
                        Addresses = new System.Net.IPAddress[]
                        {
                            System.Net.IPAddress.IPv6Any,
                            System.Net.IPAddress.Any
                        }
                    }
                };

                // Start the server.
                _server = new Nequeo.Net.WebServerSingle(model, _maxClient);
                _server.ServerContextManager = _contextManager;
                _server.Name        = "Load Balance Server";
                _server.ServiceName = "LoadBalanceServer";
                _server.SocketProviderHostPrefix = socketProviderHostPrefix;
                _server.OnClientConnected        = (context) => ClientConnected(context);
                _server.OnClientDisconnected     = (context) => ClientDisconnected(context);
                _server.OnWebContext            += Server_OnWebContext;
                _server.Timeout                = hostReader.GetServerHost(hostProviderFullName).ClientTimeOut;
                _server.ReadBufferSize         = 32768;
                _server.WriteBufferSize        = 32768;
                _server.HeaderTimeout          = 30000;
                _server.RequestTimeout         = 30000;
                _server.ResponseTimeout        = 30000;
                _server.ResponseBufferCapacity = 10000000;
                _server.RequestBufferCapacity  = 10000000;
                _server.MaximumReadLength      = 1000000;

                // Inititalise.
                _server.Initialisation();

                try
                {
                    // Look for the certificate information in the configuration file.

                    // Get the certificate if any.
                    X509Certificate2 serverCertificate = certificateReader.GetServerCredentials();

                    // If a certificate exists.
                    if (serverCertificate != null)
                    {
                        // Get the secure servers.
                        _server.Server[2].UseSslConnection = true;
                        _server.Server[2].X509Certificate  = serverCertificate;
                        _server.Server[3].UseSslConnection = true;
                        _server.Server[3].X509Certificate  = serverCertificate;
                    }
                }
                catch { }

                // For each server in the collection.
                for (int i = 0; i < _server.Server.NumberOfServers; i++)
                {
                    // Set what needs to be polled.
                    _server.Server[i].PollReader(true);
                    _server.Server[i].PollWriter(false);
                    _server.Server[i].PollError(false);
                }
            }
            catch (Exception)
            {
                if (_server != null)
                {
                    _server.Dispose();
                }

                _server  = null;
                _clients = null;
                throw;
            }
        }