add readAt and delete message

This commit is contained in:
Peter Maquiran
2024-07-31 17:23:44 +01:00
parent 128d92fe5e
commit 82e4acbe87
14 changed files with 287 additions and 67 deletions
+42 -35
View File
@@ -6,41 +6,14 @@ import { filter, first } from 'rxjs/operators';
import { v4 as uuidv4 } from 'uuid'
import { UserTypingDTO } from '../../data/dto/typing/typingInputDTO';
import { MessageOutPutDataDTO } from '../../data/dto/message/messageOutputDTO';
var msgObj = {
roomId: "53bc6471-c28e-42d0-aa72-f4e52221f16f",
senderId:312,
message:"message enviada",
messageType:312,
canEdit:true,
oneShot:false,
requestId:"testing"
};
// var deletObj = {
// roomId: "53bc6471-c28e-42d0-aa72-f4e52221f16f",
// senderId:312,
// messageId:"message enviada",
// requestId:"testing"
// };
// var reactObj = {
// roomId: "53bc6471-c28e-42d0-aa72-f4e52221f16f",
// memberId:2,
// messageId:"e7074c10-4f92-458c-adb2-774ec2d42992",
// reaction:"reacted",
// requestId:"testingReaction"
// };
const typingObj = {
roomId: "53bc6471-c28e-42d0-aa72-f4e52221f16f",
userId: 312,
userName:"usertyping",
requestId:"testing"
};
import { MessageDeleteInputDTO } from '../../data/dto/message/messageDeleteInputDTO';
export class SignalRConnection {
private hubConnection: signalR.HubConnection;
private messageSubject: BehaviorSubject<MessageOutPutDataDTO> = new BehaviorSubject<MessageOutPutDataDTO>(null);
private messageDelete: BehaviorSubject<MessageOutPutDataDTO> = new BehaviorSubject<MessageOutPutDataDTO>(null);
private messageUPdateSubject: BehaviorSubject<MessageOutPutDataDTO> = new BehaviorSubject<MessageOutPutDataDTO>(null);
private typingSubject: BehaviorSubject<UserTypingDTO> = new BehaviorSubject<UserTypingDTO>(null);
private readAtSubject: BehaviorSubject<string> = new BehaviorSubject<any>(null);
private connectionStateSubject: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);
@@ -57,7 +30,6 @@ export class SignalRConnection {
establishConnection(): Promise<Result<signalR.HubConnection, false>> {
return new Promise((resolve, reject) => {
console.log('try to connect');
const hubConnection = new signalR.HubConnectionBuilder()
.withUrl(this.url)
.build();
@@ -106,7 +78,7 @@ export class SignalRConnection {
if(this.connectionStateSubject.value == true) {
console.log('join=================')
this.hubConnection.invoke("Join", 312, SessionStore.user.FullName);
this.hubConnection.invoke("Join", SessionStore.user.UserId, SessionStore.user.FullName);
//this.hubConnection.invoke("Join", 105, "UserFirefox");
} else {
this.sendLaterSubject.next({method: 'SendMessage', args:["Join", 312, "Daniel"]})
@@ -119,7 +91,7 @@ export class SignalRConnection {
if(this.connectionStateSubject.value == true) {
console.log('sendMessage', data)
this.hubConnection.invoke("SendMessage", msgObj)
this.hubConnection.invoke("SendMessage", data)
this.messageSubject.pipe(
filter((message: any) => data.requestId == message?.requestId),
@@ -138,6 +110,23 @@ export class SignalRConnection {
})
}
public async deleteMessage(data: MessageDeleteInputDTO) {
return new Promise((resolve, reject) => {
if(this.connectionStateSubject.value == true) {
console.log('delete message', data)
this.hubConnection.invoke("DeleteMessage", data)
this.messageSubject.pipe(
filter((message: any) => data.requestId == message?.requestId),
first()
).subscribe((value) => {
resolve(ok(value))
})
}
})
}
public async typing(data: Object & { roomId, UserName, userId }):Promise<Result<any, any>> {
return new Promise((resolve, reject) => {
@@ -146,7 +135,7 @@ export class SignalRConnection {
console.log('send typing', data)
try {
this.hubConnection.invoke("Typing", typingObj)
this.hubConnection.invoke("Typing", data)
} catch (error) {}
@@ -176,7 +165,7 @@ export class SignalRConnection {
if(this.connectionStateSubject.value == true) {
try {
this.hubConnection.invoke("ReadAt", { roomId: data.roomId, memberId: data.memberId, requestId } as any)
this.hubConnection.invoke("ReadAt", { roomId: data.roomId, memberId: data.memberId, requestId, messageId: data.chatMessageId} as any)
} catch (error) {}
@@ -215,6 +204,20 @@ export class SignalRConnection {
this.readAtSubject.next(_message);
});
this.hubConnection.on('DeleteMessage', (_message) => {
console.log('DeleteMessage', _message)
this.messageDelete.next(_message);
});
this.hubConnection.on('UpdateMessage', (_message) => {
console.log('UpdateMessage', _message)
this.messageUPdateSubject.next(_message);
})
}
public getMessageUpdateSubject() {
return this.messageUPdateSubject.asObservable()
}
public getMessages() {
@@ -237,6 +240,10 @@ export class SignalRConnection {
return this.sendLaterSubject.asObservable();
}
public getMessageDelete() {
return this.messageDelete.asObservable()
}
public closeConnection(): void {
this.reconnect = false
if (this.hubConnection) {