From 3cf6038da0d9ca7ea4342bc852f8e768a14fcadb Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Sat, 11 Jan 2020 13:20:49 +0100 Subject: [PATCH] Don't kill the ws in the keep-alive thread, if it is establishing a connection --- .../ctbrec/sites/mfc/MyFreeCamsClient.java | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java b/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java index 96712ccb..86706869 100644 --- a/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java +++ b/common/src/main/java/ctbrec/sites/mfc/MyFreeCamsClient.java @@ -521,15 +521,20 @@ public class MyFreeCamsClient { private void startKeepAlive(WebSocket ws) { Thread keepAlive = new Thread(() -> { while (running) { - LOG.trace("--> NULL to keep the connection alive"); try { - ws.send("0 0 0 0 0 -\n"); + if (!connecting) { + LOG.trace("--> NULL to keep the connection alive"); + ws.send("0 0 0 0 0 -\n"); - long millisSinceLastMessage = System.currentTimeMillis() - heartBeat; - if (millisSinceLastMessage > TimeUnit.MINUTES.toMillis(2)) { - LOG.info("No message since 2 mins. Restarting websocket"); - ws.close(1000, ""); - MyFreeCamsClient.this.ws = null; + long millisSinceLastMessage = System.currentTimeMillis() - heartBeat; + if (millisSinceLastMessage > TimeUnit.MINUTES.toMillis(2)) { + LOG.info("No message since 2 mins. Restarting websocket"); + ws.close(1000, ""); + MyFreeCamsClient.this.ws = null; + } + } else { + // we are establishing a new connection at the moment, not need to + // do anything } Thread.sleep(TimeUnit.SECONDS.toMillis(15)); @@ -561,23 +566,10 @@ public class MyFreeCamsClient { } public String getStreamUrl(SessionState state) { - Integer camserv = Optional.ofNullable(state.getU()).map(User::getCamserv).orElse(-1); - String camservString = camserv.toString(); - if (serverConfig.isOnWzObsVideoServer(state)) { - camservString = serverConfig.wzobsServers.get(camserv.toString()); - } else if (serverConfig.isOnObsServer(state)) { - camservString = serverConfig.ngVideoServers.get(camserv.toString()); - } else if (serverConfig.isOnHtml5VideoServer(state)) { - camservString = serverConfig.h5Servers.get(camserv.toString()); - } else if (camserv > 500) { - camserv -= 500; - camservString = camserv.toString(); - } - int userChannel = 100000000 + state.getUid(); String phase = state.getU().getPhase() != null ? state.getU().getPhase() : "z"; String phasePrefix = phase.equals("z") ? "" : '_' + phase; - String server = "video" + camservString.replaceAll("^\\D+", ""); + String server = "video" + getCamServ(state).replaceAll("^\\D+", ""); boolean useHls = serverConfig.isOnObsServer(state); String streamUrl; boolean dontUseDash = !Config.getInstance().getSettings().mfcUseDash; @@ -601,6 +593,22 @@ public class MyFreeCamsClient { return streamUrl; } + private String getCamServ(SessionState state) { + Integer camserv = Optional.ofNullable(state.getU()).map(User::getCamserv).orElse(-1); + String camservString = camserv.toString(); + if (serverConfig.isOnWzObsVideoServer(state)) { + camservString = serverConfig.wzobsServers.get(camserv.toString()); + } else if (serverConfig.isOnObsServer(state)) { + camservString = serverConfig.ngVideoServers.get(camserv.toString()); + } else if (serverConfig.isOnHtml5VideoServer(state)) { + camservString = serverConfig.h5Servers.get(camserv.toString()); + } else if (camserv > 500) { + camserv -= 500; + camservString = camserv.toString(); + } + return camservString; + } + public MyFreeCamsModel getModel(int uid) { return models.getIfPresent(uid); }