get messages + client id from ws

This commit is contained in:
2025-06-07 13:36:08 +02:00
parent 988534ed01
commit 85a223d573
7 changed files with 75 additions and 30 deletions

View File

@@ -1,5 +1,5 @@
<script lang="ts">
import type { IMessage } from '$lib/message';
import type { IMessage } from '$lib/message.svelte';
interface Props {
message: IMessage;

37
src/lib/message.svelte.ts Normal file
View File

@@ -0,0 +1,37 @@
import { getContext, setContext } from "svelte";
export interface IMessage {
senderId: number;
content: string;
};
export class MessageStore {
#clientId: number = $state(-1);
messages: IMessage[] = $state([]);
constructor(messages: IMessage[]) {
this.messages = messages;
}
setClientId(id: number) {
this.#clientId = id;
}
getClientId() {
return this.#clientId;
}
addMessage(message: IMessage) {
this.messages.push(message);
}
}
const MESSAGE_CONTEXT_SYMBOL = Symbol('MESSAGE_STORE');
export function setMessageStore(messages: IMessage[]): MessageStore {
return setContext(MESSAGE_CONTEXT_SYMBOL, new MessageStore(messages));
}
export function getMessageStore(): MessageStore {
return getContext(MESSAGE_CONTEXT_SYMBOL);
}

View File

@@ -1,4 +0,0 @@
export interface IMessage {
senderId: number;
content: string;
};

View File

@@ -1,8 +1,12 @@
import { MessageStore, type IMessage } from './message.svelte';
export class ChatSocket {
#socket: WebSocket;
#store: MessageStore;
constructor(url: string) {
constructor(url: string, store: MessageStore) {
this.#socket = new WebSocket(url);
this.#store = store;
this.#socket.onopen = (e) => {
this.#onOpen(e);
@@ -30,7 +34,15 @@ export class ChatSocket {
}
#onMessage(e: MessageEvent) {
console.log('onMessage', e);
const regex = /^\d+$/;
if (regex.test(e.data)) {
this.#store.setClientId(parseInt(e.data));
return;
}
const message: IMessage = JSON.parse(e.data);
this.#store.addMessage(message);
}
#onClose(e: CloseEvent) {