import { io } from "socket.io-client"; import { connectToChannel, initDiscordBotClient, getVoiceChannelFromID, checkIfConnectedToVC, getVoiceConnectionFromGuild } from '../discordAudioBot/dab.mjs'; import { logIntoServerWrapper, sendNodeUpdateWrapper, nodeCheckStatus } from "./socketClientWrappers.mjs"; /** * Initialize the socket connection with the server, this will handle disconnects within itself * @param {Object} localNodeConfig The local node config object * @returns {any} */ export const initSocketConnection = async (localNodeConfig) => { const serverEndpoint = `http://${localNodeConfig.serverIp}:${localNodeConfig.serverPort}` || 'http://localhost:3000'; // Adjust the server endpoint const socket = io.connect(serverEndpoint); const discordClients = {}; socket.on('connect', async () => { console.log('Connected to the server'); await logIntoServerWrapper(socket, localNodeConfig); }); socket.on('node-join', async (joinData) => { console.log("Join requested: ", joinData) // TODO - Implement logic to control OP25 for the requested channel/system // Join the requested channel with the requested ID initDiscordBotClient(joinData.clientID, joinData.system, client => { getVoiceChannelFromID(client, joinData.channelID).then(vc => { // Add the client object to the IO instance discordClients[vc.guild.id] = client; const connection = connectToChannel(vc); console.log("Bot Connected to VC"); }) }); }); socket.on('node-leave', async (guildId) => { console.log("Leave requested"); if (await checkIfConnectedToVC(guildId)) { const connection = await getVoiceConnectionFromGuild(guildId); if (connection) { console.log("There is an open VC connection, closing it now"); // Destroy the open VC connection connection.destroy(); // Remove the client from the socket connection delete discordClients[guildId]; } } }); socket.on('node-get-discord-username', async (guildId, socketCallback) => { console.log("Requested username"); socketCallback(discordClients[guildId].user.username); }); socket.on('node-check-connected-status', nodeCheckStatus); socket.on('disconnect', () => { console.log('Disconnected from the server'); }); return socket; }