46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import { getPublicUser, HpgState, prisma, User } from "@repo/db";
|
|
import { Socket, Server } from "socket.io";
|
|
|
|
interface PTTData {
|
|
shouldTransmit: boolean;
|
|
source: string;
|
|
}
|
|
|
|
export const handleConnectDesktop = (socket: Socket, io: Server) => () => {
|
|
const user = socket.data.user as User;
|
|
|
|
socket.join(`user:${user.id}`);
|
|
socket.join(`desktop:${user.id}`);
|
|
|
|
socket.on("ptt", async (data: PTTData) => {
|
|
socket.to(`user:${user.id}`).emit("ptt", data);
|
|
const connectedAircraft = await prisma.connectedAircraft.findFirst({
|
|
where: {
|
|
userId: user.id,
|
|
logoutTime: null,
|
|
},
|
|
include: {
|
|
Station: true,
|
|
},
|
|
});
|
|
|
|
const connectedDispatcher = await prisma.connectedDispatcher.findFirst({
|
|
where: {
|
|
userId: user.id,
|
|
logoutTime: null,
|
|
},
|
|
});
|
|
const otherPttData = {
|
|
publicUser: getPublicUser(user),
|
|
source:
|
|
connectedAircraft?.Station.bosCallsignShort || connectedDispatcher
|
|
? "Leitstelle"
|
|
: user.publicId,
|
|
};
|
|
if (data.shouldTransmit) {
|
|
socket.to("pilots").emit("other-ptt", otherPttData);
|
|
socket.to("pilots").emit("other-ptt", otherPttData);
|
|
}
|
|
});
|
|
};
|