improve WsChatService

This commit is contained in:
Peter Maquiran
2022-01-12 20:21:44 +01:00
parent 4b4b62a71e
commit ddcd3f3e58
2 changed files with 26 additions and 20 deletions
+25 -20
View File
@@ -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)