From 8d136c3fb1a1f0b13c33ca1e6a712d2c5fe4b142 Mon Sep 17 00:00:00 2001 From: Grant Date: Wed, 13 Mar 2024 10:54:10 -0600 Subject: [PATCH] add online user count --- packages/client/src/components/CanvasMeta.tsx | 31 +++++++++++++++++-- packages/client/src/lib/network.ts | 9 +++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/packages/client/src/components/CanvasMeta.tsx b/packages/client/src/components/CanvasMeta.tsx index e8e9e73..b9867aa 100644 --- a/packages/client/src/components/CanvasMeta.tsx +++ b/packages/client/src/components/CanvasMeta.tsx @@ -10,6 +10,7 @@ import { useAppContext } from "../contexts/AppContext"; import { Canvas } from "../lib/canvas"; import { useEffect, useState } from "react"; import { ClientConfig } from "@sc07-canvas/lib/src/net"; +import network from "../lib/network"; const getTimeLeft = (pixels: { available: number }, config: ClientConfig) => { // this implementation matches the server's implementation @@ -40,10 +41,33 @@ const PlaceCountdown = () => { }, [pixels]); return ( - <>{pixels.available + 1 < config.canvas.pixel.maxStack && timeLeft + "s"} + <> + {timeLeft + ? pixels.available + 1 < config.canvas.pixel.maxStack && timeLeft + "s" + : ""} + ); }; +const OnlineCount = () => { + const [online, setOnline] = useState(); + + useEffect(() => { + function handleOnline(count: number) { + setOnline(count); + } + + network.waitFor("online").then(([count]) => setOnline(count)); + network.on("online", handleOnline); + + return () => { + network.off("online", handleOnline); + }; + }, []); + + return <>{typeof online === "number" ? online : "???"}; +}; + export const CanvasMeta = () => { const { canvasPosition, cursorPosition, pixels, config } = useAppContext(); const { isOpen, onOpen, onOpenChange } = useDisclosure(); @@ -74,7 +98,10 @@ export const CanvasMeta = () => { - Users Online: 321 + Users Online:{" "} + + + diff --git a/packages/client/src/lib/network.ts b/packages/client/src/lib/network.ts index 25ac900..8b7ffb5 100644 --- a/packages/client/src/lib/network.ts +++ b/packages/client/src/lib/network.ts @@ -13,6 +13,7 @@ export interface INetworkEvents { canvas: (pixels: string[]) => void; pixels: (data: { available: number }) => void; pixelLastPlaced: (time: number) => void; + online: (count: number) => void; } type SentEventValue = EventEmitter.ArgumentMap< @@ -55,6 +56,10 @@ class Network extends EventEmitter { this._emit("pixelLastPlaced", time); }); + this.socket.on("online", ({ count }) => { + this._emit("online", count); + }); + // this.socket.on("config", (config) => { // Pallete.load(config.pallete); // Canvas.load(config.canvas); @@ -67,10 +72,6 @@ class Network extends EventEmitter { // this.socket.on("canvas", (data: SCanvasPacket) => { // Canvas.handleBatch(data); // }); - - // this.socket.on("online", (data: { count: number }) => { - // this.online_count = data.count; - // }); } private _emit: typeof this.emit = (event, ...args) => { -- GitLab