add polling

This commit is contained in:
afazio1
2024-04-22 01:39:25 -04:00
parent ddbc977c01
commit 7467092e0f
2 changed files with 35 additions and 1 deletions

View File

@@ -3,11 +3,12 @@ import { Link, useNavigate } from 'react-router-dom';
import { Outlet } from "react-router-dom"; import { Outlet } from "react-router-dom";
import { SessionContext, destroySessionCookie, getSessionCookie } from "./contexts/session"; import { SessionContext, destroySessionCookie, getSessionCookie } from "./contexts/session";
import { useState, useEffect, useContext } from "react"; import { useState, useEffect, useContext } from "react";
import { usePoll } from "./hooks/usePoll";
export default function App() { export default function App() {
const [session, setSession] = useState(getSessionCookie()); const [session, setSession] = useState(getSessionCookie());
const navigate = useNavigate(); const navigate = useNavigate();
usePoll();
// Redirect to login if session is undefined // Redirect to login if session is undefined
useEffect( useEffect(
() => { () => {

View File

@@ -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);
})
}
}