//Востановить соединение с сервером
 private void RefreshConnection()
 {
     try
     {
         RefreshForecasts(false);
         _reconnectTimer.Stop();
         OnConnectionRestored?.Invoke(this, "Подключение востановленно");
     }
     catch (ConnectionException e)
     {
         ExceptionLogger.Log(e);
     }
 }
 private void WebSocket_OnOpen(object sender, EventArgs e)
 {
     webSocket.OnError += WebSocket_OnError;
     websocketResetEvent.Set();
     if (TrackedChunks.Count > 0)
     {
         SubscribeToUpdates(TrackedChunks);
     }
     logger?.Invoke("Listening for changes via websocket", MessageGroup.TechInfo);
     if (!initialConnection)
     {
         OnConnectionRestored?.Invoke(this, null);
     }
     initialConnection = false;
 }
 private void WebSocket_OnOpen(object sender, EventArgs e)
 {
     webSocket.OnError += WebSocket_OnError;
     websocketResetEvent.Set();
     SubscribeToCanvas(canvas);
     if (trackedChunks.Count > 0)
     {
         RegisterChunks(trackedChunks);
     }
     logger.LogTechInfo("Listening for changes via websocket");
     if (!initialConnection)
     {
         isConnectingNow = false;
         logger.LogDebug("WebSocket_OnOpen(): connection restored");
         OnConnectionRestored?.Invoke(this, new ConnectionRestoredEventArgs(disconnectionTime));
     }
     initialConnection = false;
 }
 private void WebSocket_OnOpen(object sender, EventArgs e)
 {
     logger.LogDebug($"WebSocket_OnOpen(): start");
     webSocket.OnError += WebSocket_OnError;
     websocketResetEvent.Set();
     SubscribeToCanvas();
     if (trackedChunks.Count > 0)
     {
         RegisterChunks(trackedChunks);
     }
     logger.LogTechInfo("Listening for changes via websocket");
     if (!initialConnection)
     {
         isConnectingNow = false;
         logger.LogDebug("WebSocket_OnOpen(): invoking OnConnectionResored");
         OnConnectionRestored?.Invoke(this, new ConnectionRestoredEventArgs(disconnectionTime));
     }
     initialConnection = false;
     logger.LogDebug($"WebSocket_OnOpen(): preemptive reconnection timer reset");
     preemptiveWebsocketReplacingTimer.Stop();
     preemptiveWebsocketReplacingTimer.Start();
 }