From 053e5a2370e9ae0c54be93238d6dce5956947602 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 09:35:17 +0100 Subject: [PATCH 1/5] improve the way to register --- src/app/models/rochet-chat-cliente-service.ts | 14 ++++ .../socket/rocket-chat-client.service.ts | 71 ++++++++++--------- 2 files changed, 52 insertions(+), 33 deletions(-) create mode 100644 src/app/models/rochet-chat-cliente-service.ts diff --git a/src/app/models/rochet-chat-cliente-service.ts b/src/app/models/rochet-chat-cliente-service.ts new file mode 100644 index 000000000..c680767b7 --- /dev/null +++ b/src/app/models/rochet-chat-cliente-service.ts @@ -0,0 +1,14 @@ +export interface wsCallbacksParams { + type: 'Offline' | 'Online' | 'Open' | 'Onmessage', + funx: Function + options?: { + runOnces?: boolean + } + requestId?: string +} + + +export interface msgQueue { + message: object, + requestId: string +} \ No newline at end of file diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 2a588120d..37a49879b 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -1,11 +1,13 @@ import { Injectable } from '@angular/core'; import { v4 as uuidv4 } from 'uuid' +import { wsCallbacksParams, msgQueue } from 'src/app/models/rochet-chat-cliente-service' class _RocketChatClientService { - connected = false private hasPing = false private firstPingFunx: Function + isLogin = false; + request = [] constructor() {} @@ -25,7 +27,8 @@ class _RocketChatClientService { this.ws.send(connectMessage) - this.ws.registerCallback('Onmessage',(message: any) => { + this.ws.registerCallback({type:'Onmessage',funx:(message: any)=>{ + if(message.msg == "ping") { this.ws.send({msg:"pong"}) if(this.hasPing == false) { @@ -34,7 +37,8 @@ class _RocketChatClientService { this.hasPing = true } } - }) + + }}) } @@ -111,29 +115,30 @@ class _RocketChatClientService { // socket class ================================================================== private socket!: WebSocket; - private url = '' - private callBacks: { - type: 'Offline' | 'Online' | 'Open' | 'Onmessage', - object?: string - funx: Function - }[] = [] - msgQueue : { - message: object, - requestId: string - }[] = [] + private wsUrl = '' + wsMsgQueue : msgQueue[] = [] + private wsCallbacks: {[key: string]: wsCallbacksParams} = {} ws = { - registerCallback:(type: 'Offline' | 'Online' | 'Open' | 'Onmessage', funx: Function, object = '') =>{ - this.callBacks.push({ - type, - funx, - object - }) + connected: false, + registerCallback:(params: wsCallbacksParams) =>{ + + if(!params.requestId) { + params.requestId = uuidv4() + } + + this.wsCallbacks[params.requestId] = { + type: params.type, + funx: params.funx, + options: params.options || {} + } + }, + deleteCallback(){}, connect:(url)=> { - - this.url = url - this.socket = new WebSocket(this.url); + this.ws.connected = false + this.wsUrl = url + this.socket = new WebSocket(this.wsUrl); // bind function this.socket.onopen = this.ws.onopen; this.socket.onmessage = this.ws.onmessage; @@ -141,11 +146,10 @@ class _RocketChatClientService { this.socket.onerror = this.ws.onerror; }, onopen:()=> { - this.connected = true + this.ws.connected = true console.log('================== welcome to socket server =====================') - - this.msgQueue.forEach((item, index, object) => { + this.wsMsgQueue.forEach((item, index, object) => { this.ws.send(item.message, item.requestId); object.splice(index, 1); }) @@ -153,11 +157,11 @@ class _RocketChatClientService { }, send: (message: object, requestId = uuidv4()) => { - if (this.connected == false) { // save data to send when back online + if (this.ws.connected == false) { // save data to send when back online console.log('save msgQueue') - this.msgQueue.push({message, requestId}) + this.wsMsgQueue.push({message, requestId}) } else { - console.log('send rocket chat', message) + // console.log('send rocket chat', message) let messageStr = JSON.stringify(message) this.socket.send(messageStr) } @@ -168,18 +172,19 @@ class _RocketChatClientService { const data = JSON.parse(event.data) console.log('event.data', data) - this.callBacks.forEach((e)=>{ - if(e.type== 'Onmessage') { - e.funx(data) + for (const [key, value] of Object.entries(this.wsCallbacks)) { + if(value.type== 'Onmessage') { + value.funx(data) } - }) + } + }, onclose:(event: any)=> { this.connect(this.firstPingFunx()) - this.connected = false + this.ws.connected = false console.log(`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`); }, From 402e1f8a95e583215568fcc1a502ba8e2ab2909c Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 10:22:17 +0100 Subject: [PATCH 2/5] Fix login --- src/app/home/home.page.ts | 4 ++- .../socket/rocket-chat-client.service.ts | 25 +++++++++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index a56568a49..ae7b96698 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -100,9 +100,11 @@ export class HomePage implements OnInit { this.RocketChatClientService.connect(()=>{ this.RocketChatClientService.login({ - username: 'paulo.pinto@gabinetedigital.local', + username: 'paulo.pinto', + email: 'paulo.pinto@gabinetedigital.local', password: 'tabteste@006' }) + }) // this.RocketChatClientService.send() diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 37a49879b..297111bf3 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -34,6 +34,10 @@ class _RocketChatClientService { if(this.hasPing == false) { // first ping firstPingFunx() + + setTimeout(()=>{ + this.getRooms() + }, 5000) this.hasPing = true } } @@ -51,11 +55,8 @@ class _RocketChatClientService { id: requestId, params: [ { - "user": { "username": user.username }, - "password": { - "digest": user.password, - "algorithm":"sha-256" - } + user: { username: user.username }, + password: user.password } ] } @@ -85,13 +86,21 @@ class _RocketChatClientService { return requestId; } - receive() {} + subtribe() {} joinRoom(){} deleteMessage() {} createRoom() {} getRooms() { + const requestId = uuidv4() + const request = { + "msg": "method", + "method": "rooms/get", + "id": requestId, + "params": [ { "$date": 1480377601 } ] + } + this.ws.send(request, requestId) } @@ -116,10 +125,10 @@ class _RocketChatClientService { // socket class ================================================================== private socket!: WebSocket; private wsUrl = '' - wsMsgQueue : msgQueue[] = [] + private wsMsgQueue : msgQueue[] = [] private wsCallbacks: {[key: string]: wsCallbacksParams} = {} - ws = { + private ws = { connected: false, registerCallback:(params: wsCallbacksParams) =>{ From 9e11d910d490904188002ca9f86801faa12de857 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 10:53:04 +0100 Subject: [PATCH 3/5] Improve login to rocket chat --- src/app/home/home.page.ts | 8 +++++- src/app/models/rochet-chat-cliente-service.ts | 4 +-- .../socket/rocket-chat-client.service.ts | 25 +++++++++++++++++-- 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index ae7b96698..2c514aa4c 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -99,11 +99,17 @@ export class HomePage implements OnInit { private RouteService: RouteService) { this.RocketChatClientService.connect(()=>{ + this.RocketChatClientService.login({ username: 'paulo.pinto', email: 'paulo.pinto@gabinetedigital.local', password: 'tabteste@006' - }) + }).then((message)=>{ + console.log('rocket chat login successfully', message) + }).catch((message)=>{ + console.log('rocket chat login failed', message) + }).finally(()=>{ + }) }) diff --git a/src/app/models/rochet-chat-cliente-service.ts b/src/app/models/rochet-chat-cliente-service.ts index c680767b7..68956c823 100644 --- a/src/app/models/rochet-chat-cliente-service.ts +++ b/src/app/models/rochet-chat-cliente-service.ts @@ -1,9 +1,7 @@ export interface wsCallbacksParams { type: 'Offline' | 'Online' | 'Open' | 'Onmessage', funx: Function - options?: { - runOnces?: boolean - } + runOnces?: boolean requestId?: string } diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 297111bf3..4f348393f 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -47,6 +47,7 @@ class _RocketChatClientService { } login(user) { + const requestId = uuidv4() const loginRequest = { @@ -62,7 +63,22 @@ class _RocketChatClientService { } this.ws.send(loginRequest, requestId) - return requestId + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + if(message.result.id == requestId) { // same request send + if(message.result) { + if(message.result.token) { + resolve(message) + } else { + reject(message) + } + } else { + reject(message) + } + } + }}) + }); + } logout(){} @@ -139,7 +155,7 @@ class _RocketChatClientService { this.wsCallbacks[params.requestId] = { type: params.type, funx: params.funx, - options: params.options || {} + runOnces: params.runOnces } }, @@ -184,7 +200,12 @@ class _RocketChatClientService { for (const [key, value] of Object.entries(this.wsCallbacks)) { if(value.type== 'Onmessage') { value.funx(data) + if(value.runOnces) { + delete this.wsCallbacks[value.requestId || key] + } } + + } }, From f46f954eddd7d99cd4ad9880e542bbb84702c0c7 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 10:54:51 +0100 Subject: [PATCH 4/5] Improve login to rocket chat --- src/app/services/socket/rocket-chat-client.service.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 4f348393f..868c9d413 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -27,17 +27,13 @@ class _RocketChatClientService { this.ws.send(connectMessage) - this.ws.registerCallback({type:'Onmessage',funx:(message: any)=>{ + this.ws.registerCallback({type:'Onmessage',funx:(message: any) => { if(message.msg == "ping") { this.ws.send({msg:"pong"}) if(this.hasPing == false) { // first ping firstPingFunx() - - setTimeout(()=>{ - this.getRooms() - }, 5000) this.hasPing = true } } @@ -68,11 +64,14 @@ class _RocketChatClientService { if(message.result.id == requestId) { // same request send if(message.result) { if(message.result.token) { + this.isLogin = true resolve(message) } else { + this.isLogin = false reject(message) } } else { + this.isLogin = false reject(message) } } From 28a570cfbf4a65ffa2ddb66ecc77712b7bb9ab21 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 11:11:27 +0100 Subject: [PATCH 5/5] add get room --- src/app/home/home.page.ts | 4 +++ .../socket/rocket-chat-client.service.ts | 27 ++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 2c514aa4c..30e63ddf4 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -105,7 +105,11 @@ export class HomePage implements OnInit { email: 'paulo.pinto@gabinetedigital.local', password: 'tabteste@006' }).then((message)=>{ + // alert('login') console.log('rocket chat login successfully', message) + this.RocketChatClientService.getRooms().then((rooms)=>{ + console.log('rooms', rooms) + }) }).catch((message)=>{ console.log('rocket chat login failed', message) }).finally(()=>{ diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 868c9d413..92dc7f48a 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -61,7 +61,8 @@ class _RocketChatClientService { return new Promise((resolve, reject) => { this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ - if(message.result.id == requestId) { // same request send + // console.log(message.result.id, requestId) + if(message.id == requestId) { // same request send if(message.result) { if(message.result.token) { this.isLogin = true @@ -116,13 +117,22 @@ class _RocketChatClientService { "params": [ { "$date": 1480377601 } ] } this.ws.send(request, requestId) + + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + if(message.result.id == requestId) { // same request send + resolve(message) + } + }}) + }); } subscribe() { + const requestId = uuidv4() var subscribeRequest = { "msg": "sub", - "id": "unique-id", + "id": requestId, "name": "stream-notify-room", "params":[ "room-id/event", @@ -130,7 +140,16 @@ class _RocketChatClientService { ] } - //this.ws.send(subscribeRequest); + this.ws.send(subscribeRequest); + + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + if(message.result.id == requestId) { // same request send + resolve(message) + } + }}) + }); + } private disconnect = () => { @@ -185,7 +204,7 @@ class _RocketChatClientService { console.log('save msgQueue') this.wsMsgQueue.push({message, requestId}) } else { - // console.log('send rocket chat', message) + console.log('send rocket chat', message) let messageStr = JSON.stringify(message) this.socket.send(messageStr) }