'use client' import React, { useEffect, useState } from 'react'; import { conv_game_state } from './pelita_msg'; import type { RootMsg, GameState } from './pelita_msg'; import * as zmq from 'jszmq'; const ZMQReceiver = ({ url, sendGameState, sendMessage, sendClearPage }: { url: string, sendGameState: (gs: 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) as RootMsg; console.log(parsed); if (parsed.__action__ === 'SPEAK') { // Replacing all ANSI code here sendMessage(parsed['__data__'].replaceAll(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '')); } else if (parsed.__action__ === 'CLEAR') { sendClearPage(); } else if (parsed.__action__ === 'observe') { let conv = conv_game_state(parsed.__data__); sendGameState(conv); } else if (parsed.__action__ === 'INIT') { sendClearPage(); } }); return () => { socket.unsubscribe(''); socket.close(); }; }, [url, sendGameState, sendClearPage, sendMessage]); return (<> // ); }; export default ZMQReceiver;