Esempio n. 1
0
        private static void StartPing()
        {
            Thread.Sleep(PingInterval);

            webSocket = new WebSocket(string.Format("ws://127.0.0.1:{0}/socket.io/?EIO=3&transport=websocket", startInfo.EnvironmentVariables["port"]));
            webSocket.SetCookie(new WebSocketSharp.Net.Cookie("authorization", SignalrServiceClient.CreateAuthToken()));
            webSocket.OnMessage += (sender, e) =>
            {
                if (e.Data.Contains("error"))
                {
                    Logger.Error("Auth error");
                    cancellationTokenSource.Cancel();
                }
            };
            webSocket.Connect();

            Task.Run(() =>
            {
                while (webSocket.Ping())
                {
                    Logger.Debug("Ping");
                    Thread.Sleep(PingInterval);
                }

                Logger.Debug("Reconnect");
                if (retries < maxretries)
                {
                    StartNode();
                    retries++;
                }
            }, cancellationTokenSource.Token);
        }
        private void StartPing()
        {
            Thread.Sleep(PingInterval);

            var error = false;

            WebSocket = new WebSocket(string.Format("ws://127.0.0.1:{0}/socket.io/?EIO=3&transport=websocket", StartInfo.EnvironmentVariables["port"]));
            WebSocket.SetCookie(new WebSocketSharp.Net.Cookie("authorization", SignalrServiceClient.CreateAuthToken()));
            WebSocket.EmitOnPing = true;

            WebSocket.Log.Level = WebSocketSharp.LogLevel.Trace;

            WebSocket.Log.Output = (logData, filePath) =>
            {
                if (logData.Message.Contains("SocketException"))
                {
                    error = true;
                }

                Logger.Debug(logData.Message);
            };

            WebSocket.OnOpen += (sender, e) =>
            {
                Logger.Info("Open");
                error = false;

                Thread.Sleep(PingInterval);

                Task.Run(() =>
                {
                    while (WebSocket.Ping())
                    {
                        Logger.Debug("Ping " + WebSocket.ReadyState);
                        Thread.Sleep(PingInterval);
                    }
                    Logger.Debug("Reconnect" + WebSocket.ReadyState);
                }, CancellationTokenSource.Token);
            };

            WebSocket.OnClose += (sender, e) =>
            {
                Logger.Info("Close");
                if (CancellationTokenSource.IsCancellationRequested)
                {
                    return;
                }

                if (error)
                {
                    Process.GetCurrentProcess().Kill();
                }
                else
                {
                    WebSocket.Connect();
                }
            };

            WebSocket.OnMessage += (sender, e) =>
            {
                if (e.Data.Contains("error"))
                {
                    Logger.Error("Auth error");
                    CancellationTokenSource.Cancel();
                }
            };

            WebSocket.OnError += (sender, e) =>
            {
                Logger.Error("Error", e.Exception);
            };

            WebSocket.Connect();
        }