Browse Source

优化socket的创建及连接

dev
zhangjiming 7 months ago
parent
commit
4e10817d35
  1. 55
      src/websocket/socket.ts

55
src/websocket/socket.ts

@ -47,6 +47,22 @@ interface AppEventMessage extends BaseMessage {
data: EventType data: EventType
timestamp: number timestamp: number
} }
export type MsgLevel = 'Info' | 'Warn' | 'Error'
export type MsgItem = {
messageLevel: MsgLevel
message: string
}
export interface FooterMessageState extends BaseMessage {
type: 'MessageBoxState'
messageType: 'Report'
dataType: 'MessageBoxState'
data: {
topMessage: MsgItem
messageBoxList: MsgItem[]
}
}
type WorkState = 'IDLE' | 'WORKING' | 'PAUSE' type WorkState = 'IDLE' | 'WORKING' | 'PAUSE'
// 设备工作状态消息 // 设备工作状态消息
interface DeviceWorkStateMessage extends BaseMessage { interface DeviceWorkStateMessage extends BaseMessage {
@ -210,8 +226,7 @@ interface ConsumableGroupBase {
color: string color: string
num: number num: number
isInstall: boolean isInstall: boolean
reserveNum: number,
reserveNum: number
} }
export interface ReactionPlateGroup extends Partial<ConsumableGroupBase> {} export interface ReactionPlateGroup extends Partial<ConsumableGroupBase> {}
@ -237,7 +252,7 @@ interface ConsumablesStateMessage extends BaseMessage {
tips: TipInfo[] tips: TipInfo[]
reactionPlateGroup: ReactionPlateGroup[] reactionPlateGroup: ReactionPlateGroup[]
littBottleGroup: LittleBottleGroup[] littBottleGroup: LittleBottleGroup[]
larBottleGroup: LargeBottleGroup[],
larBottleGroup: LargeBottleGroup[]
} }
timestamp: number timestamp: number
} }
@ -251,6 +266,7 @@ type WebSocketMessage =
| SensorStateMessage | SensorStateMessage
| IncubationPlateStateMessage | IncubationPlateStateMessage
| AppEventMessage | AppEventMessage
| FooterMessageState
| ConsumablesStateMessage | ConsumablesStateMessage
// 消息处理器类型 // 消息处理器类型
@ -299,13 +315,12 @@ class WebSocketClient {
private handleMessage(message: WebSocketMessage): void { private handleMessage(message: WebSocketMessage): void {
const handlers = this.messageHandlers.get(message.dataType) const handlers = this.messageHandlers.get(message.dataType)
if (!handlers) { if (!handlers) {
if (message.dataType == 'AppEvent') {
console.log(
'🚀 ~ WebSocketClient ~ handleMessage ~ handlers is undefined for message type:',
message.dataType,
)
}
// if (message.dataType === 'MessageBoxState') {
// console.log(
// '🚀 ~ WebSocketClient ~ handleMessage ~ handlers is undefined for message type:',
// message.dataType,
// )
// }
return return
} }
handlers.forEach((handler) => { handlers.forEach((handler) => {
@ -320,8 +335,14 @@ class WebSocketClient {
// 连接 WebSocket // 连接 WebSocket
connect(): void { connect(): void {
try { try {
this.ws = new WebSocket(this.url)
this.bindEvents()
// WebSocket.CONNECTING (0) WebSocket.OPEN (1)
if (this.ws && this.ws.readyState <= 1) {
// 已连接
console.log(`${this.url} 正在连接或已连接,无需重复连接`)
} else {
this.ws = new WebSocket(this.url)
this.bindEvents()
}
} catch (error) { } catch (error) {
console.error('WebSocket 连接失败:', error) console.error('WebSocket 连接失败:', error)
this.reconnect() this.reconnect()
@ -343,7 +364,6 @@ class WebSocketClient {
try { try {
const data = JSON.parse(event.data) const data = JSON.parse(event.data)
// console.log('🚀 ~ WebSocketClient ~ bindEvents ~ data:', data) // console.log('🚀 ~ WebSocketClient ~ bindEvents ~ data:', data)
this.handleMessage(data) this.handleMessage(data)
} catch (error) { } catch (error) {
console.error('消息解析错误:', error) console.error('消息解析错误:', error)
@ -385,6 +405,7 @@ class WebSocketClient {
} }
} }
const urlSocketMap = new Map()
// 创建单例 // 创建单例
// let wsInstance: WebSocketClient | null = null // let wsInstance: WebSocketClient | null = null
@ -411,7 +432,13 @@ export const createWebSocket = (url: string): WebSocketClient => {
// if (!wsInstance) { // if (!wsInstance) {
// wsInstance = new WebSocketClient(url) // wsInstance = new WebSocketClient(url)
// } // }
return new WebSocketClient(url)
if (urlSocketMap.has(url)) {
return urlSocketMap.get(url)
} else {
const client = new WebSocketClient(url)
urlSocketMap.set(url, client)
return client
}
} }
// 使用示例: // 使用示例:

Loading…
Cancel
Save