From b5046123deb03a09d356ae8cb55bbe47b19d3682 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 11:28:50 +0100 Subject: [PATCH 01/17] add subscribe --- src/app/services/socket/rocket-chat-client.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 92dc7f48a..49d15ba59 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -62,7 +62,7 @@ class _RocketChatClientService { return new Promise((resolve, reject) => { this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ // console.log(message.result.id, requestId) - if(message.id == requestId) { // same request send + if(message.id == requestId || message.result.id == requestId) { // same request send if(message.result) { if(message.result.token) { this.isLogin = true @@ -120,7 +120,7 @@ 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 + if(message.id == requestId || message.result.id == requestId) { // same request send resolve(message) } }}) @@ -141,7 +141,7 @@ class _RocketChatClientService { } 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 From 7a28f2e3149f3c5113d433523f1635f66e1addc1 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 11:29:02 +0100 Subject: [PATCH 02/17] add subscribe --- src/app/home/home.page.ts | 10 +++++++++- src/app/services/socket/rocket-chat-client.service.ts | 6 +++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 30e63ddf4..9269b59ff 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -107,8 +107,16 @@ export class HomePage implements OnInit { }).then((message)=>{ // alert('login') console.log('rocket chat login successfully', message) - this.RocketChatClientService.getRooms().then((rooms)=>{ + this.RocketChatClientService.getRooms().then((rooms: any)=>{ console.log('rooms', rooms) + + rooms.result.update.forEach((room:any) => { + console.log('room', room) + this.RocketChatClientService.subscribe(room.lastMessage.rid).then((subscription)=>{ + console.log('subscription', subscription) + }) + }); + }) }).catch((message)=>{ console.log('rocket chat login failed', message) diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 49d15ba59..4b0a1f021 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -128,19 +128,19 @@ class _RocketChatClientService { } - subscribe() { + subscribe(roomId : string) { const requestId = uuidv4() var subscribeRequest = { "msg": "sub", "id": requestId, "name": "stream-notify-room", "params":[ - "room-id/event", + `${roomId}/event`, false ] } - this.ws.send(subscribeRequest); + this.ws.send(subscribeRequest); return new Promise((resolve, reject) => { this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ From 1dade29c50ae6eb89985ce484df1c03a68f64b53 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 11:40:34 +0100 Subject: [PATCH 03/17] add send method --- .../socket/rocket-chat-client.service.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 4b0a1f021..efee7c950 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -83,7 +83,7 @@ class _RocketChatClientService { logout(){} - send(roomId, message, option) { + send(roomId, message) { const requestId = uuidv4() var request = { @@ -91,18 +91,23 @@ class _RocketChatClientService { method: "sendMessage", id: requestId, params: [{ - _id: "message-id" || uuidv4(), - rid: "room-id" || roomId, - msg: "Hello World!" || message + _id: uuidv4(), + rid: roomId, + msg: message }] } - // this.ws.send(request, requestId); + this.ws.send(request, requestId); - return requestId; + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + if(message.id == requestId || message.result.id == requestId) { // same request send + resolve(message) + } + }}) + }); } - subtribe() {} joinRoom(){} deleteMessage() {} createRoom() {} From c398e3fa245e3ba7799fd22a39f458a46c554e02 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 12:02:24 +0100 Subject: [PATCH 04/17] adding Request Queue --- .../socket/rocket-chat-client.service.ts | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index efee7c950..060f13333 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -7,11 +7,27 @@ class _RocketChatClientService { private hasPing = false private firstPingFunx: Function isLogin = false; - request = [] + requestQueue = [] constructor() {} private returns() {} + + private attemptRequestQueue(arg, option) { + + const conditionToSend = this.ws.connected == true && this.isLogin == true + + if(conditionToSend) { + this.requestQueue.push({ + arg: arg, + status: { + isLogin: this.isLogin, + isConnected: this.ws.connected + } + }) + } + return conditionToSend + } connect(firstPingFunx: Function) { this.hasPing = false @@ -45,6 +61,7 @@ class _RocketChatClientService { login(user) { const requestId = uuidv4() + this.isLogin = false const loginRequest = { msg: "method", @@ -66,6 +83,7 @@ class _RocketChatClientService { if(message.result) { if(message.result.token) { this.isLogin = true + this.ws.wsMsgQueue() resolve(message) } else { this.isLogin = false @@ -84,6 +102,10 @@ class _RocketChatClientService { logout(){} send(roomId, message) { + + const conditions = this.attemptRequestQueue({...roomId, message}, {methodName:'send'}) + if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } + const requestId = uuidv4() var request = { @@ -134,6 +156,10 @@ class _RocketChatClientService { subscribe(roomId : string) { + + const conditions = this.attemptRequestQueue({roomId},{methodName: 'subscribe'}) + if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } + const requestId = uuidv4() var subscribeRequest = { "msg": "sub", @@ -196,12 +222,16 @@ class _RocketChatClientService { onopen:()=> { this.ws.connected = true console.log('================== welcome to socket server =====================') - this.wsMsgQueue.forEach((item, index, object) => { this.ws.send(item.message, item.requestId); object.splice(index, 1); }) - + }, + wsMsgQueue:()=> { + // this.wsMsgQueue.forEach((item, index, object) => { + // this.ws.send(item.message, item.requestId); + // object.splice(index, 1); + // }) }, send: (message: object, requestId = uuidv4()) => { From 77a8bfffa1fda7d78bc8cb2e91595d7742373d88 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 12:15:27 +0100 Subject: [PATCH 05/17] send message programmatically --- src/app/home/home.page.ts | 5 +++++ src/app/services/socket/rocket-chat-client.service.ts | 3 +++ 2 files changed, 8 insertions(+) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 9269b59ff..a7a584434 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -118,6 +118,11 @@ export class HomePage implements OnInit { }); }) + + + //send message // roomId // Message + + this.RocketChatClientService.send('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', 'Mensagem enviada programaticamente.'+ new Date().toISOString()) }).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 060f13333..e4cfd0c02 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -29,6 +29,8 @@ class _RocketChatClientService { return conditionToSend } + private runRequestQueue(){} + connect(firstPingFunx: Function) { this.hasPing = false this.firstPingFunx = firstPingFunx @@ -83,6 +85,7 @@ class _RocketChatClientService { if(message.result) { if(message.result.token) { this.isLogin = true + this.runRequestQueue() this.ws.wsMsgQueue() resolve(message) } else { From f85ea7e2bc40c311c9215ae794516c74afaebca5 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 12:23:01 +0100 Subject: [PATCH 06/17] improve console.log --- src/app/services/socket/rocket-chat-client.service.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index e4cfd0c02..d25205eb1 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -138,6 +138,9 @@ class _RocketChatClientService { createRoom() {} getRooms() { + const conditions = this.attemptRequestQueue({},{methodName: 'getRooms'}) + if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } + const requestId = uuidv4() const request = { @@ -242,7 +245,7 @@ class _RocketChatClientService { console.log('save msgQueue') this.wsMsgQueue.push({message, requestId}) } else { - console.log('send rocket chat', message) + console.log('send to rocket chat', message) let messageStr = JSON.stringify(message) this.socket.send(messageStr) } From d4470e0b80b1f36e4b686b172644f45e5ca98221 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 12:59:25 +0100 Subject: [PATCH 07/17] add method streamNotifyRoom --- .../socket/rocket-chat-client.service.ts | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index d25205eb1..bc404caa1 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -167,6 +167,7 @@ class _RocketChatClientService { if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } const requestId = uuidv4() + var subscribeRequest = { "msg": "sub", "id": requestId, @@ -189,6 +190,35 @@ class _RocketChatClientService { } + streamNotifyRoom(roomId : string) { + const conditions = this.attemptRequestQueue({roomId},{methodName: 'subscribe'}) + if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } + + const requestId = uuidv4() + + let streamNotifyObj = { + "msg": "method", + "method": "stream-notify-room", + "id": requestId, + "params": [ + `null/typing`, + "paulo.pinto", + true + ] + }; + + this.ws.send(streamNotifyObj, requestId) + + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + if(message.id == requestId || message.result.id == requestId) { // same request send + resolve('') + } + }}) + }); + + } + private disconnect = () => { } From b82239741b9bf79634fadca082fad13f0ed58642 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 13:31:15 +0100 Subject: [PATCH 08/17] fix --- src/app/home/home.page.ts | 4 ++-- src/app/services/chat/chat.service.spec.ts | 16 ++++++++++++++++ src/app/services/chat/chat.service.ts | 9 +++++++++ src/app/services/chat/room.service.spec.ts | 16 ++++++++++++++++ src/app/services/chat/room.service.ts | 9 +++++++++ .../socket/rocket-chat-client.service.ts | 7 +++++-- 6 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 src/app/services/chat/chat.service.spec.ts create mode 100644 src/app/services/chat/chat.service.ts create mode 100644 src/app/services/chat/room.service.spec.ts create mode 100644 src/app/services/chat/room.service.ts diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index a7a584434..108afe3d4 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -108,10 +108,10 @@ export class HomePage implements OnInit { // alert('login') console.log('rocket chat login successfully', message) this.RocketChatClientService.getRooms().then((rooms: any)=>{ - console.log('rooms', rooms) + // console.log('rooms', rooms) rooms.result.update.forEach((room:any) => { - console.log('room', room) + // console.log('room', room) this.RocketChatClientService.subscribe(room.lastMessage.rid).then((subscription)=>{ console.log('subscription', subscription) }) diff --git a/src/app/services/chat/chat.service.spec.ts b/src/app/services/chat/chat.service.spec.ts new file mode 100644 index 000000000..4d8abdfc0 --- /dev/null +++ b/src/app/services/chat/chat.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ChatService } from './chat.service'; + +describe('ChatService', () => { + let service: ChatService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ChatService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/chat/chat.service.ts b/src/app/services/chat/chat.service.ts new file mode 100644 index 000000000..0d00005d1 --- /dev/null +++ b/src/app/services/chat/chat.service.ts @@ -0,0 +1,9 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class ChatService { + + constructor() { } +} diff --git a/src/app/services/chat/room.service.spec.ts b/src/app/services/chat/room.service.spec.ts new file mode 100644 index 000000000..34729ebbf --- /dev/null +++ b/src/app/services/chat/room.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { RoomService } from './room.service'; + +describe('RoomService', () => { + let service: RoomService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(RoomService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/chat/room.service.ts b/src/app/services/chat/room.service.ts new file mode 100644 index 000000000..7bfb8d36e --- /dev/null +++ b/src/app/services/chat/room.service.ts @@ -0,0 +1,9 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class RoomService { + + constructor() { } +} diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index bc404caa1..83c641e14 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -2,6 +2,9 @@ import { Injectable } from '@angular/core'; import { v4 as uuidv4 } from 'uuid' import { wsCallbacksParams, msgQueue } from 'src/app/models/rochet-chat-cliente-service' +/** + * Use this class to interact with rocketchat realtime API + */ class _RocketChatClientService { private hasPing = false @@ -102,7 +105,7 @@ class _RocketChatClientService { } - logout(){} + logout() {} send(roomId, message) { @@ -182,7 +185,7 @@ 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 + if(message.msg == 'ready' || message.subs[0] == requestId) { // same request send resolve(message) } }}) From d6605c519cbbbc147455a8d90fcae5fee4c690b7 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 13:37:22 +0100 Subject: [PATCH 09/17] improve --- src/app/home/home.page.ts | 8 ++++++-- src/app/services/socket/rocket-chat-client.service.ts | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 108afe3d4..696add888 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -117,11 +117,15 @@ export class HomePage implements OnInit { }) }); + }) - + + this.RocketChatClientService.subscribe('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM').then((subscription)=>{ + console.log(subscription) + }) + //send message // roomId // Message - this.RocketChatClientService.send('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', 'Mensagem enviada programaticamente.'+ new Date().toISOString()) }).catch((message)=>{ console.log('rocket chat login failed', message) diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 83c641e14..a79172adb 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -3,7 +3,7 @@ import { v4 as uuidv4 } from 'uuid' import { wsCallbacksParams, msgQueue } from 'src/app/models/rochet-chat-cliente-service' /** - * Use this class to interact with rocketchat realtime API + * Use this class to interact with rocketChat realtime API */ class _RocketChatClientService { From 316803e9e0dc54159f61512e4efe08f5cf3c8aaa Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 15:56:11 +0100 Subject: [PATCH 10/17] improve --- src/app/home/home.page.ts | 22 +++++--- .../socket/rocket-chat-client.service.ts | 55 +++++++++++++++++-- 2 files changed, 64 insertions(+), 13 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 696add888..823028df0 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -104,7 +104,7 @@ export class HomePage implements OnInit { username: 'paulo.pinto', email: 'paulo.pinto@gabinetedigital.local', password: 'tabteste@006' - }).then((message)=>{ + }).then((message) => { // alert('login') console.log('rocket chat login successfully', message) this.RocketChatClientService.getRooms().then((rooms: any)=>{ @@ -116,17 +116,21 @@ export class HomePage implements OnInit { console.log('subscription', subscription) }) }); + }); + this.RocketChatClientService.receiveLiveMessageFromRoom( + 'fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', + this.constructor.name, + (Chatmessage)=>{ + console.log('chat', Chatmessage) + } + ) - }) + window['jj'] = ()=>{ + //send message // roomId // Message + this.RocketChatClientService.send('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', 'Mensagem enviada programaticamente.'+ new Date().toISOString()) + } - - this.RocketChatClientService.subscribe('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM').then((subscription)=>{ - console.log(subscription) - }) - - //send message // roomId // Message - this.RocketChatClientService.send('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', 'Mensagem enviada programaticamente.'+ new Date().toISOString()) }).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 a79172adb..a3b0ebfa7 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -193,6 +193,57 @@ class _RocketChatClientService { } + /** + * @param roomId + * @param key + * @param funx + */ + receiveLiveMessageFromRoom(roomId, key, funx: Function) { + + this.ws.registerCallback({ + type:'Onmessage', + requestId: key, + funx:(message)=>{ + if(message.msg =='result') { + if(message.result.msg) { + if(message.result.rid == roomId) { + funx(message) + } + } + } + } + }) + + } + + streamRoomMessages(roomId : string) { + + const conditions = this.attemptRequestQueue({roomId},{methodName: 'subscribe'}) + if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } + + const requestId = uuidv4() + + const request = { + "msg": "sub", + "id": requestId, + "name": "stream-room-messages", + "params":[ + `${roomId}/event`, + false + ] + } + + this.ws.send(request); + + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + if(message.msg == 'ready' || message.subs[0] == requestId) { // same request send + resolve(message) + } + }}) + }); + } + streamNotifyRoom(roomId : string) { const conditions = this.attemptRequestQueue({roomId},{methodName: 'subscribe'}) if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } @@ -221,10 +272,6 @@ class _RocketChatClientService { }); } - - private disconnect = () => { - - } // socket class ================================================================== private socket!: WebSocket; From cb5cbfab69beadbeb17ac9ae3d7a22a24f3f26d5 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 17:52:49 +0100 Subject: [PATCH 11/17] add loadHistory method --- src/app/home/home.page.ts | 7 +-- .../socket/rocket-chat-client.service.ts | 43 ++++++++++++++++--- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 823028df0..974b5aef7 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -17,7 +17,6 @@ import { File } from '@ionic-native/file/ngx'; /* import { WebNotificationPopupService } from '../services/notification/web-notification-popup.service'; */ import { DocumentCounterService } from '../services/worker/document-counter.service'; import { PermissionService } from '../services/worker/permission.service'; -import { Network } from '@ionic-native/network/ngx'; import { BackgroundService } from 'src/app/services/background.service'; import { OfflineManagerService } from 'src/app/services/offline-manager.service'; import { Storage } from '@ionic/storage'; @@ -30,7 +29,6 @@ import { RouteService } from 'src/app/services/route.service'; import { RocketChatClientService } from 'src/app/services/socket/rocket-chat-client.service'; import { environment } from 'src/environments/environment'; import { v4 as uuidv4 } from 'uuid' -import { RealTimeAPI } from "rocket.chat.realtime.api.rxjs"; @Component({ selector: 'app-home', @@ -74,8 +72,6 @@ export class HomePage implements OnInit { status: string = ""; audioName: string = ""; - RocketChatClientService = RocketChatClientService - constructor( private router: Router, public modalCtrl: AlertController, @@ -96,7 +92,8 @@ export class HomePage implements OnInit { private processservice: ProcessesService, private screenOrientation: ScreenOrientation, private sqliteservice: SqliteService, - private RouteService: RouteService) { + private RouteService: RouteService, + private RocketChatClientService: RocketChatClientService) { this.RocketChatClientService.connect(()=>{ diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index a3b0ebfa7..85a13a33c 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -5,7 +5,10 @@ import { wsCallbacksParams, msgQueue } from 'src/app/models/rochet-chat-cliente- /** * Use this class to interact with rocketChat realtime API */ -class _RocketChatClientService { +@Injectable({ + providedIn: 'root' +}) +export class RocketChatClientService { private hasPing = false private firstPingFunx: Function @@ -163,6 +166,37 @@ class _RocketChatClientService { }); } + loadHistory(roomId, limit: number = 50) { + const conditions = this.attemptRequestQueue({...roomId, limit}, {methodName:'loadHistory'}) + if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } + + const requestId = uuidv4() + + const request = { + msg: "method", + method: "loadHistory", + id: requestId, + params: [ + roomId, + null, + limit, + { + "$date": 1480377601 + } + ] + } + + this.ws.send(request, requestId) + + + // return new Promise((resolve, reject) => { + // this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + // if(message.id == requestId || message.result.id == requestId) { // same request send + // resolve(message) + // } + // }}) + // }); + } subscribe(roomId : string) { @@ -281,7 +315,7 @@ class _RocketChatClientService { private ws = { connected: false, - registerCallback:(params: wsCallbacksParams) =>{ + registerCallback:(params: wsCallbacksParams) => { if(!params.requestId) { params.requestId = uuidv4() @@ -363,7 +397,4 @@ class _RocketChatClientService { } -} - - -export const RocketChatClientService = new _RocketChatClientService() \ No newline at end of file +} \ No newline at end of file From 053c6034a75c54a3c9e55b21a9254df0e86c65c7 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 18:52:21 +0100 Subject: [PATCH 12/17] improve login to rocket chat via websocket --- src/app/home/home.page.ts | 52 +++++++------------ src/app/models/user.model.ts | 1 + src/app/services/auth.service.ts | 31 +++++++++++ .../socket/rocket-chat-client.service.ts | 30 +++++++---- 4 files changed, 69 insertions(+), 45 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index 974b5aef7..c76e46650 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -95,45 +95,29 @@ export class HomePage implements OnInit { private RouteService: RouteService, private RocketChatClientService: RocketChatClientService) { - this.RocketChatClientService.connect(()=>{ + this.RocketChatClientService.getRooms().then((rooms: any)=>{ + console.log('rooms', rooms) - this.RocketChatClientService.login({ - username: 'paulo.pinto', - email: 'paulo.pinto@gabinetedigital.local', - password: 'tabteste@006' - }).then((message) => { - // alert('login') - console.log('rocket chat login successfully', message) - this.RocketChatClientService.getRooms().then((rooms: any)=>{ - // console.log('rooms', rooms) - - rooms.result.update.forEach((room:any) => { - // console.log('room', room) - this.RocketChatClientService.subscribe(room.lastMessage.rid).then((subscription)=>{ - console.log('subscription', subscription) - }) - }); + rooms.result.update.forEach((room:any) => { + console.log('room', room) + this.RocketChatClientService.subscribe(room.lastMessage.rid).then((subscription)=>{ + console.log('subscription', subscription) + }) }); + }); - this.RocketChatClientService.receiveLiveMessageFromRoom( - 'fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', - this.constructor.name, - (Chatmessage)=>{ - console.log('chat', Chatmessage) - } - ) - - window['jj'] = ()=>{ - //send message // roomId // Message - this.RocketChatClientService.send('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', 'Mensagem enviada programaticamente.'+ new Date().toISOString()) + this.RocketChatClientService.receiveLiveMessageFromRoom( + 'fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', + this.constructor.name, + (Chatmessage)=>{ + console.log('chat', Chatmessage) } + ) - }).catch((message)=>{ - console.log('rocket chat login failed', message) - }).finally(()=>{ - }) - - }) + window['jj'] = ()=>{ + //send message // roomId // Message + this.RocketChatClientService.send('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', 'Mensagem enviada programaticamente.'+ new Date().toISOString()) + } // this.RocketChatClientService.send() /* this.webNotificationPopupService.askNotificationPermission() */ diff --git a/src/app/models/user.model.ts b/src/app/models/user.model.ts index 52b214313..e0e4984dc 100644 --- a/src/app/models/user.model.ts +++ b/src/app/models/user.model.ts @@ -56,6 +56,7 @@ export class UserSession { TypeShare: number; }[] UserName: string + Password: string Profile: any; LoginPreference: 'None' | 'Password' | 'Pin' | null; PIN: string diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index 3024f8bff..c8ba0a3fb 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -30,12 +30,25 @@ export class AuthService { public alertController: AlertController, private aesencrypt: AESEncrypt, private cookieService: CookieService, + private RocketChatClientService: RocketChatClientService ) { this.headers = new HttpHeaders(); if (SessionStore.exist) { this.ValidatedUser = SessionStore.user + + this.RocketChatClientService.connect(()=>{ + this.RocketChatClientService.login({ + username: SessionStore.user.UserName, + password: SessionStore.user.Password + }).then((message) => { + console.log('rocket chat login successfully', message) + }).catch((message)=>{ + console.log('rocket chat login failed', message) + }) + }) + } if (localStorage.getItem("userChat") != null) { @@ -77,6 +90,8 @@ export class AuthService { session.Profile = 'MDGPR' } + session.Password = user.password + session.BasicAuthKey = user.BasicAuthKey SessionStore.reset(session) @@ -98,6 +113,22 @@ export class AuthService { "password": user.password, } + + this.RocketChatClientService.connect(()=>{ + + this.RocketChatClientService.login({ + username: user.username, + password: user.password + }).then((message) => { + console.log('rocket chat login successfully', message) + }).catch((message)=>{ + console.log('rocket chat login failed', message) + }).finally(()=>{ + }) + + }) + + let responseChat = await this.httpService.post('login', postData).toPromise(); if(responseChat) { console.log('Login to Rocket chat OK'); diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 85a13a33c..89d27dc25 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -19,23 +19,34 @@ export class RocketChatClientService { private returns() {} - private attemptRequestQueue(arg, option) { + private attemptRequestQueue(arg, options) { - const conditionToSend = this.ws.connected == true && this.isLogin == true + const conditionToSend = this.ws.connected == false || this.isLogin == false - if(conditionToSend) { + if(!conditionToSend) { + console.log('requestQueue') this.requestQueue.push({ arg: arg, + methodName: options.methodName, status: { isLogin: this.isLogin, isConnected: this.ws.connected } }) } + return conditionToSend } - private runRequestQueue(){} + private runRequestQueue(){ + this.requestQueue.forEach((request,index, object)=>{ + console.log('runRequestQueue '+index) + const method = request.methodName + const arg = request.arg + this[method](...arg) + object.splice(index, 1); + }) + } connect(firstPingFunx: Function) { this.hasPing = false @@ -91,8 +102,8 @@ export class RocketChatClientService { if(message.result) { if(message.result.token) { this.isLogin = true - this.runRequestQueue() this.ws.wsMsgQueue() + this.runRequestQueue() resolve(message) } else { this.isLogin = false @@ -342,17 +353,14 @@ export class RocketChatClientService { onopen:()=> { this.ws.connected = true console.log('================== welcome to socket server =====================') + this.ws.wsMsgQueue() + }, + wsMsgQueue:()=> { this.wsMsgQueue.forEach((item, index, object) => { this.ws.send(item.message, item.requestId); object.splice(index, 1); }) }, - wsMsgQueue:()=> { - // this.wsMsgQueue.forEach((item, index, object) => { - // this.ws.send(item.message, item.requestId); - // object.splice(index, 1); - // }) - }, send: (message: object, requestId = uuidv4()) => { if (this.ws.connected == false) { // save data to send when back online From d04a57b35c38d28c9f6d7b36076a2ee89c059fba Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 22:04:04 +0100 Subject: [PATCH 13/17] Improve filter callback --- src/app/home/home.page.ts | 6 + src/app/models/rochet-chat-cliente-service.ts | 3 +- src/app/models/user.model.ts | 1 + src/app/services/auth.service.ts | 12 +- .../socket/rocket-chat-client.service.ts | 203 ++++++++---------- src/plugin/deep.js | 18 ++ 6 files changed, 120 insertions(+), 123 deletions(-) create mode 100644 src/plugin/deep.js diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index c76e46650..beee87168 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -95,6 +95,7 @@ export class HomePage implements OnInit { private RouteService: RouteService, private RocketChatClientService: RocketChatClientService) { + this.RocketChatClientService.getRooms().then((rooms: any)=>{ console.log('rooms', rooms) @@ -106,6 +107,7 @@ export class HomePage implements OnInit { }); }); + this.RocketChatClientService.receiveLiveMessageFromRoom( 'fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', this.constructor.name, @@ -114,6 +116,10 @@ export class HomePage implements OnInit { } ) + this.RocketChatClientService.loadHistory('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', 50).then((message)=>{ + console.log('loadHistory', message) + }) + window['jj'] = ()=>{ //send message // roomId // Message this.RocketChatClientService.send('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', 'Mensagem enviada programaticamente.'+ new Date().toISOString()) diff --git a/src/app/models/rochet-chat-cliente-service.ts b/src/app/models/rochet-chat-cliente-service.ts index 68956c823..7cf5e2949 100644 --- a/src/app/models/rochet-chat-cliente-service.ts +++ b/src/app/models/rochet-chat-cliente-service.ts @@ -8,5 +8,6 @@ export interface wsCallbacksParams { export interface msgQueue { message: object, - requestId: string + requestId: string, + loginRequired: boolean } \ No newline at end of file diff --git a/src/app/models/user.model.ts b/src/app/models/user.model.ts index e0e4984dc..89ea55fe4 100644 --- a/src/app/models/user.model.ts +++ b/src/app/models/user.model.ts @@ -57,6 +57,7 @@ export class UserSession { }[] UserName: string Password: string + RochetChatUser: string Profile: any; LoginPreference: 'None' | 'Password' | 'Pin' | null; PIN: string diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index c8ba0a3fb..e36670932 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -30,23 +30,23 @@ export class AuthService { public alertController: AlertController, private aesencrypt: AESEncrypt, private cookieService: CookieService, - private RocketChatClientService: RocketChatClientService - ) { + private RocketChatClientService: RocketChatClientService) { this.headers = new HttpHeaders(); if (SessionStore.exist) { this.ValidatedUser = SessionStore.user + console.log('login', SessionStore.user.RochetChatUser, SessionStore.user.Password) this.RocketChatClientService.connect(()=>{ this.RocketChatClientService.login({ - username: SessionStore.user.UserName, + username: SessionStore.user.RochetChatUser, password: SessionStore.user.Password }).then((message) => { console.log('rocket chat login successfully', message) }).catch((message)=>{ console.log('rocket chat login failed', message) - }) + }) }) } @@ -91,6 +91,7 @@ export class AuthService { } session.Password = user.password + session.RochetChatUser = user.username.split('@')[0] session.BasicAuthKey = user.BasicAuthKey @@ -117,9 +118,10 @@ export class AuthService { this.RocketChatClientService.connect(()=>{ this.RocketChatClientService.login({ - username: user.username, + username: SessionStore.user.RochetChatUser, password: user.password }).then((message) => { + alert('sucess') console.log('rocket chat login successfully', message) }).catch((message)=>{ console.log('rocket chat login failed', message) diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 89d27dc25..9d46cc181 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -1,53 +1,21 @@ import { Injectable } from '@angular/core'; import { v4 as uuidv4 } from 'uuid' import { wsCallbacksParams, msgQueue } from 'src/app/models/rochet-chat-cliente-service' - +import { deepFind } from 'src/plugin/deep' /** * Use this class to interact with rocketChat realtime API */ -@Injectable({ + @Injectable({ providedIn: 'root' }) -export class RocketChatClientService { + export class RocketChatClientService { private hasPing = false private firstPingFunx: Function isLogin = false; - requestQueue = [] constructor() {} - private returns() {} - - private attemptRequestQueue(arg, options) { - - const conditionToSend = this.ws.connected == false || this.isLogin == false - - if(!conditionToSend) { - console.log('requestQueue') - this.requestQueue.push({ - arg: arg, - methodName: options.methodName, - status: { - isLogin: this.isLogin, - isConnected: this.ws.connected - } - }) - } - - return conditionToSend - } - - private runRequestQueue(){ - this.requestQueue.forEach((request,index, object)=>{ - console.log('runRequestQueue '+index) - const method = request.methodName - const arg = request.arg - this[method](...arg) - object.splice(index, 1); - }) - } - connect(firstPingFunx: Function) { this.hasPing = false this.firstPingFunx = firstPingFunx @@ -60,12 +28,12 @@ export class RocketChatClientService { support: ["1"] } - this.ws.send(connectMessage) + this.ws.send(connectMessage, 'connect', false) - 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"}) + this.ws.send({msg:"pong"},'recoonect', false) if(this.hasPing == false) { // first ping firstPingFunx() @@ -93,39 +61,58 @@ export class RocketChatClientService { } ] } - this.ws.send(loginRequest, requestId) + this.ws.send(loginRequest, requestId, false) return new Promise((resolve, reject) => { - this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ - // console.log(message.result.id, requestId) - if(message.id == requestId || message.result.id == requestId) { // same request send - if(message.result) { - if(message.result.token) { - this.isLogin = true + this.ws.registerCallback({type:'Onmessage', requestId, funx:(message)=>{ + if(message.id == requestId || deepFind(message, 'result.id') == requestId) { // same request send + + if(message.result.token) { + this.isLogin = true + setTimeout(()=>{ this.ws.wsMsgQueue() - this.runRequestQueue() - resolve(message) - } else { - this.isLogin = false - reject(message) - } + },0) + + resolve(message) } else { this.isLogin = false reject(message) } + + reject(message) + + return true } }}) }); } + getRooms(requestId = uuidv4()) { + + const request = { + "msg": "method", + "method": "rooms/get", + "id": requestId, + "params": [ { "$date": 1480377601 } ] + } + + this.ws.send(request, requestId, true) + + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', requestId, funx:(message)=>{ + if(message.id == requestId) { // same request send + resolve(message) + return true + } + }}) + }); + } + logout() {} send(roomId, message) { - const conditions = this.attemptRequestQueue({...roomId, message}, {methodName:'send'}) - if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } - const requestId = uuidv4() var request = { @@ -139,12 +126,13 @@ export class RocketChatClientService { }] } - this.ws.send(request, requestId); + this.ws.send(request, requestId, true); return new Promise((resolve, reject) => { this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ - if(message.id == requestId || message.result.id == requestId) { // same request send + if(message.id == requestId || deepFind(message,'result.id') == requestId) { // same request send resolve(message) + return true } }}) }); @@ -154,32 +142,9 @@ export class RocketChatClientService { deleteMessage() {} createRoom() {} - getRooms() { - const conditions = this.attemptRequestQueue({},{methodName: 'getRooms'}) - if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } - const requestId = uuidv4() - - const request = { - "msg": "method", - "method": "rooms/get", - "id": requestId, - "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.id == requestId || message.result.id == requestId) { // same request send - resolve(message) - } - }}) - }); - } loadHistory(roomId, limit: number = 50) { - const conditions = this.attemptRequestQueue({...roomId, limit}, {methodName:'loadHistory'}) - if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } const requestId = uuidv4() @@ -197,23 +162,20 @@ export class RocketChatClientService { ] } - this.ws.send(request, requestId) + this.ws.send(request, requestId, true) - - // return new Promise((resolve, reject) => { - // this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ - // if(message.id == requestId || message.result.id == requestId) { // same request send - // resolve(message) - // } - // }}) - // }); + return new Promise((resolve, reject) => { + this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + if(message.id == requestId || deepFind(message,'result.id') == requestId) { // same request send + resolve(message) + return true + } + }}) + }); } subscribe(roomId : string) { - const conditions = this.attemptRequestQueue({roomId},{methodName: 'subscribe'}) - if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } - const requestId = uuidv4() var subscribeRequest = { @@ -226,12 +188,13 @@ export class RocketChatClientService { ] } - this.ws.send(subscribeRequest); + this.ws.send(subscribeRequest, requestId, true); return new Promise((resolve, reject) => { this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ - if(message.msg == 'ready' || message.subs[0] == requestId) { // same request send + if(message.msg == 'ready' || deepFind(message, 'subs.0') == requestId) { // same request send resolve(message) + return true } }}) }); @@ -263,9 +226,6 @@ export class RocketChatClientService { streamRoomMessages(roomId : string) { - const conditions = this.attemptRequestQueue({roomId},{methodName: 'subscribe'}) - if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } - const requestId = uuidv4() const request = { @@ -278,20 +238,19 @@ export class RocketChatClientService { ] } - this.ws.send(request); + this.ws.send(request, requestId, true); return new Promise((resolve, reject) => { this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ - if(message.msg == 'ready' || message.subs[0] == requestId) { // same request send + if(message.msg == 'ready' || deepFind(message, 'subs.0') == requestId) { // same request send resolve(message) + return true } }}) }); } streamNotifyRoom(roomId : string) { - const conditions = this.attemptRequestQueue({roomId},{methodName: 'subscribe'}) - if(conditions == false) { return new Promise((resolve, reject) => { reject('no error')}); } const requestId = uuidv4() @@ -306,12 +265,13 @@ export class RocketChatClientService { ] }; - this.ws.send(streamNotifyObj, requestId) + this.ws.send(streamNotifyObj, requestId, true) return new Promise((resolve, reject) => { this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ - if(message.id == requestId || message.result.id == requestId) { // same request send + if(message.id == requestId || deepFind(message,'result.id') == requestId) { // same request send resolve('') + return true } }}) }); @@ -334,12 +294,14 @@ export class RocketChatClientService { this.wsCallbacks[params.requestId] = { type: params.type, - funx: params.funx, - runOnces: params.runOnces + funx: params.funx } }, - deleteCallback(){}, + deleteCallback(requestId: string){ + console.log('delete', this.wsCallbacks[requestId]) + delete this.wsCallbacks[requestId] + }, connect:(url)=> { this.ws.connected = false this.wsUrl = url @@ -357,17 +319,23 @@ export class RocketChatClientService { }, wsMsgQueue:()=> { this.wsMsgQueue.forEach((item, index, object) => { - this.ws.send(item.message, item.requestId); - object.splice(index, 1); + if(item.loginRequired && this.isLogin) { + this.ws.send(item.message, item.requestId, item.loginRequired); + object.splice(index, 1); + } else if(item.loginRequired == false) { + this.ws.send(item.message, item.requestId, item.loginRequired); + object.splice(index, 1); + } + }) }, - send: (message: object, requestId = uuidv4()) => { + send: (message: object, requestId = uuidv4(), loginRequired) => { - if (this.ws.connected == 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.wsMsgQueue.push({message, requestId}) + this.wsMsgQueue.push({message, requestId, loginRequired}) } else { - console.log('send to rocket chat', message) + // console.log('send to rocket chat', message) let messageStr = JSON.stringify(message) this.socket.send(messageStr) } @@ -376,16 +344,17 @@ export class RocketChatClientService { onmessage:(event: any)=> { const data = JSON.parse(event.data) - console.log('event.data', data) + // console.log('event.data', data) 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] - } - } + const dontRepeat = value.funx(data) + + if(dontRepeat) { + delete this.wsCallbacks[key] + } + } } diff --git a/src/plugin/deep.js b/src/plugin/deep.js new file mode 100644 index 000000000..586c8077c --- /dev/null +++ b/src/plugin/deep.js @@ -0,0 +1,18 @@ +function deepFind(obj, path) { + var paths = path.split('.') + , current = obj + , i; + + for (i = 0; i < paths.length; ++i) { + if (current[paths[i]] == undefined) { + return undefined; + } else { + current = current[paths[i]]; + } + } + return current; +} + +module.exports = { + deepFind: deepFind, +}; \ No newline at end of file From 9c043e9853ad0def34798128d043aae836c3a04b Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 22:35:44 +0100 Subject: [PATCH 14/17] Fix all websocket bugs --- src/app/home/home.page.ts | 7 +++-- .../socket/rocket-chat-client.service.ts | 30 +++++++++---------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/app/home/home.page.ts b/src/app/home/home.page.ts index beee87168..048b2e17b 100644 --- a/src/app/home/home.page.ts +++ b/src/app/home/home.page.ts @@ -95,6 +95,10 @@ export class HomePage implements OnInit { private RouteService: RouteService, private RocketChatClientService: RocketChatClientService) { + this.RocketChatClientService.loadHistory('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', 10).then((message)=>{ + console.log('loadHistory', message) + }) + this.RocketChatClientService.getRooms().then((rooms: any)=>{ console.log('rooms', rooms) @@ -116,9 +120,6 @@ export class HomePage implements OnInit { } ) - this.RocketChatClientService.loadHistory('fsMwcNdufWvdnChj7ya9nF9cX2HizxxWAM', 50).then((message)=>{ - console.log('loadHistory', message) - }) window['jj'] = ()=>{ //send message // roomId // Message diff --git a/src/app/services/socket/rocket-chat-client.service.ts b/src/app/services/socket/rocket-chat-client.service.ts index 9d46cc181..d6417db38 100644 --- a/src/app/services/socket/rocket-chat-client.service.ts +++ b/src/app/services/socket/rocket-chat-client.service.ts @@ -88,7 +88,9 @@ import { deepFind } from 'src/plugin/deep' } - getRooms(requestId = uuidv4()) { + getRooms() { + + const requestId = uuidv4() const request = { "msg": "method", @@ -129,7 +131,7 @@ import { deepFind } from 'src/plugin/deep' this.ws.send(request, requestId, true); return new Promise((resolve, reject) => { - this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + this.ws.registerCallback({type:'Onmessage', requestId, funx:(message)=>{ if(message.id == requestId || deepFind(message,'result.id') == requestId) { // same request send resolve(message) return true @@ -165,8 +167,9 @@ import { deepFind } from 'src/plugin/deep' this.ws.send(request, requestId, true) return new Promise((resolve, reject) => { - this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ - if(message.id == requestId || deepFind(message,'result.id') == requestId) { // same request send + this.ws.registerCallback({type:'Onmessage', requestId, funx:(message)=>{ + // console.log(message) + if(message.id == requestId ) { // same request send resolve(message) return true } @@ -191,7 +194,7 @@ import { deepFind } from 'src/plugin/deep' this.ws.send(subscribeRequest, requestId, true); return new Promise((resolve, reject) => { - this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + this.ws.registerCallback({type:'Onmessage', requestId, funx:(message)=>{ if(message.msg == 'ready' || deepFind(message, 'subs.0') == requestId) { // same request send resolve(message) return true @@ -241,7 +244,7 @@ import { deepFind } from 'src/plugin/deep' this.ws.send(request, requestId, true); return new Promise((resolve, reject) => { - this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + this.ws.registerCallback({type:'Onmessage', requestId, funx:(message)=>{ if(message.msg == 'ready' || deepFind(message, 'subs.0') == requestId) { // same request send resolve(message) return true @@ -268,7 +271,7 @@ import { deepFind } from 'src/plugin/deep' this.ws.send(streamNotifyObj, requestId, true) return new Promise((resolve, reject) => { - this.ws.registerCallback({type:'Onmessage', requestId, runOnces: true, funx:(message)=>{ + this.ws.registerCallback({type:'Onmessage', requestId, funx:(message)=>{ if(message.id == requestId || deepFind(message,'result.id') == requestId) { // same request send resolve('') return true @@ -298,10 +301,6 @@ import { deepFind } from 'src/plugin/deep' } }, - deleteCallback(requestId: string){ - console.log('delete', this.wsCallbacks[requestId]) - delete this.wsCallbacks[requestId] - }, connect:(url)=> { this.ws.connected = false this.wsUrl = url @@ -319,12 +318,14 @@ import { deepFind } from 'src/plugin/deep' }, wsMsgQueue:()=> { this.wsMsgQueue.forEach((item, index, object) => { - if(item.loginRequired && this.isLogin) { + if(item.loginRequired == true && this.isLogin == true) { + console.log('run msgQueue ',index) this.ws.send(item.message, item.requestId, item.loginRequired); - object.splice(index, 1); + delete this.wsMsgQueue[item.requestId] } else if(item.loginRequired == false) { + console.log('run msgQueue ',index) this.ws.send(item.message, item.requestId, item.loginRequired); - object.splice(index, 1); + delete this.wsMsgQueue[item.requestId] } }) @@ -335,7 +336,6 @@ import { deepFind } from 'src/plugin/deep' console.log('save msgQueue') this.wsMsgQueue.push({message, requestId, loginRequired}) } else { - // console.log('send to rocket chat', message) let messageStr = JSON.stringify(message) this.socket.send(messageStr) } From 3e4067e851e7d42b3fedd4c1db75013037929730 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 23:17:24 +0100 Subject: [PATCH 15/17] remove alert --- src/app/services/auth.service.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/services/auth.service.ts b/src/app/services/auth.service.ts index e36670932..6293231b1 100644 --- a/src/app/services/auth.service.ts +++ b/src/app/services/auth.service.ts @@ -121,7 +121,6 @@ export class AuthService { username: SessionStore.user.RochetChatUser, password: user.password }).then((message) => { - alert('sucess') console.log('rocket chat login successfully', message) }).catch((message)=>{ console.log('rocket chat login failed', message) From 7a6b2a57eac5a969f53b4f2bd9c157fe0dc768ea Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Mon, 10 Jan 2022 23:52:33 +0100 Subject: [PATCH 16/17] rewrite chat --- src/app/services/chat/chat-methods.service.ts | 31 ------------------- ...vice.spec.ts => chat-user.service.spec.ts} | 8 ++--- src/app/services/chat/chat-user.service.ts | 9 ++++++ src/app/services/chat/chat.service.ts | 22 ++++++++++++- ...ervice.spec.ts => message.service.spec.ts} | 8 ++--- src/app/services/chat/message.service.ts | 9 ++++++ src/app/services/chat/methods.service.ts | 11 ------- src/app/services/chat/room.service.ts | 25 +++++++++++++-- 8 files changed, 69 insertions(+), 54 deletions(-) delete mode 100644 src/app/services/chat/chat-methods.service.ts rename src/app/services/chat/{chat-methods.service.spec.ts => chat-user.service.spec.ts} (51%) create mode 100644 src/app/services/chat/chat-user.service.ts rename src/app/services/chat/{methods.service.spec.ts => message.service.spec.ts} (54%) create mode 100644 src/app/services/chat/message.service.ts delete mode 100644 src/app/services/chat/methods.service.ts diff --git a/src/app/services/chat/chat-methods.service.ts b/src/app/services/chat/chat-methods.service.ts deleted file mode 100644 index e22f6ddc0..000000000 --- a/src/app/services/chat/chat-methods.service.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ChatService } from '../chat.service'; - -@Injectable({ - providedIn: 'root' -}) -export class ChatMethodsService { - - constructor(private chatService: ChatService) { - } - - sendMessage(roomId:string, data:any) { - - let body = { - "message": - { - "rid": roomId, - "msg":"", - "file":{ - "type": "application/meeting", - "subject": data.subject, - "start_date": data.start, - "end_date": data.end, - "venue": data.venue, - "id": data.id, - } - } - } - this.chatService.sendMessage(body).subscribe(res=> {}); - } -} diff --git a/src/app/services/chat/chat-methods.service.spec.ts b/src/app/services/chat/chat-user.service.spec.ts similarity index 51% rename from src/app/services/chat/chat-methods.service.spec.ts rename to src/app/services/chat/chat-user.service.spec.ts index 3e474e69d..089b979cf 100644 --- a/src/app/services/chat/chat-methods.service.spec.ts +++ b/src/app/services/chat/chat-user.service.spec.ts @@ -1,13 +1,13 @@ import { TestBed } from '@angular/core/testing'; -import { ChatMethodsService } from './chat-methods.service'; +import { ChatUserService } from './chat-user.service'; -describe('ChatMethodsService', () => { - let service: ChatMethodsService; +describe('ChatUserService', () => { + let service: ChatUserService; beforeEach(() => { TestBed.configureTestingModule({}); - service = TestBed.inject(ChatMethodsService); + service = TestBed.inject(ChatUserService); }); it('should be created', () => { diff --git a/src/app/services/chat/chat-user.service.ts b/src/app/services/chat/chat-user.service.ts new file mode 100644 index 000000000..7a8fd0a8d --- /dev/null +++ b/src/app/services/chat/chat-user.service.ts @@ -0,0 +1,9 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class ChatUserService { + + constructor() { } +} diff --git a/src/app/services/chat/chat.service.ts b/src/app/services/chat/chat.service.ts index 0d00005d1..f5a29fc46 100644 --- a/src/app/services/chat/chat.service.ts +++ b/src/app/services/chat/chat.service.ts @@ -1,9 +1,29 @@ import { Injectable } from '@angular/core'; +import { RoomService } from './room.service'; +import { RocketChatClientService } from 'src/app/services/socket/rocket-chat-client.service'; +import { MessageService } from 'src/app/services/chat/message.service' @Injectable({ providedIn: 'root' }) export class ChatService { - constructor() { } + rooms: RoomService[] = [] + group = [] + + constructor( + private RocketChatClientService: RocketChatClientService + ) { + this.getAllRoomAndSubscribe() + } + + getAllRoomAndSubscribe() { + this.RocketChatClientService.getRooms().then((rooms: any) => { + rooms.result.update.forEach((roomData:any) => { + const room = new RoomService(new RocketChatClientService(), new MessageService()) + room.setData({id: roomData.lastMessage.rid}) + }); + }); + } + } diff --git a/src/app/services/chat/methods.service.spec.ts b/src/app/services/chat/message.service.spec.ts similarity index 54% rename from src/app/services/chat/methods.service.spec.ts rename to src/app/services/chat/message.service.spec.ts index f8337c418..1db761b5e 100644 --- a/src/app/services/chat/methods.service.spec.ts +++ b/src/app/services/chat/message.service.spec.ts @@ -1,13 +1,13 @@ import { TestBed } from '@angular/core/testing'; -import { MethodsService } from './methods.service'; +import { MessageService } from './message.service'; -describe('MethodsService', () => { - let service: MethodsService; +describe('MessageService', () => { + let service: MessageService; beforeEach(() => { TestBed.configureTestingModule({}); - service = TestBed.inject(MethodsService); + service = TestBed.inject(MessageService); }); it('should be created', () => { diff --git a/src/app/services/chat/message.service.ts b/src/app/services/chat/message.service.ts new file mode 100644 index 000000000..b22bacf6c --- /dev/null +++ b/src/app/services/chat/message.service.ts @@ -0,0 +1,9 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class MessageService { + + constructor() { } +} diff --git a/src/app/services/chat/methods.service.ts b/src/app/services/chat/methods.service.ts deleted file mode 100644 index d46b19283..000000000 --- a/src/app/services/chat/methods.service.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Injectable } from '@angular/core'; -import { ChatService } from '../chat.service'; - -@Injectable({ - providedIn: 'root' -}) -export class MethodsService { - - constructor(private chatService: ChatService) { - } -} diff --git a/src/app/services/chat/room.service.ts b/src/app/services/chat/room.service.ts index 7bfb8d36e..c921a754c 100644 --- a/src/app/services/chat/room.service.ts +++ b/src/app/services/chat/room.service.ts @@ -1,9 +1,28 @@ -import { Injectable } from '@angular/core'; - +import { Injectable } from '@angular/core' +import { RocketChatClientService } from 'src/app/services/socket/rocket-chat-client.service'; +import { MessageService } from 'src/app/services/chat/message.service' +import { ChatUserService } from 'src/app/services/chat/chat-user.service' @Injectable({ providedIn: 'root' }) export class RoomService { - constructor() { } + massages: MessageService[] = [] + chatUser: ChatUserService[] = [] + id = [] + + constructor( + private RocketChatClientService: RocketChatClientService, + private MessageService: MessageService + ) {} + + setData({id}){ + this.id= id + } + + create() {} + sendMessage() {} + deleteMessage() {} + ReactToMessage() {} + } From 3b370996b55f35ebbc9b2d6363668248c4941bf0 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Tue, 11 Jan 2022 11:01:34 +0100 Subject: [PATCH 17/17] restore file --- .../chat/chat-methods.service.spec.ts | 16 ++++++++++ src/app/services/chat/chat-methods.service.ts | 31 +++++++++++++++++++ src/app/services/chat/chat.service.ts | 4 +++ 3 files changed, 51 insertions(+) create mode 100644 src/app/services/chat/chat-methods.service.spec.ts create mode 100644 src/app/services/chat/chat-methods.service.ts diff --git a/src/app/services/chat/chat-methods.service.spec.ts b/src/app/services/chat/chat-methods.service.spec.ts new file mode 100644 index 000000000..3e474e69d --- /dev/null +++ b/src/app/services/chat/chat-methods.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ChatMethodsService } from './chat-methods.service'; + +describe('ChatMethodsService', () => { + let service: ChatMethodsService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ChatMethodsService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/services/chat/chat-methods.service.ts b/src/app/services/chat/chat-methods.service.ts new file mode 100644 index 000000000..e22f6ddc0 --- /dev/null +++ b/src/app/services/chat/chat-methods.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { ChatService } from '../chat.service'; + +@Injectable({ + providedIn: 'root' +}) +export class ChatMethodsService { + + constructor(private chatService: ChatService) { + } + + sendMessage(roomId:string, data:any) { + + let body = { + "message": + { + "rid": roomId, + "msg":"", + "file":{ + "type": "application/meeting", + "subject": data.subject, + "start_date": data.start, + "end_date": data.end, + "venue": data.venue, + "id": data.id, + } + } + } + this.chatService.sendMessage(body).subscribe(res=> {}); + } +} diff --git a/src/app/services/chat/chat.service.ts b/src/app/services/chat/chat.service.ts index f5a29fc46..1686dd66a 100644 --- a/src/app/services/chat/chat.service.ts +++ b/src/app/services/chat/chat.service.ts @@ -26,4 +26,8 @@ export class ChatService { }); } + onJoinRoom() { + // live + } + }