@teamsparta/chat-ui
Version:
simple chat-ui
92 lines • 2.17 kB
JavaScript
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;