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
@@ -3,6 +3,7 @@ export interface wsCallbacksParams {
funx: Function funx: Function
runOnces?: boolean runOnces?: boolean
requestId?: string requestId?: string
key?: string
} }
+24 -19
View File
@@ -24,8 +24,18 @@ export class WsChatService {
support: ["1"] support: ["1"]
} }
this.ws.send(connectMessage, 'connect', false) this.ws.send(connectMessage, 'connectMessage', false)
this.ws.send({msg:"pong"},'recoonect', 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() { login() {
@@ -267,19 +277,20 @@ export class WsChatService {
// socket class ================================================================== // socket class ==================================================================
private socket!: WebSocket; private socket!: WebSocket;
private wsUrl = '' private wsMsgQueue : {[key: string]: msgQueue} = {}
private wsMsgQueue : msgQueue[] = []
private wsCallbacks: {[key: string]: wsCallbacksParams} = {} private wsCallbacks: {[key: string]: wsCallbacksParams} = {}
private ws = { private ws = {
connected: false, connected: false,
registerCallback:(params: wsCallbacksParams) => { registerCallback:(params: wsCallbacksParams) => {
if(!params.requestId) { let id = params.requestId || params.key
params.requestId = uuidv4()
if(id) {
id = uuidv4()
} }
this.wsCallbacks[params.requestId] = { this.wsCallbacks[id] = {
type: params.type, type: params.type,
funx: params.funx funx: params.funx
} }
@@ -302,30 +313,24 @@ export class WsChatService {
wsMsgQueue:()=> { wsMsgQueue:()=> {
let RunsQueue = [] let RunsQueue = []
this.wsMsgQueue.forEach((item, index, object) => { for (const [key, item] of Object.entries(this.wsMsgQueue)) {
if(item.loginRequired == true && this.isLogin == true) { if(item.loginRequired == true && this.isLogin == true) {
// console.log('run msgQueue ',index) // console.log('run msgQueue ',index)
this.ws.send(item.message, item.requestId, item.loginRequired); this.ws.send(item.message, item.requestId, item.loginRequired);
RunsQueue.push(item.requestId) delete this.wsMsgQueue[key]
} else if(item.loginRequired == false) { } else if(item.loginRequired == false) {
// console.log('run msgQueue ',index) // console.log('run msgQueue ',index)
this.ws.send(item.message, item.requestId, item.loginRequired); 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) => { send: (message: object, requestId = uuidv4(), loginRequired) => {
if (this.ws.connected == false || loginRequired == true && this.isLogin == false) { // save data to send when back online 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) // 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 { } else {
let messageStr = JSON.stringify(message) let messageStr = JSON.stringify(message)
this.socket.send(messageStr) this.socket.send(messageStr)