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);
}
}
|