diff --git a/front/src/Stores/ChatStore.ts b/front/src/Stores/ChatStore.ts index 7e6375e5..b8d4ea7b 100644 --- a/front/src/Stores/ChatStore.ts +++ b/front/src/Stores/ChatStore.ts @@ -2,11 +2,13 @@ import { writable } from "svelte/store"; import { playersStore } from "./PlayersStore"; import type { PlayerInterface } from "../Phaser/Game/PlayerInterface"; import { iframeListener } from "../Api/IframeListener"; +import { Subject } from "rxjs"; export const chatVisibilityStore = writable(false); export const chatInputFocusStore = writable(false); -export const newChatMessageStore = writable(null); +const _newChatMessageSubject = new Subject(); +export const newChatMessageSubject = _newChatMessageSubject.asObservable(); export enum ChatMessageTypes { text = 1, @@ -67,10 +69,9 @@ function createChatMessagesStore() { }); }, addPersonnalMessage(text: string) { - //post message iframe listener iframeListener.sendUserInputChat(text); - newChatMessageStore.set(text); + _newChatMessageSubject.next(text); update((list) => { const lastMessage = list[list.length - 1]; if (lastMessage && lastMessage.type === ChatMessageTypes.me && lastMessage.text) { @@ -83,7 +84,6 @@ function createChatMessagesStore() { }); } - iframeListener.sendUserInputChat(text); return list; }); }, diff --git a/front/src/WebRtc/VideoPeer.ts b/front/src/WebRtc/VideoPeer.ts index c3a2af23..022a67dc 100644 --- a/front/src/WebRtc/VideoPeer.ts +++ b/front/src/WebRtc/VideoPeer.ts @@ -7,7 +7,7 @@ import type { UserSimplePeerInterface } from "./SimplePeer"; import { readable, Readable, Unsubscriber } from "svelte/store"; import { localStreamStore, obtainedMediaConstraintStore, ObtainedMediaStreamConstraints } from "../Stores/MediaStore"; import { playersStore } from "../Stores/PlayersStore"; -import { chatMessagesStore, newChatMessageStore } from "../Stores/ChatStore"; +import { chatMessagesStore, newChatMessageSubject } from "../Stores/ChatStore"; import { getIceServersConfig } from "../Components/Video/utils"; import { isMobile } from "../Enum/EnvironmentVariable"; @@ -35,7 +35,7 @@ export class VideoPeer extends Peer { public readonly streamStore: Readable; public readonly statusStore: Readable; public readonly constraintsStore: Readable; - private newMessageunsubscriber: Unsubscriber | null = null; + private newMessageSubscribtion: Subscription | undefined; private closing: Boolean = false; //this is used to prevent destroy() from being called twice private localStreamStoreSubscribe: Unsubscriber; private obtainedMediaConstraintStoreSubscribe: Unsubscriber; @@ -129,7 +129,7 @@ export class VideoPeer extends Peer { this._connected = true; chatMessagesStore.addIncomingUser(this.userId); - this.newMessageunsubscriber = newChatMessageStore.subscribe((newMessage) => { + this.newMessageSubscribtion = newChatMessageSubject.subscribe((newMessage) => { if (!newMessage) return; this.write( new Buffer( @@ -138,8 +138,7 @@ export class VideoPeer extends Peer { message: newMessage, }) ) - ); //send more data - newChatMessageStore.set(null); //This is to prevent a newly created SimplePeer to send an old message a 2nd time. Is there a better way? + ); }); }); @@ -262,7 +261,7 @@ export class VideoPeer extends Peer { this.closing = true; this.onBlockSubscribe.unsubscribe(); this.onUnBlockSubscribe.unsubscribe(); - if (this.newMessageunsubscriber) this.newMessageunsubscriber(); + this.newMessageSubscribtion?.unsubscribe(); chatMessagesStore.addOutcomingUser(this.userId); if (this.localStreamStoreSubscribe) this.localStreamStoreSubscribe(); if (this.obtainedMediaConstraintStoreSubscribe) this.obtainedMediaConstraintStoreSubscribe();