@huddle01/web-core
Version:
The Huddle01 Javascript SDK offers a comprehensive suite of methods and event listeners that allow for seamless real-time audio and video communication with minimal coding required.
115 lines (112 loc) • 3.59 kB
JavaScript
import { mainLogger } from './chunk-TOCFOGTC.js';
import { EnhancedEventEmitter } from './chunk-BW2DGP4D.js';
// src/Bot.ts
var logger = mainLogger.createSubLogger("Bot");
var Bot = class extends EnhancedEventEmitter {
/**
* Bot Data Consumer
*/
__botDataConsumer;
/**
* Bot Data Producer
*/
__botDataProducer;
constructor(data) {
super();
this.__botDataConsumer = data.dataConsumer;
this.__botDataProducer = data.dataProducer;
this.__registerBotDataConsumerEvent();
if (this.__botDataProducer) {
this.__registerBotDataProducerEvent(this.__botDataProducer);
}
}
/**
* Register the bot data consumer event.
*/
__registerBotDataConsumerEvent = () => {
logger.info("\u{1F514} Setting a new data consumer");
try {
this.__botDataConsumer.on("message", (message) => {
try {
logger.debug("\u{1F514} Bot Data Message", message);
const parsedJsonData = JSON.parse(message);
if (parsedJsonData.label === "lastN") {
this.emit("active-speakers-change", {
peerIds: parsedJsonData?.payload?.activeSpeakers ?? []
});
return;
}
this.emit("received-volatile-data", parsedJsonData);
} catch (error) {
logger.error("\u274C Error in bot data consumer message", error);
}
});
this.__botDataConsumer.on("error", (err) => {
logger.error("\u274C Bot Data Consumer Error", err);
});
this.__botDataConsumer.on("open", () => {
logger.info("\u{1F514} Bot Data Consumer Opened");
});
this.__botDataConsumer.on("@close", () => {
logger.info("\u{1F514} Bot Data Consumer Closed");
});
} catch (error) {
logger.error("Error in setting data consumer", error);
}
};
/**
* Register the bot data producer event.
*/
__registerBotDataProducerEvent = (dataProducer) => {
logger.info("\u{1F514} Setting a new data producer");
try {
dataProducer.on("error", (err) => {
logger.error("\u274C Bot Data Producer Error", err);
});
dataProducer.on("open", () => {
logger.info("\u{1F514} Bot Data Producer Opened");
});
dataProducer.on("@close", () => {
logger.info("\u{1F514} Bot Data Producer Closed");
});
dataProducer.on("bufferedamountlow", () => {
logger.info("\u{1F514} Bot Data Producer bufferedamountlow");
});
} catch (error) {
logger.error("Error in setting data producer", error);
}
};
/**
* @description Send data to the bot data producer, if available
* @param data - Data to send {string}
* @returns {boolean} - Returns true if data is sent, cannot guarantee if data is received as its over UDP.
*/
sendData = (data) => {
try {
if (!this.__botDataProducer) {
throw new Error("Bot Data Producer is not available");
}
const payload = JSON.stringify(data);
logger.info("\u{1F514} Sending data to bot's producer", payload);
this.__botDataProducer.send(payload);
return true;
} catch (error) {
logger.error("\u274C Error in sending buffer", error);
return false;
}
};
close = () => {
try {
logger.info("\u{1F514} Closing Bot");
this.__botDataConsumer.close();
if (this.__botDataProducer) {
this.__botDataProducer.close();
}
this.removeAllListeners();
} catch (error) {
logger.error("\u274C Error in closing bot", error);
}
};
};
var Bot_default = Bot;
export { Bot_default };