public void Start() { if (_server != null) { _server.Shutdown(); _server = null; } Assembly assembly = Assembly.GetExecutingAssembly(); FileVersionInfo fvi = FileVersionInfo.GetVersionInfo(assembly.Location); String version = fvi.FileVersion; LogMessage(String.Format("GnomeServer Version {0}", version)); LogMessage("Initializing Server..."); List<String> bindings = new List<String>(); Int32 currentBinding = 1; String currentBindingKey = String.Format(WebServerHostKey, currentBinding); while (Configuration.HasSetting(currentBindingKey)) { bindings.Add(Configuration.GetString(currentBindingKey)); currentBinding++; currentBindingKey = String.Format(WebServerHostKey, currentBinding); } // If there are no bindings in the configuration file, we'll need to initialize those values. if (bindings.Count == 0) { const String defaultBinding = "http://localhost:8081/"; bindings.Add(defaultBinding); // If there aren't any bindings, the value of currentBindingKey will never have made it past 1. // As a result, we can just use that. Configuration.SetString(currentBindingKey, defaultBinding); Configuration.SaveSettings(); } // The endpoint used internally should always be the first binding in the configuration. // There's no need to use multiple bindings for internal references, we only need a single one. _endpoint = bindings.First(); WebServer ws = new WebServer(HandleRequest, bindings.ToArray()); _server = ws; _server.Initialize(); LogMessage("Server Initialized."); _requestHandlers = new List<IRequestHandler>(); try { RegisterHandlers(); } catch (Exception ex) { LogMessage(ex.ToString(), "Exception"); throw; } }
private void ReleaseServer() { LogMessage("Checking for existing server..."); if (_server != null) { LogMessage("Server found; disposing..."); _server.Shutdown(); _server = null; LogMessage("Server Disposed."); } }