This commit is contained in:
2025-08-03 21:49:49 +05:30
parent 40b8f367fe
commit f618a02ce3
4 changed files with 130 additions and 71 deletions

View File

@@ -10,23 +10,48 @@ export function usePartyKit() {
const { user } = useUser();
const [gameState, setGameState] = useState<GameState | null>(null);
const [socket, setSocket] = useState<PartySocket | null>(null);
// Generate a persistent guest ID if the user is not signed in
const [guestId] = useState(() => {
let storedGuestId = localStorage.getItem('bozo_guest_id');
if (!storedGuestId) {
storedGuestId = `guest_${Math.random().toString(36).substring(2, 15)}`;
localStorage.setItem('bozo_guest_id', storedGuestId);
}
return storedGuestId;
});
const [guestName] = useState(() => {
let storedGuestName = localStorage.getItem('bozo_guest_name');
if (!storedGuestName) {
storedGuestName = `Guest${Math.floor(Math.random() * 10000)}`;
localStorage.setItem('bozo_guest_name', storedGuestName);
}
return storedGuestName;
});
useEffect(() => {
if (!isLoaded || !isSignedIn || !user) return;
// Always attempt to connect the socket
const ws = new PartySocket({
host: PARTY_HOST,
room: 'bozo-clicker'
});
ws.onopen = async () => {
const token = await getToken();
ws.send(JSON.stringify({
type: 'user-join',
userId: user.id,
userName: user.username || user.fullName || user.emailAddresses[0].emailAddress,
token
}));
if (isLoaded && isSignedIn && user) {
const token = await getToken();
ws.send(JSON.stringify({
type: 'user-join',
userId: user.id,
userName: user.username || user.fullName || user.emailAddresses[0].emailAddress,
token
}));
} else {
// If not signed in, send a generic user-join message for guest
ws.send(JSON.stringify({
type: 'user-join',
userId: guestId,
userName: guestName
}));
}
};
ws.onmessage = (event) => {
@@ -41,7 +66,7 @@ export function usePartyKit() {
return () => {
ws.close();
};
}, [isLoaded, isSignedIn, user, getToken]);
}, [isLoaded, guestId, guestName]); // Removed isSignedIn, user, getToken from dependencies
const sendClick = useCallback(async () => {
if (socket && isSignedIn && user) {
@@ -67,7 +92,7 @@ export function usePartyKit() {
}
}, [socket, isSignedIn, user, getToken]);
const sendMascotClickBonus = useCallback(async (multiplierBonus: number) => { // Renamed function
const sendMascotClickBonus = useCallback(async (multiplierBonus: number) => {
if (socket && isSignedIn && user) {
const token = await getToken();
socket.send(JSON.stringify({
@@ -80,12 +105,17 @@ export function usePartyKit() {
}
}, [socket, isSignedIn, user, getToken]);
// Determine the userId and userName to expose based on sign-in status
// Only expose Clerk user ID/name if signed in, otherwise undefined
const currentUserId = isSignedIn && user ? user.id : undefined;
const currentUserName = isSignedIn && user ? (user.username || user.fullName || user.emailAddresses[0].emailAddress) : undefined;
return {
gameState,
sendClick,
purchaseUpgrade,
sendMascotClickBonus, // Export the renamed function
userId: user?.id,
userName: user?.username || user?.fullName || user?.emailAddresses[0]?.emailAddress
sendMascotClickBonus,
userId: currentUserId,
userName: currentUserName
};
}