From 21944dccbbf6d17c65d4cbfadff1fd00df7c88a2 Mon Sep 17 00:00:00 2001
From: Stefan Kraus <stefan.kraus@methodpark.de>
Date: Sun, 13 Dec 2020 15:20:55 +0100
Subject: [PATCH] broken impl

---
 .../src/backendconnection/communication.ts    | 19 ++++++++++++++++---
 .../connectionstatus/ConnectionStatusBar.tsx  |  4 ++--
 .../connectionstatus/ConnectionStatusSlice.ts |  4 ++--
 frontend/src/store/store.ts                   |  9 ++++-----
 4 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/frontend/src/backendconnection/communication.ts b/frontend/src/backendconnection/communication.ts
index 14fe03a..fcd8fb0 100644
--- a/frontend/src/backendconnection/communication.ts
+++ b/frontend/src/backendconnection/communication.ts
@@ -4,9 +4,14 @@ import {
   setPlaySeconds,
 } from "../player/PlayerSlice";
 
-import { setConnectionStatus } from "../connectionstatus/ConnectionStatusSlice";
+import { selectConnected, setConnectionStatus } from "../connectionstatus/ConnectionStatusSlice";
 
-import { all, put, select, takeEvery } from "redux-saga/effects";
+import { all, call, delay, put, retry, select, takeEvery } from "redux-saga/effects";
+import { connect } from "@giantmachines/redux-websocket/dist";
+
+export const getNewConnectionAction = (): any => {
+  return connect("wss://mpvsync.de:8432/")
+}
 
 export const requestPlay = {
   type: "REDUX_WEBSOCKET::SEND",
@@ -110,7 +115,15 @@ function* handleConnectionStatus(action: any) {
       break;
     }
     case "REDUX_WEBSOCKET::CLOSED": {
-      yield put(setConnectionStatus(false));
+      let con_status = yield select(selectConnected)
+      if(con_status === null){
+        console.log("in first case!yyy");
+        yield delay(500);
+        yield put(getNewConnectionAction());
+      } else {
+        console.log("in second");
+        yield put(setConnectionStatus(false));
+      }
       break;
     }
   }
diff --git a/frontend/src/connectionstatus/ConnectionStatusBar.tsx b/frontend/src/connectionstatus/ConnectionStatusBar.tsx
index 5fc0d49..b0e85f8 100644
--- a/frontend/src/connectionstatus/ConnectionStatusBar.tsx
+++ b/frontend/src/connectionstatus/ConnectionStatusBar.tsx
@@ -20,7 +20,7 @@ const useStyles = makeStyles((theme: Theme) =>
 );
 
 interface StateProps {
-  connected: boolean;
+  connected: boolean | null;
 }
 
 export type Props = StateProps;
@@ -33,7 +33,7 @@ export function ConnectionStatusBar(
     <div className={classes.root}>
       <AppBar position="static" color="default">
         <Toolbar>
-          <Typography variant="h6" className={classes.title}>
+          <Typography style={{color: props.connected ? 'primary' : 'red'}} variant="h6" className={classes.title}>
             {props.connected
               ? "Connected to server"
               : "Lost connection to server"}
diff --git a/frontend/src/connectionstatus/ConnectionStatusSlice.ts b/frontend/src/connectionstatus/ConnectionStatusSlice.ts
index 1f96414..8d60bba 100644
--- a/frontend/src/connectionstatus/ConnectionStatusSlice.ts
+++ b/frontend/src/connectionstatus/ConnectionStatusSlice.ts
@@ -2,11 +2,11 @@ import { createSlice, PayloadAction } from "@reduxjs/toolkit";
 import { RootState } from "../store/store";
 
 export interface ConnectionStatusState {
-  connected: boolean;
+  connected: boolean | null;
 }
 
 export const initialState: ConnectionStatusState = {
-  connected: false,
+  connected: null,
 };
 
 export type ConnectionStatusAction = PayloadAction<boolean>;
diff --git a/frontend/src/store/store.ts b/frontend/src/store/store.ts
index 38f9b54..ddb0887 100644
--- a/frontend/src/store/store.ts
+++ b/frontend/src/store/store.ts
@@ -5,17 +5,14 @@ import PlayerStateReducer from "../player/PlayerSlice";
 import ConnectionStatusStateReducer from "../connectionstatus/ConnectionStatusSlice";
 import UrlReducer from "../url/UrlSlice";
 
-import rootSaga from "../backendconnection/communication";
+import rootSaga, { getNewConnectionAction } from "../backendconnection/communication";
 
 import createSagaMiddleware from "redux-saga";
 
-import { connect } from "@giantmachines/redux-websocket";
-
 // Create the websocket instance.
 const reduxWebsocketMiddleware = reduxWebsocket({
   reconnectInterval: 1000,
   reconnectOnClose: true,
-  dateSerializer: (date: Date) => "haha",
 });
 // See https://github.com/giantmachines/redux-websocket
 // and https://www.npmjs.com/package/@giantmachines/redux-websocket
@@ -39,6 +36,7 @@ export const store = configureStore({
       serializableCheck: {
         // Ignore these action types
         ignoredActions: [
+          /*
           "REDUX_WEBSOCKET::CONNECT",
           "REDUX_WEBSOCKET::CLOSED",
           "REDUX_WEBSOCKET::ERROR",
@@ -49,6 +47,7 @@ export const store = configureStore({
           "REDUX_WEBSOCKET::OPEN",
           "REDUX_WEBSOCKET::MESSAGE",
           "REDUX_WEBSOCKET::SEND",
+          */
         ],
       },
     }),
@@ -57,7 +56,7 @@ export const store = configureStore({
   ],
 });
 
-store.dispatch(connect("wss://mpvsync.de:8432/"));
+store.dispatch(getNewConnectionAction());
 sagaMiddleware.run(rootSaga);
 
 export type RootState = ReturnType<typeof store.getState>;
-- 
GitLab