diff --git a/src/app/models/rochet-chat-cliente-service.ts b/src/app/models/rochet-chat-cliente-service.ts index 7cf5e2949..147ee54cb 100644 --- a/src/app/models/rochet-chat-cliente-service.ts +++ b/src/app/models/rochet-chat-cliente-service.ts @@ -3,6 +3,7 @@ export interface wsCallbacksParams { funx: Function runOnces?: boolean requestId?: string + key?: string } diff --git a/src/app/services/chat/ws-chat.service.ts b/src/app/services/chat/ws-chat.service.ts index 3a71da5a0..48918ce1e 100644 --- a/src/app/services/chat/ws-chat.service.ts +++ b/src/app/services/chat/ws-chat.service.ts @@ -24,8 +24,18 @@ export class WsChatService { support: ["1"] } - this.ws.send(connectMessage, 'connect', false) - this.ws.send({msg:"pong"},'recoonect', false) + this.ws.send(connectMessage, 'connectMessage', false) + this.ws.send({msg:"pong"}, 'pong', false) + + this.ws.registerCallback({ + type:'Onmessage', + key: this.constructor.name+'ping/pong', + funx:(message: any) => { + if(message.msg == "ping") { + this.ws.send({msg:"pong"},'reconnect', false) + } + }}) + } login() { @@ -266,20 +276,21 @@ export class WsChatService { } // socket class ================================================================== - private socket!: WebSocket; - private wsUrl = '' - private wsMsgQueue : msgQueue[] = [] + private socket!: WebSocket; + private wsMsgQueue : {[key: string]: msgQueue} = {} private wsCallbacks: {[key: string]: wsCallbacksParams} = {} private ws = { connected: false, registerCallback:(params: wsCallbacksParams) => { - if(!params.requestId) { - params.requestId = uuidv4() + let id = params.requestId || params.key + + if(id) { + id = uuidv4() } - this.wsCallbacks[params.requestId] = { + this.wsCallbacks[id] = { type: params.type, funx: params.funx } @@ -302,30 +313,24 @@ export class WsChatService { wsMsgQueue:()=> { let RunsQueue = [] - this.wsMsgQueue.forEach((item, index, object) => { + for (const [key, item] of Object.entries(this.wsMsgQueue)) { + if(item.loginRequired == true && this.isLogin == true) { // console.log('run msgQueue ',index) this.ws.send(item.message, item.requestId, item.loginRequired); - RunsQueue.push(item.requestId) + delete this.wsMsgQueue[key] } else if(item.loginRequired == false) { // console.log('run msgQueue ',index) this.ws.send(item.message, item.requestId, item.loginRequired); - RunsQueue.push(item.requestId) + delete this.wsMsgQueue[key] } - - }) - - // remove wsMsgQueue - RunsQueue.forEach((requestId)=>{ - this.wsMsgQueue = this.wsMsgQueue.filter(e=> e.requestId != requestId) - }) - + } }, send: (message: object, requestId = uuidv4(), loginRequired) => { if (this.ws.connected == false || loginRequired == true && this.isLogin == false) { // save data to send when back online // console.log('save msgQueue this.ws.connected == false || loginRequired == true && this.isLogin == false',this.ws.connected, loginRequired, this.isLogin) - this.wsMsgQueue.push({message, requestId, loginRequired}) + this.wsMsgQueue[requestId] = {message, requestId, loginRequired} } else { let messageStr = JSON.stringify(message) this.socket.send(messageStr)