Files
teamspeak-obs-overlay/old_js/js/event_handlers.js
2023-06-04 15:50:48 +02:00

123 lines
4.9 KiB
JavaScript

// Handle the auth message event which is send by the client to init the session
// The clients send therefore all channels and clients to us
function handleAuthMessage(data) {
// Set channels and clients
for (let i = 0; i < data.payload.connections.length; i++) {
const newChannels = parseChannelInfos(data.payload.connections[i].channelInfos, data.payload.connections[i].id);
// Add all clients
const newClients = parseClientInfos(data.payload.connections[i].clientInfos, data.payload.connections[i].id);
for (let j = 0; j < newChannels.length; j++) {
channelList.add(newChannels[j]);
}
for (let j = 0; j < newClients.length; j++) {
clientList.add(newClients[j]);
}
}
// channelList.setItems(parseChannelInfos(data.payload.connections[0].channelInfos));
// clientList.setItems(parseClientInfos(data.payload.connections[0].clientInfos, data.payload.connectionId));
// The client of this current user
selfClient = clientList.getByIds(data.payload.connections[0].clientId, data.payload.connections[0].id);
}
// Handle the event when a client moved to another place/channel
// Also includes disconnecting and connecting of clients
function handleClientMoved(data) {
// Get our client object based on the target client id of this event
// This can be null if the client does not exist in our list (newly joined)
const client = clientList.getByIds(data.payload.clientId, data.payload.connectionId);
if (data.payload.newChannelId == 0) {
// If newChannelId is 0, the client left the server
// Client disconnected
if (client) {
console.log(`${client.name} disconnected`);
clientList.remove(client); // Remove disconnected client from clientList
}
// If the disconnected client is the current user
if (data.payload.clientId == selfClient.id) {
//* NOTE: since this app does support multiple servers yet, we expect the user to be connected to NO servers at this point
console.log("You disconnected");
clientList.clear(); // remove all clients.
channelList.clear();
}
} else {
// Client switched the channel OR JOINED the server to a channel
if (client) {
// Client just switched the channel
// Like described at the const client declaration, the client is not null therefore he already existed in our list/server
client.channel = channelList.getByIds(data.payload.newChannelId, data.payload.connectionId);
} else {
// Client joined the server
// Like described at the const client declaration, the client is null he is NEW in our list/server
clientList.add(
new Client(
data.payload.clientId,
data.payload.connectionId,
channelList.getByIds(data.payload.newChannelId, data.payload.connectionId),
data.payload.properties.nickname
)
);
}
}
}
// Handle the event where a client updates his properties (e.g. name, muteStatus)
function handleClientPropertiesUpdate(data) {
// Get our client object based on the target client id of this event
// This can be null if the client does not exist in our list
const client = clientList.getByIds(data.payload.clientId, data.payload.connectionId);
if (data.payload.properties.channelGroupInheritedChannelId == 0) {
if (client) {
clientList.remove(client);
}
} else {
if (client) {
// Update client properties
// Other to the handleClientMoved function this handleClientPropertiesUpdate function also gets called
// if anything at all happend to the client, so we update the channel here to be sure we dont miss anything
client.channel = channelList.getByIds(
data.payload.properties.channelGroupInheritedChannelId,
data.payload.connectionId
);
client.name = data.payload.properties.nickname;
client.inputMuted = data.payload.properties.inputMuted;
client.outputMuted = data.payload.properties.outputMuted;
} else {
// For some reason the client did not exist in our list. Add client, to prevent further errors.
console.log(data.payload.connectionId);
clientList.add(
new Client(
data.payload.clientId,
data.payload.connectionId,
channelList.getByIds(data.payload.properties.channelGroupInheritedChannelId, data.payload.connectionId),
data.payload.properties.nickname,
data.payload.properies.inputMuted,
data.payload.properies.outputMuted
)
);
}
}
}
// Gets called when a client starts talking
//* NOTE: If the "current self-user" is speaking but muted, this will still be called. This does not apply to foreign clients
function handleTalkStatusChanged(data) {
let client = clientList.getByIds(data.payload.clientId, data.payload.connectionId);
if (client) {
client.talkStatus = data.payload.status;
}
console.log(channelList);
console.log(clientList);
}
function handleClientSelfPropertyUpdated(data) {}