From 7467092e0f318309944986db611fe44c286c4e4f Mon Sep 17 00:00:00 2001 From: afazio1 Date: Mon, 22 Apr 2024 01:39:25 -0400 Subject: [PATCH] add polling --- frontend/src/App.tsx | 3 ++- frontend/src/hooks/usePoll.ts | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 frontend/src/hooks/usePoll.ts diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 27f8456..446f514 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -3,11 +3,12 @@ import { Link, useNavigate } from 'react-router-dom'; import { Outlet } from "react-router-dom"; import { SessionContext, destroySessionCookie, getSessionCookie } from "./contexts/session"; import { useState, useEffect, useContext } from "react"; +import { usePoll } from "./hooks/usePoll"; export default function App() { const [session, setSession] = useState(getSessionCookie()); const navigate = useNavigate(); - + usePoll(); // Redirect to login if session is undefined useEffect( () => { diff --git a/frontend/src/hooks/usePoll.ts b/frontend/src/hooks/usePoll.ts new file mode 100644 index 0000000..598ef2b --- /dev/null +++ b/frontend/src/hooks/usePoll.ts @@ -0,0 +1,33 @@ +import { useEffect } from "react" +import { getAuthHeaders } from "../utils/getAuthHeaders" +export const usePoll = () => { + useEffect(() => { + const interval = setInterval(() => { + pollServer() + .catch((error) => { + console.error('Error:', error); + }); + }, 30 * 60000) // poll every 30 minutes + return () => { + // clean up + clearInterval(interval); + }; + }, []) + + const pollServer = async () => { + // request private ip from local api + return fetch('http://127.0.0.1:8080/ip') + .then(response => response.text()) + .then((data) => { + // send private ip to central server + return fetch('http://localhost:8000/api/poll/', { + method: 'POST', + headers: getAuthHeaders(), + body: JSON.stringify({ip: data}), + }) + }).then(response => response.json()) + .then(data => { + console.log("Poll response data:", data); + }) + } +} \ No newline at end of file