Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | import { Injectable } from '@angular/core'; import { Observable } from 'rxjs/internal/Observable'; impoIrt { BehaviorSubject } from 'rxjs/internal/BehaviorSubject'; import { ILogger } from '../../models/logger.model'; import { ChatMessage } from '../../models/chat.model'; import { INotificationOptions } from '../../models/notification-options.model'; import { ActionService } from '../action/action.service'; import { WebrtcService } from '../webrtc/webrtc.service'; import { LocalUserService } from '../local-user/local-user.service'; import { LoggerService } from '../logger/logger.service'; import { Signal } from '../../models/signal.model'; @Injectable({ providedIn: 'root' }) export class ChatService { messagesObs: Observable<ChatMessage[]>; toggleChatObs: Observable<boolean>; private _messageList = <BehaviorSubject<ChatMessage[]>>new BehaviorSubject([]); private _toggleChat = <BehaviorSubject<boolean>>new BehaviorSubject(false); private messageList: ChatMessage[] = []; private isChatOpened: boolean = false; private log: ILogger; constructor( private loggerSrv: LoggerService, private openViduWebRTCService: WebrtcService, private localUsersService: LocalUserService, private actionService: ActionService ) { this.log = this.loggerSrv.get('ChatService'); this.messagesObs = this._messageList.asObservable(); this.toggleChatObs = this._toggleChat.asObservable(); } subscribeToChat() { const session = this.openViduWebRTCService.getWebcamSession(); session.on(`signal:${Signal.CHAT}`, (event: any) => { const connectionId = event.from.connectionId; const data = JSON.parse(event.data); const isMyOwnConnection = this.openViduWebRTCService.isMyOwnConnection(connectionId); this.messageList.push({ isLocal: isMyOwnConnection, nickname: data.nickname, message: data.message, }); if (!this.isChatOpened) { const notificationOptions: INotificationOptions = { message: `${data.nickname.toUpperCase()} sent a message`, cssClassName: 'messageSnackbar', buttonActionText: 'READ' }; this.actionService.launchNotification(notificationOptions, this.toggleChat.bind(this)); } this._messageList.next(this.messageList); }); } sendMessage(message: string) { message = message.replace(/ +(?= )/g, ''); if (message !== '' && message !== ' ') { const data = { message: message, nickname: this.localUsersService.getWebcamUserName() }; this.openViduWebRTCService.sendSignal(Signal.CHAT, undefined, data); } } toggleChat() { this.log.d('Toggling chat'); this.isChatOpened = !this.isChatOpened; this._toggleChat.next(this.isChatOpened); } } |