Эх сурвалжийг харах

Adding minecraft status tile

Kirk Trombley 5 жил өмнө
parent
commit
10bdef8728

+ 2 - 0
src/App.js

@@ -4,6 +4,7 @@ import Teamspeak from "./components/tiles/Teamspeak";
 import TerrAssumptions from './components/tiles/TerrAssumptions';
 import CommaFeed from './components/tiles/CommaFeed';
 import Gogs from './components/tiles/Gogs';
+import Minecraft from './components/tiles/Minecraft';
 
 export default () => (
   <div className="App">
@@ -11,5 +12,6 @@ export default () => (
     <TerrAssumptions/>
     <CommaFeed/>
     <Gogs/>
+    <Minecraft/>
   </div>
 );

+ 42 - 0
src/components/tiles/Minecraft.jsx

@@ -0,0 +1,42 @@
+import React from "react";
+import { OK, BAD } from "../shared/StatusMessage";
+import Tile from "../shared/Tile";
+import useApi from "../../hooks/useApi";
+
+const trimLen = 20;
+const ms = 1000 * 60;
+
+export default () => {
+  const [rawHealth, rawData] = useApi("https://kirkleon.ddns.net/minecraft/", { ms });
+
+  let health = BAD;
+  let message = null;
+  if (rawHealth === OK) {
+    const {
+      online,
+      data,
+    } = rawData;
+    if (online) {
+      health = OK;
+      const {
+        currentPlayers,
+        maxPlayers,
+        motd,
+        version,
+      } = data;
+      const playerString = `${currentPlayers}/${maxPlayers} playing`;
+      const info = `${version} - ${motd}`;
+      const trimmedInfo = info.length > trimLen
+                        ? info.substring(0, trimLen - 3) + "..."
+                        : info
+      message = `${trimmedInfo}: ${playerString}`;
+    }
+  }
+
+  return <Tile
+    link="https://kirkleon.ddns.net/minecraft/map/"
+    title="Minecraft Server"
+    health={health}
+    data={message}
+  />
+}

+ 0 - 36
src/hooks/useJsonHealthCheck.js

@@ -1,36 +0,0 @@
-import { useEffect, useCallback } from "react";
-
-export default (
-  url, 
-  handleOk, 
-  handleFailed, 
-  handleError, 
-  ms = 20000,
-  credentials = null,
-) => {
-  const callbackOk = useCallback(handleOk, []);
-  const callbackFailed = useCallback(handleFailed, []);
-  const callbackError = useCallback(handleError, []);
-  useEffect(() => {
-    const checkServer = async () => {
-      try {
-        const res = await fetch(url, credentials ? { credentials } : {});
-        if (res.ok) {
-          const js = await res.json();
-          callbackOk(js);
-        } else {
-          callbackFailed();
-        }
-      }
-      catch (err) {
-        callbackError();
-      }
-    }
-
-    checkServer();
-
-    const interval = setInterval(checkServer, ms);
-
-    return () => clearInterval(interval);
-  }, [url, callbackOk, callbackFailed, callbackError, ms, credentials]);
-};