Skip to content

Commit

Permalink
Christ this shit is jank
Browse files Browse the repository at this point in the history
  • Loading branch information
TheBozzz34 committed Mar 13, 2024
1 parent b026ad5 commit a859160
Show file tree
Hide file tree
Showing 3 changed files with 186 additions and 98 deletions.
33 changes: 27 additions & 6 deletions context/WebSocketContext.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,17 @@ export function WebSocketProvider({ children }: WebSocketProviderProps) {
const [socket, setSocket] = useState<WebSocket | null>(null)
const [messages, setMessages] = useState<string[]>([])
const [connectionStatus, setConnectionStatus] = useState<string>("Disconnected")
const [reconnectionAttempts, setReconnectionAttempts] = useState<number>(0)
const maxReconnectionAttempts = 5; // Adjust this value as needed

useEffect(() => {
const newSocket = new WebSocket("wss://wss.catgirlsaresexy.org")
// const newSocket = new WebSocket("ws://127.0.0.1:8080")
const connectWebSocket = () => {
const newSocket = new WebSocket("wss://wss.catgirlsaresexy.org")
// const newSocket = new WebSocket("ws://127.0.0.1:8080")

newSocket.onopen = () => {
console.log("WebSocket connected")
setConnectionStatus("Connected")
setReconnectionAttempts(0); // Reset reconnection attempts on successful connection
}

newSocket.onmessage = (event) => {
Expand All @@ -41,16 +44,34 @@ export function WebSocketProvider({ children }: WebSocketProviderProps) {
}

newSocket.onclose = () => {
console.log("WebSocket connection closed")
console.log("WebSocket connection closed, trying to reconnect")
setConnectionStatus("Disconnected")
setTimeout(() => {
connectWebSocket(); // Attempt to reconnect
setReconnectionAttempts(reconnectionAttempts + 1);
}, 2000); // Adjust this timeout as needed
/*
if (reconnectionAttempts < maxReconnectionAttempts) {
setTimeout(() => {
connectWebSocket(); // Attempt to reconnect
setReconnectionAttempts(reconnectionAttempts + 1);
}, 2000); // Adjust this timeout as needed
}
*/
}

setSocket(newSocket)
}

useEffect(() => {
connectWebSocket();

return () => {
newSocket.close()
if (socket) {
socket.close();
}
}
}, [])
}, []);

const sendMessage = (message: string) => {
if (socket && socket.readyState === WebSocket.OPEN) {
Expand Down
48 changes: 38 additions & 10 deletions pages/app/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,17 +27,21 @@ export default function Scoreboard() {

useEffect(() => {

if (ignore.current) {
ignore.current = false
return
}
if (ignore.current) return;

if (connectionStatus !== "Connected") return;

if (!userAccount) return;

const message = {
action: "get",
boardId: userAccount?.uid,
}
sendMessage(JSON.stringify(message))
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [userAccount])

ignore.current = true;

}, [connectionStatus, sendMessage, userAccount])

const [teamAScore, setTeamAScore] = useState(0)
const [teamBScore, setTeamBScore] = useState(0)
Expand Down Expand Up @@ -142,11 +146,35 @@ export default function Scoreboard() {
setTeamAScore(teamAScore + 1)
}

const decrementTeamAScore = () => {
if (teamAScore > 0) {
setTeamAScore(teamAScore - 1)
}
}

// Function to increment the score for Team B
const incrementTeamBScore = () => {
setTeamBScore(teamBScore + 1)
}

const decrementTeamBScore = () => {
if (teamBScore > 0) {
setTeamBScore(teamBScore - 1)
}
}

const decrementTeamAFouls = () => {
if (teamAFouls > 0) {
setTeamAFouls(teamAFouls - 1)
}
}

const decrementTeamBFouls = () => {
if (teamBFouls > 0) {
setTeamBFouls(teamBFouls - 1)
}
}

const handleTeamANameChange = (newName: React.SetStateAction<string>) => {
setTeamAName(newName)
setShowTeamAPopup(false)
Expand Down Expand Up @@ -424,7 +452,7 @@ export default function Scoreboard() {
Increment score
</button>
<button
onClick={() => setTeamAScore(teamAScore - 1)}
onClick={decrementTeamAScore}
className="glass-button"
>
Decrement score
Expand Down Expand Up @@ -466,7 +494,7 @@ export default function Scoreboard() {
Increment fouls
</button>
<button
onClick={() => setTeamAFouls(teamAFouls - 1)}
onClick={decrementTeamAFouls}
className="glass-button"
>
Decrement fouls
Expand Down Expand Up @@ -494,7 +522,7 @@ export default function Scoreboard() {
Increment score
</button>
<button
onClick={() => setTeamBScore(teamBScore - 1)}
onClick={decrementTeamBScore}
className="glass-button"
>
Decrement score
Expand Down Expand Up @@ -535,7 +563,7 @@ export default function Scoreboard() {
Increment fouls
</button>
<button
onClick={() => setTeamBFouls(teamBFouls - 1)}
onClick={decrementTeamBFouls}
className="glass-button"
>
Decrement fouls
Expand Down
203 changes: 121 additions & 82 deletions pages/public/index.tsx
Original file line number Diff line number Diff line change
@@ -1,108 +1,147 @@
import { onAuthStateChanged, User } from "firebase/auth"
import Head from "next/head"
import { useRouter } from "next/router"
import React, { useEffect, useState } from "react"
import { useWebSocket } from "context/WebSocketContext"
import { auth } from "../../firebase"

import Head from "next/head";
import { useRouter } from "next/router";
import { useEffect, useState } from "react";
import { useWebSocket } from "context/WebSocketContext";
import { auth } from "../../firebase";
import { User } from "firebase/auth";

interface Data {
teamAScore: number;
teamBScore: number;
teamAFouls: number;
teamBFouls: number;
currentPeriod: number;
teamAName: string;
teamBName: string;
}
const Public = () => {
const { messages, sendMessage } = useWebSocket()
const [userAccount, setUserAccount] = useState<User | null>(null)
const router = useRouter()
const { messages, sendMessage, connectionStatus } = useWebSocket();
const router = useRouter();

const [teamAScore, setTeamAScore] = useState(0)
const [teamBScore, setTeamBScore] = useState(0)
const [teamAFouls, setTeamAFouls] = useState(0)
const [teamBFouls, setTeamBFouls] = useState(0)
const [currentPeriod, setCurrentPeriod] = useState(1)
const [teamAScore, setTeamAScore] = useState(0);
const [teamBScore, setTeamBScore] = useState(0);
const [teamAFouls, setTeamAFouls] = useState(0);
const [teamBFouls, setTeamBFouls] = useState(0);
const [currentPeriod, setCurrentPeriod] = useState(1);
const [teamAName, setTeamAName] = useState("Team A");
const [teamBName, setTeamBName] = useState("Team B");

const [teamAName, setTeamAName] = useState("Team A")
const [teamBName, setTeamBName] = useState("Team B")
const [userAccount, setUserAccount] = useState<User | null>(null)

const [ignore, setIgnore] = useState(false);

const [countFix, setCountFix] = useState(0);

useEffect(() => {
onAuthStateChanged(auth, (user) => {
const unsubscribe = auth.onAuthStateChanged((user) => {
if (user) {
setUserAccount(user)
} else {
setUserAccount(null)
}
})
}, [])
});

return () => {
unsubscribe();
};
}, []);

// Get initial data
useEffect(() => {

if (ignore) return;

if (connectionStatus !== "Connected") return;

if (!userAccount) return;

console.log("Sending get message")

const message = {
action: "get",
boardId: userAccount?.uid,
}
sendMessage(JSON.stringify(message))
setIgnore(true)
}, [ignore, connectionStatus, userAccount, sendMessage]);


useEffect(() => {
messages.forEach((message) => {
const messageJson = JSON.parse(message) as { boardId: string; boardData: string }

console.log(messageJson)

if (messageJson.boardId === userAccount?.uid) {
const data = JSON.parse(messageJson.boardData) as {
teamAScore: number
teamBScore: number
teamAFouls: number
teamBFouls: number
currentPeriod: number
teamAName: string
teamBName: string
}

setTeamAScore(data.teamAScore)
setTeamBScore(data.teamBScore)
setTeamAFouls(data.teamAFouls)
setTeamBFouls(data.teamBFouls)
setCurrentPeriod(data.currentPeriod)
setTeamAName(data.teamAName)
setTeamBName(data.teamBName)

const messageJson = JSON.parse(message) as {
boardId?: string;
boardData?: string;
};

console.log(messageJson)

if (messageJson.boardId && messageJson.boardData) {
const data = JSON.parse(messageJson.boardData) as Data;

setTeamAScore(data.teamAScore);
setTeamBScore(data.teamBScore);
setTeamAFouls(data.teamAFouls);
setTeamBFouls(data.teamBFouls);
setCurrentPeriod(data.currentPeriod);
setTeamAName(data.teamAName);
setTeamBName(data.teamBName);
}
})

});

onAuthStateChanged(auth, (user) => {
const unsubscribe = auth.onAuthStateChanged((user) => {
if (!user) {
router.push("/login")
router.push("/login");
}
})
}, [router, sendMessage, messages, userAccount?.uid])
});

return () => {
unsubscribe();
};
}, [router, messages]);

return (
<>
<Head>
<title>ScoreConnect Public Page</title>
</Head>

<body
className="flex flex-col items-center justify-center h-screen bg-gray-100"
>

<h1 className="text-4xl font-bold">ScoreConnect</h1>
<div className="flex flex-col items-center justify-center">
<div className="flex flex-row items-center justify-center">
<h2 className="text-2xl font-bold">{teamAName}</h2>

<hr className="w-1/4 mx-4" />

<h2 className="text-2xl font-bold">{teamAScore}</h2>
<hr className="w-1/4 mx-4" />

<h2 className="text-2xl font-bold">{teamAFouls}</h2>
</div>
<div className="flex flex-row items-center justify-center">
<h2 className="text-2xl font-bold">{teamBName}</h2>

<hr className="w-1/4 mx-4" />
<h2 className="text-2xl font-bold">{teamBScore}</h2>
<hr className="w-1/4 mx-4" />
<h2 className="text-2xl font-bold">{teamBFouls}</h2>
</div>
<div className="flex flex-row items-center justify-center">
<h2 className="text-2xl font-bold">{currentPeriod}</h2>
<div className="flex flex-col items-center justify-center h-screen bg-gray-100 z-10">
<div className="container mx-auto">
<div className="grid grid-cols-3 gap-4">
<div className="col-span-1">
<div className="bg-gray-900 text-white rounded-lg p-4">
<div className="text-center mb-4">
<h2 className="text-lg font-semibold">{teamAName}</h2>
<p className="text-xs">Score</p>
<p className="text-3xl font-bold">{teamAScore}</p>
</div>
<div className="text-center">
<p className="text-xs">Fouls</p>
<p className="text-3xl font-bold">{teamAFouls}</p>
</div>
</div>
</div>
<div className="col-span-1 flex justify-center items-center">
<div className="text-center">
<p className="text-6xl font-bold">:</p>
<p className="text-2xl">Period {currentPeriod}</p>
</div>
</div>
<div className="col-span-1">
<div className="bg-gray-900 text-white rounded-lg p-4">
<div className="text-center mb-4">
<h2 className="text-lg font-semibold">{teamBName}</h2>
<p className="text-xs">Score</p>
<p className="text-3xl font-bold">{teamBScore}</p>
</div>
<div className="text-center">
<p className="text-xs">Fouls</p>
<p className="text-3xl font-bold">{teamBFouls}</p>
</div>
</div>
</div>
</div>
</div>
</body>
</div>
</>
)
}
);
};

export default Public
export default Public;

0 comments on commit a859160

Please sign in to comment.