diff --git a/frontend/src/app/pages/altitude/chat/objects/server-state.object.ts b/frontend/src/app/pages/altitude/chat/objects/server-state.object.ts new file mode 100644 index 0000000..a9177d3 --- /dev/null +++ b/frontend/src/app/pages/altitude/chat/objects/server-state.object.ts @@ -0,0 +1,14 @@ +export interface User { + uuid: string; + name: string; + styledName: string; +} + +export interface Server { + name: string; + players: User[]; +} + +export interface ServerState { + servers: Server[]; +} diff --git a/frontend/src/app/pages/altitude/chat/service/chat.service.ts b/frontend/src/app/pages/altitude/chat/service/chat.service.ts index 21867f3..2f0ad47 100644 --- a/frontend/src/app/pages/altitude/chat/service/chat.service.ts +++ b/frontend/src/app/pages/altitude/chat/service/chat.service.ts @@ -8,6 +8,7 @@ import {precomputeNode} from '@pages/altitude/chat/mini-message/mini-message.uti import {ChatChannel} from '@pages/altitude/chat/objects/chat-channel.object'; import {NotificationService} from '@pages/altitude/chat/service/chat-notification.service'; import {ChatInfoService} from '@api'; +import {ServerState} from '@pages/altitude/chat/objects/server-state.object'; interface SsePayloadEvent { data: string; @@ -24,6 +25,8 @@ export class ChatService implements OnDestroy { public readonly channels = computed(() => this._channels().sort((a, b) => a.name.localeCompare(b.name))); private readonly _selectedChannel = signal(null); public readonly selectedChannel = this._selectedChannel.asReadonly() + private readonly _serverState = signal(null); + public readonly serverState = this._serverState.asReadonly(); public readonly partieMap = signal>(new Map()); public readonly userNameMap = signal>(new Map()); private readonly pendingPartyNameRequests = new Set(); @@ -78,6 +81,11 @@ export class ChatService implements OnDestroy { }); }); + this.on(source, 'server-state', (event) => { + const state = JSON.parse(event.data) as ServerState; + this._serverState.set(state); + }); + source.onerror = (err) => { console.error('SSE error, polyfill will auto-reconnect:', err); };