UNPKG

@teamsparta/chat-ui

Version:
94 lines (92 loc) 2.5 kB
class Observer { update() { // 상태 변화 시 호출되는 메서드 } } class MessageManager { static instance = null; constructor() { if (!MessageManager.instance) { this.observers = []; // Observer 객체들을 저장할 배열 this.messages = []; // 메시지를 저장 MessageManager.instance = this; } return MessageManager.instance; } subscribe(observer) { this.observers.push(observer); } unsubscribe(observer) { this.observers = this.observers.filter(obs => obs !== observer); } notify() { this.observers.forEach(observer => observer.update()); } addMessage(message) { this.messages.push(message); this.notify(); } addUserMessage(content, date = new Date()) { const newMessage ={ role: "user", content: content, date : date, } this.messages.push(newMessage); this.notify(); } addPeerMessage(content, profileSrc = null, date = new Date()) { const newMessage ={ role: "peer", profileSrc : profileSrc, content: content, date : date, } this.messages.push(newMessage); this.notify(); } addCustomMessage(content, date = new Date()) { const newMessage ={ role: "custom", content: content, date : date, } this.messages.push(newMessage); this.notify(); } streamMessage(message) { this.messages.pop(); this.messages.push(message); this.notify(); } streamPeerMessage(content, profileSrc = null, date = new Date()) { const newMessage ={ role: "peer", profileSrc : profileSrc, content: content, date : date, } this.messages.pop(); this.messages.push(newMessage); this.notify(); } getMessages() { return this.messages; } cleanMessage() { this.messages = []; } initMessages(initialMessages) { if (!this.messages.length) { this.messages = [...initialMessages]; } this.notify(); } static getInstance() { if (!MessageManager.instance) { MessageManager.instance = new MessageManager(); } return MessageManager.instance; } } export default MessageManager;