Пример #1
0
        public void Stop()
        {
            if (Stopped.Task.IsCompleted)
            {
                return;
            }

            lock (lockStop)
            {
                if (Stopped.Task.IsCompleted)
                {
                    return;
                }

                Log.Info("Stopping");

                StarterPIDAliveChecker.Stop();

                Log.Info("Shutting down services");
                var shutdownTasks = new List <Task>();
                foreach (var ws in RegisteredWebsockets.Where(ws => new WebSocketState[] { WebSocketState.Closed, WebSocketState.Closing }.Contains(ws.ReadyState)))
                {
                    shutdownTasks.Add(Task.Run(() => ShutdownWS(ws)));
                }
                Task.WaitAll(shutdownTasks.ToArray());

                Log.Info("Shutdown services successful");

                Stopped.TrySetResult(true);

                Log.Info("Stopped");
            }
        }
Пример #2
0
        public WebSocket CreateWebSocket(string path)
        {
            var ws = new WebSocket($"ws{(Config.UnencryptedServerCom ? "" : "s")}://{IPAddress.Loopback}:{Config.ComPort}" + path);

            ws.SetCredentials(Config.Username, Config.Password, false);
            if (!Config.UnencryptedServerCom)
            {
                ws.SslConfiguration.ServerCertificateValidationCallback = (sender, cert, chain, sslPolicyErrors) =>
                {
                    if (cert.GetPublicKeyString() != Config.ServerCertPublicKey)
                    {
                        Log.Error($"PublicKeyError: {cert.GetPublicKeyString()}");
                        return(false);
                    }

                    return(true);
                };
            }

            RegisteredWebsockets.Add(ws);

            return(ws);
        }