moved to /dispatch and fixed Voice chat

This commit is contained in:
PxlLoewe
2025-04-15 19:43:06 -07:00
parent d0c779b66e
commit fd4be984b0
35 changed files with 658 additions and 49 deletions

View File

@@ -22,8 +22,8 @@ type TalkState = {
disconnect: () => void;
room: Room | null;
};
const getToken = async () => {
const response = await fetch(`/api/livekit/token`);
const getToken = async (roomName: string) => {
const response = await fetch(`/api/livekit/token?roomName=${roomName}`);
const data = await response.json();
return data.token;
};
@@ -37,6 +37,8 @@ export const useAudioStore = create<TalkState>((set, get) => ({
room: null,
toggleTalking: () => set((state) => ({ isTalking: !state.isTalking })),
connect: async (roomName) => {
set({ state: "connecting" });
console.log("Connecting to room: ", roomName);
try {
// Clean old room
const connectedRoom = get().room;
@@ -46,14 +48,12 @@ export const useAudioStore = create<TalkState>((set, get) => ({
connectedRoom.removeAllListeners();
}
set({ state: "connecting" });
const url = process.env.NEXT_PUBLIC_LIVEKIT_URL;
if (!url) return console.error("NEXT_PUBLIC_LIVEKIT_URL not set");
const token = await getToken();
const token = await getToken(roomName);
if (!token) throw new Error("Fehlende Berechtigung");
console.log("Token: ", token);
const room = new Room();
const room = new Room({});
await room.prepareConnection(url, token);
room
// Connection events
@@ -75,6 +75,8 @@ export const useAudioStore = create<TalkState>((set, get) => ({
.on(RoomEvent.ActiveSpeakersChanged, handleActiveSpeakerChange)
.on(RoomEvent.LocalTrackUnpublished, handleLocalTrackUnpublished);
await room.connect(url, token);
console.log(room);
set({ room });
interval = setInterval(() => {
set({
remoteParticipants:

View File

@@ -1,6 +1,6 @@
import { create } from "zustand";
import { ChatMessage } from "@repo/db";
import { socket } from "(dispatch)/socket";
import { socket } from "dispatch/socket";
interface ChatStore {
ownId: null | string;

View File

@@ -1,5 +1,5 @@
import { create } from "zustand";
import { socket } from "../(dispatch)/socket";
import { socket } from "../dispatch/socket";
interface ConnectionStore {
isConnected: boolean;
@@ -12,7 +12,7 @@ interface ConnectionStore {
disconnect: () => void;
}
export const useConnectionStore = create<ConnectionStore>((set) => ({
export const useDispatchConnectionStore = create<ConnectionStore>((set) => ({
isConnected: false,
selectedZone: "LST_01",
connect: async (uid, selectedZone, logoffTime) =>
@@ -34,8 +34,8 @@ export const useConnectionStore = create<ConnectionStore>((set) => ({
}));
socket.on("connect", () => {
useConnectionStore.setState({ isConnected: true });
useDispatchConnectionStore.setState({ isConnected: true });
});
socket.on("disconnect", () => {
useConnectionStore.setState({ isConnected: false });
useDispatchConnectionStore.setState({ isConnected: false });
});

View File

@@ -1,5 +1,5 @@
import { create } from "zustand";
import { socket } from "../(dispatch)/socket";
import { socket } from "../dispatch/socket";
export const stationStore = create((set) => {
return {