import type { LightNode } from "@waku/interfaces"; import ChatList from "./ChatList"; import MessageInput from "./MessageInput"; import { useWaku, useContentPair, useLightPush } from "@waku/react"; import { ChatMessage } from "./chat_message"; import { useNodePeers, usePeers } from "./hooks"; import type { RoomProps } from "./types"; export default function Room(props: RoomProps) { const { node } = useWaku(); const { encoder } = useContentPair(); const { push: onPush } = useLightPush({ node, encoder }); const { connectedBootstrapPeers, connectedPeerExchangePeers, discoveredBootstrapPeers, discoveredPeerExchangePeers, } = useNodePeers(node); const { allConnected, storePeers, filterPeers, lightPushPeers } = usePeers({ node, }); const onSend = async (text: string) => { if (!onPush || !text) { return; } if (text.startsWith("/")) { props.commandHandler(text); } else { const timestamp = new Date(); const chatMessage = ChatMessage.fromUtf8String( timestamp, props.nick, text ); const payload = chatMessage.encode(); await onPush({ payload, timestamp }); } }; const allConnectedLength = orZero(allConnected?.length); const lightPushPeersLength = orZero(lightPushPeers?.length); const filterPeersLength = orZero(filterPeers?.length); const storePeersLength = orZero(storePeers?.length); return (
Peers Connected: {allConnectedLength}
Store: {storePeersLength}
Filter: {filterPeersLength}
Light Push: {lightPushPeersLength}
Waku v2 Web Chat
Peers Discovered:{" "} {discoveredBootstrapPeers.size + discoveredPeerExchangePeers.size}
Bootstrap: {discoveredBootstrapPeers.size} Peer Exchange:{" "} {discoveredPeerExchangePeers.size}
Peers Connected:{" "} {connectedBootstrapPeers.size + connectedPeerExchangePeers.size}
Bootstrap: {connectedBootstrapPeers.size} Peer Exchange:{" "} {connectedPeerExchangePeers.size}
); } function orZero(value: undefined | number): number { return value || 0; }