import React, { useEffect, useState } from "react"; import { Button, Card, List, Badge, Toast } from "antd-mobile"; import { useWebSocketStore, WebSocketStatus, WebSocketMessage, } from "@/store/module/websocket/websocket"; /** * WebSocket使用示例组件 * 展示如何使用WebSocket store进行消息收发 */ const WebSocketExample: React.FC = () => { const [messageInput, setMessageInput] = useState(""); // 使用WebSocket store const { status, messages, unreadCount, connect, disconnect, sendMessage, sendCommand, clearMessages, markAsRead, reconnect, } = useWebSocketStore(); // 连接状态显示 const getStatusText = () => { switch (status) { case WebSocketStatus.DISCONNECTED: return "未连接"; case WebSocketStatus.CONNECTING: return "连接中..."; case WebSocketStatus.CONNECTED: return "已连接"; case WebSocketStatus.RECONNECTING: return "重连中..."; case WebSocketStatus.ERROR: return "连接错误"; default: return "未知状态"; } }; // 获取状态颜色 const getStatusColor = () => { switch (status) { case WebSocketStatus.CONNECTED: return "success"; case WebSocketStatus.CONNECTING: case WebSocketStatus.RECONNECTING: return "warning"; case WebSocketStatus.ERROR: return "danger"; default: return "default"; } }; // 发送消息 const handleSendMessage = () => { if (!messageInput.trim()) { Toast.show({ content: "请输入消息内容", position: "top" }); return; } sendMessage({ type: "chat", content: { text: messageInput, timestamp: Date.now(), }, sender: "user", receiver: "all", }); setMessageInput(""); }; // 发送命令 const handleSendCommand = (cmdType: string) => { sendCommand(cmdType, { data: "示例数据", timestamp: Date.now(), }); }; // 格式化时间 const formatTime = (timestamp: number) => { return new Date(timestamp).toLocaleTimeString(); }; return (
1. 点击"连接"按钮建立WebSocket连接
2. 连接成功后可以发送消息和命令
3. 收到的消息会显示在消息列表中
4. 页面刷新后会自动重连(如果之前是连接状态)
5. 支持自动重连和错误处理