feat: chart history on browser

This commit is contained in:
hamster1963
2024-12-25 11:03:11 +08:00
parent 1a1ceb4665
commit 112607740a
5 changed files with 399 additions and 132 deletions

View File

@@ -3,9 +3,11 @@ import { createContext } from "react"
export interface WebSocketContextType {
lastMessage: { data: string } | null
connected: boolean
messageHistory: { data: string }[]
}
export const WebSocketContext = createContext<WebSocketContextType>({
lastMessage: null,
connected: false,
messageHistory: [],
})

View File

View File

@@ -9,6 +9,7 @@ interface WebSocketProviderProps {
export const WebSocketProvider: React.FC<WebSocketProviderProps> = ({ url, children }) => {
const [lastMessage, setLastMessage] = useState<{ data: string } | null>(null)
const [messageHistory, setMessageHistory] = useState<{ data: string }[]>([]) // 新增历史消息状态
const [connected, setConnected] = useState(false)
const ws = useRef<WebSocket | null>(null)
const reconnectTimeout = useRef<NodeJS.Timeout>(null)
@@ -42,7 +43,13 @@ export const WebSocketProvider: React.FC<WebSocketProviderProps> = ({ url, child
}
ws.current.onmessage = (event) => {
setLastMessage({ data: event.data })
const newMessage = { data: event.data }
setLastMessage(newMessage)
// 更新历史消息保持最新的30条记录
setMessageHistory((prev) => {
const updated = [newMessage, ...prev]
return updated.slice(0, 30)
})
}
ws.current.onerror = (error) => {
@@ -69,6 +76,7 @@ export const WebSocketProvider: React.FC<WebSocketProviderProps> = ({ url, child
const contextValue: WebSocketContextType = {
lastMessage,
connected,
messageHistory, // 添加到 context value
}
return <WebSocketContext.Provider value={contextValue}>{children}</WebSocketContext.Provider>