public void Initalize()
        {
            int?nullable;
            int?nullable1;
            int?nullable2;

            if (!this.config.Enabled || this.listener != null || this.server != null)
            {
                return;
            }
            if (string.IsNullOrEmpty(this.config.Password))
            {
                Interface.Oxide.LogWarning("[Rcon] Remote console password is not set, disabling", Array.Empty <object>());
                return;
            }
            try
            {
                this.server = new WebSocketServer(this.config.Port)
                {
                    WaitTime     = TimeSpan.FromSeconds(5),
                    ReuseAddress = true
                };
                this.server.AddWebSocketService <Oxide.Core.RemoteConsole.RemoteConsole.RconListener>(string.Concat("/", this.config.Password), () => {
                    Oxide.Core.RemoteConsole.RemoteConsole.RconListener rconListener  = new Oxide.Core.RemoteConsole.RemoteConsole.RconListener(this);
                    Oxide.Core.RemoteConsole.RemoteConsole.RconListener rconListener1 = rconListener;
                    this.listener = rconListener;
                    return(rconListener1);
                });
                this.server.Start();
                Interface.Oxide.LogInfo(string.Format("[Rcon] Server started successfully on port {0}", this.server.Port), Array.Empty <object>());
            }
            catch (Exception exception1)
            {
                Exception       exception       = exception1;
                OxideMod        oxide           = Interface.Oxide;
                WebSocketServer webSocketServer = this.server;
                if (webSocketServer != null)
                {
                    nullable1 = new int?(webSocketServer.Port);
                }
                else
                {
                    nullable  = null;
                    nullable1 = nullable;
                }
                oxide.LogException(string.Format("[Rcon] Failed to start server on port {0}", nullable1), exception);
                WebSocketServer webSocketServer1 = this.server;
                if (webSocketServer1 != null)
                {
                    nullable2 = new int?(webSocketServer1.Port);
                }
                else
                {
                    nullable  = null;
                    nullable2 = nullable;
                }
                RemoteLogger.Exception(string.Format("Failed to start RCON server on port {0}", nullable2), exception);
            }
        }
 public void Shutdown(string reason = "Server shutting down", CloseStatusCode code = 1000)
 {
     if (this.server != null)
     {
         this.server.Stop(code, reason);
         this.server   = null;
         this.listener = null;
         Interface.Oxide.LogInfo(string.Format("[Rcon] Service has stopped: {0} ({1})", reason, code), Array.Empty <object>());
     }
 }