'use client' import React, { useEffect, useState } from 'react'; import * as zmq from 'jszmq'; interface GameState { game_uuid: string; shape: [number, number]; walls: [number, number][]; food: [number, number][]; bots: [number, number][]; team_names: [string, string]; } export type { GameState }; const ZMQReceiver = ({ url, sendGameState, sendMessage, sendClearPage }: { url: string, sendGameState: (gs: {"__data__": GameState}) => any, sendMessage: (msg: string) => any, sendClearPage: () => any } ) => { const [messages, setMessages] = useState([]); useEffect(() => { console.log('hi'); const socket = zmq.socket('sub'); socket.options.reconnectInterval = 1000; socket.connect(url); socket.subscribe(''); socket.on('message', (message) => { setMessages((prevMessages) => [/*...prevMessages, */message.toString()]); let parsed = JSON.parse(message); console.log(parsed); if (parsed['__action__'] && parsed['__action__'] === 'SPEAK') { sendMessage(parsed['__data__']); } else if (parsed['__action__'] && parsed['__action__'] === 'CLEAR') { sendClearPage(); } else { sendGameState(parsed); } }); return () => { socket.unsubscribe(''); socket.close(); }; }, [url]); return ( ); }; export default ZMQReceiver;