128 lines
4.8 KiB
TypeScript
128 lines
4.8 KiB
TypeScript
import {HtmlUtils} from "./../WebRtc/HtmlUtils";
|
|
import {AUDIO_TYPE, MESSAGE_TYPE} from "./ConsoleGlobalMessageManager";
|
|
import {API_URL, UPLOADER_URL} from "../Enum/EnvironmentVariable";
|
|
import {RoomConnection} from "../Connexion/RoomConnection";
|
|
import {PlayGlobalMessageInterface} from "../Connexion/ConnexionModels";
|
|
|
|
export class GlobalMessageManager {
|
|
|
|
constructor(private Connection: RoomConnection) {
|
|
this.initialise();
|
|
}
|
|
|
|
initialise(){
|
|
//receive signal to show message
|
|
this.Connection.receivePlayGlobalMessage((message: PlayGlobalMessageInterface) => {
|
|
this.playMessage(message);
|
|
});
|
|
|
|
//receive signal to close message
|
|
this.Connection.receiveStopGlobalMessage((messageId: string) => {
|
|
this.stopMessage(messageId);
|
|
});
|
|
|
|
//receive signal to close message
|
|
this.Connection.receiveTeleportMessage((map: string) => {
|
|
console.log('map to teleport user', map);
|
|
//TODO teleport user on map
|
|
});
|
|
}
|
|
|
|
private playMessage(message : PlayGlobalMessageInterface){
|
|
const previousMessage = document.getElementById(this.getHtmlMessageId(message.id));
|
|
if(previousMessage){
|
|
previousMessage.remove();
|
|
}
|
|
|
|
if(AUDIO_TYPE === message.type){
|
|
this.playAudioMessage(message.id, message.message);
|
|
}
|
|
|
|
if(MESSAGE_TYPE === message.type){
|
|
this.playTextMessage(message.id, message.message);
|
|
}
|
|
}
|
|
|
|
private playAudioMessage(messageId : string, urlMessage: string){
|
|
//delete previous elements
|
|
const previousDivAudio = document.getElementsByClassName('audio-playing');
|
|
for(let i = 0; i < previousDivAudio.length; i++){
|
|
previousDivAudio[i].remove();
|
|
}
|
|
|
|
//create new element
|
|
const divAudio : HTMLDivElement = document.createElement('div');
|
|
divAudio.id = `audio-playing-${messageId}`;
|
|
divAudio.classList.add('audio-playing');
|
|
const imgAudio : HTMLImageElement = document.createElement('img');
|
|
imgAudio.src = '/resources/logos/megaphone.svg';
|
|
const pAudio : HTMLParagraphElement = document.createElement('p');
|
|
pAudio.textContent = 'Message audio'
|
|
divAudio.appendChild(imgAudio);
|
|
divAudio.appendChild(pAudio);
|
|
|
|
const mainSectionDiv = HtmlUtils.getElementByIdOrFail<HTMLDivElement>('main-container');
|
|
mainSectionDiv.appendChild(divAudio);
|
|
|
|
const messageAudio : HTMLAudioElement = document.createElement('audio');
|
|
messageAudio.id = this.getHtmlMessageId(messageId);
|
|
messageAudio.autoplay = true;
|
|
messageAudio.style.display = 'none';
|
|
messageAudio.onended = () => {
|
|
divAudio.classList.remove('active');
|
|
messageAudio.remove();
|
|
setTimeout(() => {
|
|
divAudio.remove();
|
|
}, 1000);
|
|
}
|
|
messageAudio.onplay = () => {
|
|
divAudio.classList.add('active');
|
|
}
|
|
const messageAudioSource : HTMLSourceElement = document.createElement('source');
|
|
messageAudioSource.src = `${UPLOADER_URL}${urlMessage}`;
|
|
messageAudio.appendChild(messageAudioSource);
|
|
mainSectionDiv.appendChild(messageAudio);
|
|
}
|
|
|
|
private playTextMessage(messageId : string, htmlMessage: string){
|
|
//add button to clear message
|
|
const buttonText = document.createElement('p');
|
|
buttonText.id = 'button-clear-message';
|
|
buttonText.innerText = 'Clear';
|
|
|
|
const buttonMainConsole = document.createElement('div');
|
|
buttonMainConsole.classList.add('clear');
|
|
buttonMainConsole.appendChild(buttonText);
|
|
buttonMainConsole.addEventListener('click', () => {
|
|
messageContainer.style.top = '-80%';
|
|
setTimeout(() => {
|
|
messageContainer.remove();
|
|
buttonMainConsole.remove();
|
|
});
|
|
});
|
|
|
|
//create content message
|
|
const messageCotent = document.createElement('div');
|
|
messageCotent.innerHTML = htmlMessage;
|
|
messageCotent.className = "content-message";
|
|
|
|
//add message container
|
|
const messageContainer = document.createElement('div');
|
|
messageContainer.id = this.getHtmlMessageId(messageId);
|
|
messageContainer.className = "message-container";
|
|
messageContainer.appendChild(messageCotent);
|
|
messageContainer.appendChild(buttonMainConsole);
|
|
|
|
const mainSectionDiv = HtmlUtils.getElementByIdOrFail<HTMLDivElement>('main-container');
|
|
mainSectionDiv.appendChild(messageContainer);
|
|
}
|
|
|
|
private stopMessage(messageId: string){
|
|
HtmlUtils.removeElementByIdOrFail<HTMLDivElement>(this.getHtmlMessageId(messageId));
|
|
}
|
|
|
|
private getHtmlMessageId(messageId: string) : string{
|
|
return `message-${messageId}`;
|
|
}
|
|
}
|