Real-time Updates
WebSocket Integration
// src/websocket.tsx
// Type definition for WebSocket context
// Used to share WebSocket instance across components
type WebsocketContextType = WebSocket;// src/websocket.tsx
// React context for WebSocket instance
// Provides WebSocket access to child components
export const WebsocketContext = createContext<WebsocketContextType | null>(
null
);// src/websocket.tsx
// WebSocket Provider Component
// Manages WebSocket connection and provides it to child components
const WebsocketProvider: FC<{ children: ReactNode }> = ({ children }) => {
const wallet = useAppSelector(selectWallet);
const url = `${wsUrl}`;
const ws = new WebSocket(url);
const dispatch = useAppDispatch();
const [reconnectToggle, setReconnectToggle] = useState<boolean>(false);
// Handle successful connection
ws.addEventListener("open", (event) => {
if (wallet !== null) {
sendWalletConnectWsNotif(ws, wallet.address);
}
// Set up heartbeat mechanism
const timer = setInterval(function () {
if (ws.readyState === WebSocket.OPEN) {
ws.send("ping");
} else {
clearInterval(timer);
}
}, 30000);
});
// Handle connection closure
ws.addEventListener("close", (event) => {
setTimeout(function () {
setReconnectToggle(!reconnectToggle);
}, 5000);
});
// Handle connection errors
ws.addEventListener("error", (event) => {
setTimeout(function () {
setReconnectToggle(!reconnectToggle);
}, 5000);
});
// Handle incoming messages
ws.addEventListener("message", (event) => {
const data = event.data;
if (data === "pong") {
return;
}
const o = JSON.parse(data);
if (!isJsonRpcNotif("RewardDistsView", isRewardAccounts)(o)) {
console.error(`WebsocketMessage: not a valid json rpc message: ${data}`);
return;
}
if (o.params !== undefined) {
dispatch(setRewardAccounts(o.params));
}
});
return (
<WebsocketContext.Provider value={ws}>{children}</WebsocketContext.Provider>
);
};Key features of the Real-time Updates system include:
Last updated