mirror of
https://code.equilibrium.co.ao/ITO/doneit-web.git
synced 2026-04-18 20:47:54 +00:00
send direct message
This commit is contained in:
@@ -80,12 +80,12 @@ export class RoomLocalRepository extends DexieRepository<RoomTable> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
getItemsLive(): Observable<RoomListOutPutDTO[]> {
|
getItemsLive(){
|
||||||
return liveQuery(() => chatDatabase.room.toArray()) as any;
|
return liveQuery(() => chatDatabase.room.toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
getRoomByIdLive(id: any): Observable<RoomListItemOutPutDTO | undefined> {
|
getRoomByIdLive(id: any) {
|
||||||
return liveQuery(() => chatDatabase.room.get(id)) as any;
|
return liveQuery(() => chatDatabase.room.get(id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ import { RoomInputDTO } from '../data/dto/room/roomInputDTO';
|
|||||||
import { UserRemoveListInputDTO } from '../data/dto/room/userRemoveListInputDTO';
|
import { UserRemoveListInputDTO } from '../data/dto/room/userRemoveListInputDTO';
|
||||||
import { AddMemberToRoomInputDTO } from '../data/dto/room/addMemberToRoomInputDto';
|
import { AddMemberToRoomInputDTO } from '../data/dto/room/addMemberToRoomInputDto';
|
||||||
import { RoomUpdateInputDTO } from '../data/dto/room/roomUpdateInputDTO';
|
import { RoomUpdateInputDTO } from '../data/dto/room/roomUpdateInputDTO';
|
||||||
|
import { RoomType } from "src/app/module/chat/domain/entity/group";
|
||||||
|
|
||||||
export const InstanceId = uuidv4();
|
export const InstanceId = uuidv4();
|
||||||
|
|
||||||
@@ -151,7 +152,7 @@ export class ChatServiceService {
|
|||||||
return this.MemberAdminUseCaseService.execute(input)
|
return this.MemberAdminUseCaseService.execute(input)
|
||||||
}
|
}
|
||||||
|
|
||||||
sendMessage(input: MessageEntity, messageEnum: MessageEnum) {
|
sendMessage(input: MessageEntity, messageEnum: RoomType) {
|
||||||
return this.MessageCreateUseCaseService.execute(input, messageEnum);
|
return this.MessageCreateUseCaseService.execute(input, messageEnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ import { err, Result } from 'neverthrow';
|
|||||||
import { MessageTable } from '../../infra/database/dexie/schema/message';
|
import { MessageTable } from '../../infra/database/dexie/schema/message';
|
||||||
import { MessageMapper } from '../mapper/messageMapper';
|
import { MessageMapper } from '../mapper/messageMapper';
|
||||||
import { SignalRService } from '../../infra/socket/signal-r.service';
|
import { SignalRService } from '../../infra/socket/signal-r.service';
|
||||||
|
import { RoomType } from "src/app/module/chat/domain/entity/group";
|
||||||
|
|
||||||
|
|
||||||
const MessageInputUseCaseSchema = z.object({
|
const MessageInputUseCaseSchema = z.object({
|
||||||
memberId: z.number(),
|
memberId: z.number(),
|
||||||
@@ -41,7 +43,7 @@ export class MessageCreateUseCaseService {
|
|||||||
) { }
|
) { }
|
||||||
|
|
||||||
|
|
||||||
async execute(message: MessageEntity, messageEnum: MessageEnum) {
|
async execute(message: MessageEntity, messageEnum: RoomType) {
|
||||||
|
|
||||||
const validation = zodSafeValidation<MessageEntity>(MessageEntitySchema, message)
|
const validation = zodSafeValidation<MessageEntity>(MessageEntitySchema, message)
|
||||||
|
|
||||||
@@ -94,7 +96,7 @@ export class MessageCreateUseCaseService {
|
|||||||
const DTO = MessageMapper.fromDomain(message, message.requestId)
|
const DTO = MessageMapper.fromDomain(message, message.requestId)
|
||||||
|
|
||||||
let sendMessageResult: Result<MessageOutPutDataDTO, any>
|
let sendMessageResult: Result<MessageOutPutDataDTO, any>
|
||||||
if(messageEnum == MessageEnum.group) {
|
if(messageEnum == RoomType.Group) {
|
||||||
sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage<MessageOutPutDataDTO>(DTO)
|
sendMessageResult = await this.messageLiveSignalRDataSourceService.sendMessage<MessageOutPutDataDTO>(DTO)
|
||||||
} else {
|
} else {
|
||||||
sendMessageResult = await this.messageSocketRepositoryService.sendDirectMessage(DTO)
|
sendMessageResult = await this.messageSocketRepositoryService.sendDirectMessage(DTO)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { z } from "zod";
|
import { z } from "zod";
|
||||||
import { EntityTable } from 'Dexie';
|
import { EntityTable } from 'Dexie';
|
||||||
|
import { RoomType } from "src/app/module/chat/domain/entity/group";
|
||||||
|
|
||||||
export const RoomTableSchema = z.object({
|
export const RoomTableSchema = z.object({
|
||||||
id: z.string(),
|
id: z.string(),
|
||||||
@@ -12,6 +13,7 @@ export const RoomTableSchema = z.object({
|
|||||||
}),
|
}),
|
||||||
createdAt: z.any(),
|
createdAt: z.any(),
|
||||||
expirationDate: z.any().nullable(),
|
expirationDate: z.any().nullable(),
|
||||||
|
roomType: z.nativeEnum(RoomType)
|
||||||
})
|
})
|
||||||
|
|
||||||
export type RoomTable = z.infer<typeof RoomTableSchema>
|
export type RoomTable = z.infer<typeof RoomTableSchema>
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import { Observable as DexieObservable } from 'Dexie';
|
|||||||
import { EditGroupPage } from './modal/edit-group/edit-group.page';
|
import { EditGroupPage } from './modal/edit-group/edit-group.page';
|
||||||
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'
|
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'
|
||||||
import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room-local-repository.service'
|
import { RoomLocalRepository } from 'src/app/module/chat/data/repository/room-local-repository.service'
|
||||||
|
import { RoomTable } from 'src/app/module/chat/infra/database/dexie/schema/room';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-chat',
|
selector: 'app-chat',
|
||||||
@@ -52,7 +53,7 @@ export class ChatPage implements OnInit {
|
|||||||
routerSubscription
|
routerSubscription
|
||||||
|
|
||||||
// count$: Observable<RoomRemoteDataSourceState>;
|
// count$: Observable<RoomRemoteDataSourceState>;
|
||||||
items$!: DexieObservable<RoomListOutPutDTO[]>;
|
items$!: DexieObservable<RoomTable[]>;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private modalController: ModalController,
|
private modalController: ModalController,
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import { SessionStore } from 'src/app/store/session.service';
|
|||||||
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
|
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
|
||||||
import { MessageEntity } from 'src/app/module/chat/domain/entity/message';
|
import { MessageEntity } from 'src/app/module/chat/domain/entity/message';
|
||||||
// import { ChatSystemService } from 'src/app/services/chat/chat-system.service'
|
// import { ChatSystemService } from 'src/app/services/chat/chat-system.service'
|
||||||
|
import { RoomType } from "src/app/module/chat/domain/entity/group";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-contacts',
|
selector: 'app-contacts',
|
||||||
@@ -141,7 +142,7 @@ export class ContactsPage implements OnInit {
|
|||||||
message.receiverId = user.wxUserId
|
message.receiverId = user.wxUserId
|
||||||
message.message = 'hello'
|
message.message = 'hello'
|
||||||
|
|
||||||
const result = await this.chatServiceService.sendMessage(message, MessageEnum.Direct)
|
const result = await this.chatServiceService.sendMessage(message, RoomType.Group)
|
||||||
|
|
||||||
if(result.isOk()) {
|
if(result.isOk()) {
|
||||||
this.close(result.value.roomId)
|
this.close(result.value.roomId)
|
||||||
|
|||||||
@@ -46,6 +46,8 @@ import { UserTypingRemoteRepositoryService } from 'src/app/module/chat/data/repo
|
|||||||
import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message/message-local-data-source.service';
|
import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message/message-local-data-source.service';
|
||||||
import { MessageRemoteDataSourceService } from 'src/app/module/chat/data/repository/message/message-remote-data-source.service';
|
import { MessageRemoteDataSourceService } from 'src/app/module/chat/data/repository/message/message-remote-data-source.service';
|
||||||
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
|
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
|
||||||
|
import { RoomType } from "src/app/module/chat/domain/entity/group";
|
||||||
|
import { RoomTable } from 'src/app/module/chat/infra/database/dexie/schema/room';
|
||||||
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@@ -64,6 +66,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
dmUsers: any;
|
dmUsers: any;
|
||||||
downloadProgess = 0;
|
downloadProgess = 0;
|
||||||
|
|
||||||
|
roomType!: RoomType
|
||||||
@Input() roomId: string;
|
@Input() roomId: string;
|
||||||
@Input() showMessages: string;
|
@Input() showMessages: string;
|
||||||
|
|
||||||
@@ -115,7 +118,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
|
|
||||||
textField = ''
|
textField = ''
|
||||||
|
|
||||||
roomData$: DexieObservable<RoomListItemOutPutDTO | undefined>
|
roomData$: DexieObservable<RoomTable | undefined>
|
||||||
roomStatus$: DexieObservable<Boolean >
|
roomStatus$: DexieObservable<Boolean >
|
||||||
roomMessage$: DexieObservable<MessageTable[]>
|
roomMessage$: DexieObservable<MessageTable[]>
|
||||||
roomMembers$: DexieObservable<MemberTable[] | undefined>
|
roomMembers$: DexieObservable<MemberTable[] | undefined>
|
||||||
@@ -173,6 +176,15 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
|
|
||||||
|
|
||||||
this.roomData$ = this.RoomLocalRepository.getRoomByIdLive(this.roomId)
|
this.roomData$ = this.RoomLocalRepository.getRoomByIdLive(this.roomId)
|
||||||
|
|
||||||
|
this.roomData$.subscribe(e => {
|
||||||
|
console.log(e)
|
||||||
|
if(e) {
|
||||||
|
this.roomType = e.roomType
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
this.getMessages();
|
this.getMessages();
|
||||||
this.listenToIncomingMessage();
|
this.listenToIncomingMessage();
|
||||||
this.listenToDeleteMessage();
|
this.listenToDeleteMessage();
|
||||||
@@ -568,7 +580,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
safeFile: this.sanitiser.bypassSecurityTrustResourceUrl(this.audioRecordedDataUrl)
|
safeFile: this.sanitiser.bypassSecurityTrustResourceUrl(this.audioRecordedDataUrl)
|
||||||
}]
|
}]
|
||||||
|
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
this.messages1[this.roomId].push(message)
|
this.messages1[this.roomId].push(message)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.scrollToBottomClicked()
|
this.scrollToBottomClicked()
|
||||||
@@ -629,7 +641,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.scrollToBottomClicked()
|
this.scrollToBottomClicked()
|
||||||
}, 100)
|
}, 100)
|
||||||
const data = await this.chatServiceService.sendMessage(message, MessageEnum.group)
|
const data = await this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -811,7 +823,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.scrollToBottomClicked()
|
this.scrollToBottomClicked()
|
||||||
}, 100)
|
}, 100)
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -867,7 +879,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.scrollToBottomClicked()
|
this.scrollToBottomClicked()
|
||||||
}, 100)
|
}, 100)
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
this.textField = ''
|
this.textField = ''
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -921,7 +933,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.scrollToBottomClicked()
|
this.scrollToBottomClicked()
|
||||||
}, 100)
|
}, 100)
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -977,7 +989,7 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy
|
|||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.scrollToBottomClicked()
|
this.scrollToBottomClicked()
|
||||||
}, 100)
|
}, 100)
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import { ToastService } from 'src/app/services/toast.service';
|
|||||||
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'
|
import { ChatServiceService } from 'src/app/module/chat/domain/chat-service.service'
|
||||||
import { MessageEntity } from 'src/app/module/chat/domain/entity/message';
|
import { MessageEntity } from 'src/app/module/chat/domain/entity/message';
|
||||||
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
|
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
|
||||||
|
import { RoomType } from "src/app/module/chat/domain/entity/group";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-contacts',
|
selector: 'app-contacts',
|
||||||
@@ -179,7 +179,7 @@ export class ContactsPage implements OnInit {
|
|||||||
|
|
||||||
message.message = 'hello'
|
message.message = 'hello'
|
||||||
|
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.Direct)
|
this.chatServiceService.sendMessage(message, RoomType.Group)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ import { UserTypingLocalRepository } from 'src/app/module/chat/data/repository/u
|
|||||||
import { UserTypingRemoteRepositoryService } from 'src/app/module/chat/data/repository/user-typing-live-data-source.service';
|
import { UserTypingRemoteRepositoryService } from 'src/app/module/chat/data/repository/user-typing-live-data-source.service';
|
||||||
import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message/message-local-data-source.service';
|
import { MessageLocalDataSourceService } from 'src/app/module/chat/data/repository/message/message-local-data-source.service';
|
||||||
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
|
import { MessageEnum } from 'src/app/module/chat/domain/use-case/message-create-use-case.service';
|
||||||
|
import { RoomType } from "src/app/module/chat/domain/entity/group";
|
||||||
|
import { RoomTable } from 'src/app/module/chat/infra/database/dexie/schema/room';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const IMAGE_DIR = 'stored-images';
|
const IMAGE_DIR = 'stored-images';
|
||||||
@@ -108,7 +111,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
audioPermissionStatus: 'granted' | 'denied' | 'prompt' | null = null
|
audioPermissionStatus: 'granted' | 'denied' | 'prompt' | null = null
|
||||||
sessionStore = SessionStore
|
sessionStore = SessionStore
|
||||||
|
|
||||||
roomData$: DexieObservable<RoomListItemOutPutDTO | undefined>
|
roomData$: DexieObservable<RoomTable | undefined>
|
||||||
roomStatus$: DexieObservable<Boolean >
|
roomStatus$: DexieObservable<Boolean >
|
||||||
roomMessage$: DexieObservable<MessageTable[]>
|
roomMessage$: DexieObservable<MessageTable[]>
|
||||||
roomMembers$: DexieObservable<MemberTable[] | undefined>
|
roomMembers$: DexieObservable<MemberTable[] | undefined>
|
||||||
@@ -119,7 +122,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
selectedMessage: any = null;
|
selectedMessage: any = null;
|
||||||
emojis: string[] = ['😊', '😂', '❤️', '👍', '😢']; // Add more emojis as needed
|
emojis: string[] = ['😊', '😂', '❤️', '👍', '😢']; // Add more emojis as needed
|
||||||
textField = ''
|
textField = ''
|
||||||
|
roomType!: RoomType
|
||||||
|
|
||||||
messageReceiveSubject: Subscription
|
messageReceiveSubject: Subscription
|
||||||
messageDeleteSubject: Subscription
|
messageDeleteSubject: Subscription
|
||||||
@@ -159,6 +162,14 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
|
|
||||||
|
|
||||||
this.roomData$ = this.RoomLocalRepository.getRoomByIdLive(this.roomId)
|
this.roomData$ = this.RoomLocalRepository.getRoomByIdLive(this.roomId)
|
||||||
|
|
||||||
|
this.roomData$.subscribe(e => {
|
||||||
|
console.log(e)
|
||||||
|
if(e) {
|
||||||
|
this.roomType = e.roomType
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
this.getMessages();
|
this.getMessages();
|
||||||
this.listenToIncomingMessage();
|
this.listenToIncomingMessage();
|
||||||
@@ -526,7 +537,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
wxUserId: SessionStore.user.UserId
|
wxUserId: SessionStore.user.UserId
|
||||||
}
|
}
|
||||||
|
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
this.messages1[this.roomId].push(message)
|
this.messages1[this.roomId].push(message)
|
||||||
|
|
||||||
this.textField = ''
|
this.textField = ''
|
||||||
@@ -569,7 +580,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
this.messages1[this.roomId].push(message)
|
this.messages1[this.roomId].push(message)
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.scrollToBottomClicked()
|
this.scrollToBottomClicked()
|
||||||
}, 100)
|
}, 100)
|
||||||
@@ -750,7 +761,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
this.messages1[this.roomId].push(message)
|
this.messages1[this.roomId].push(message)
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -800,7 +811,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
this.messages1[this.roomId].push(message)
|
this.messages1[this.roomId].push(message)
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
this.textField = ''
|
this.textField = ''
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -846,7 +857,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
this.messages1[this.roomId].push(message)
|
this.messages1[this.roomId].push(message)
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -897,7 +908,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
this.messages1[this.roomId].push(message)
|
this.messages1[this.roomId].push(message)
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -941,7 +952,7 @@ export class MessagesPage implements OnInit, AfterViewInit, OnDestroy {
|
|||||||
}]
|
}]
|
||||||
|
|
||||||
this.messages1[this.roomId].push(message)
|
this.messages1[this.roomId].push(message)
|
||||||
this.chatServiceService.sendMessage(message, MessageEnum.group)
|
this.chatServiceService.sendMessage(message, this.roomType)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user