From 0dbf319575071385605407712f78989b9ad3a04b Mon Sep 17 00:00:00 2001
From: 0xboobface <0xboobface@gmail.com>
Date: Wed, 21 Nov 2018 14:20:37 +0100
Subject: [PATCH] Invalidate cache when a new websocket is opened

When a new connection is established (for example by the watchdog),
invalidate the caches. Also don't trigger a connect, if we are already
trying to connect.
---
 .../src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java b/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java
index cdc4f734..78b9e864 100644
--- a/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java
+++ b/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java
@@ -59,6 +59,7 @@ public class MyFreeCamsClient {
     private String chatToken;
     private int sessionId;
     private long heartBeat;
+    private volatile boolean connecting = false;
 
     private EvictingQueue<String> receivedTextHistory = EvictingQueue.create(100);
 
@@ -86,7 +87,7 @@ public class MyFreeCamsClient {
 
         Thread watchDog = new Thread(() -> {
             while(running) {
-                if (ws == null) {
+                if (ws == null && !connecting) {
                     LOG.info("Websocket is null. Starting a new connection");
                     Request req = new Request.Builder()
                             .url(wsUrl)
@@ -126,11 +127,15 @@ public class MyFreeCamsClient {
     }
 
     private WebSocket createWebSocket(Request req) {
+        connecting = true;
         WebSocket ws = mfc.getHttpClient().newWebSocket(req, new WebSocketListener() {
             @Override
             public void onOpen(WebSocket webSocket, Response response) {
                 super.onOpen(webSocket, response);
                 try {
+                    connecting = false;
+                    sessionStates.invalidateAll();
+                    models.invalidateAll();
                     LOG.trace("open: [{}]", response.body().string());
                     webSocket.send("hello fcserver\n");
                     webSocket.send("fcsws_20180422\n");
@@ -147,6 +152,7 @@ public class MyFreeCamsClient {
             @Override
             public void onClosed(WebSocket webSocket, int code, String reason) {
                 super.onClosed(webSocket, code, reason);
+                connecting = false;
                 LOG.info("MFC websocket closed: {} {}", code, reason);
                 MyFreeCamsClient.this.ws = null;
                 if(!running) {
@@ -157,6 +163,7 @@ public class MyFreeCamsClient {
             @Override
             public void onFailure(WebSocket webSocket, Throwable t, Response response) {
                 super.onFailure(webSocket, t, response);
+                connecting = false;
                 if(response != null) {
                     int code = response.code();
                     String message = response.message();