You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.5 KiB
76 lines
1.5 KiB
const Logger = require('./Logger');
|
|
|
|
const logger = new Logger('Bot');
|
|
|
|
class Bot
|
|
{
|
|
static async create({ mediasoupRouter })
|
|
{
|
|
// Create a DirectTransport for connecting the bot.
|
|
const transport = await mediasoupRouter.createDirectTransport(
|
|
{
|
|
maxMessageSize : 512
|
|
});
|
|
|
|
// Create DataProducer to send messages to peers.
|
|
const dataProducer = await transport.produceData({ label: 'bot' });
|
|
|
|
// Create the Bot instance.
|
|
const bot = new Bot({ transport, dataProducer });
|
|
|
|
return bot;
|
|
}
|
|
|
|
constructor({ transport, dataProducer })
|
|
{
|
|
// mediasoup DirectTransport.
|
|
this._transport = transport;
|
|
|
|
// mediasoup DataProducer.
|
|
this._dataProducer = dataProducer;
|
|
}
|
|
|
|
get dataProducer()
|
|
{
|
|
return this._dataProducer;
|
|
}
|
|
|
|
close()
|
|
{
|
|
// No need to do anyting.
|
|
}
|
|
|
|
async handlePeerDataProducer({ dataProducerId, peer })
|
|
{
|
|
// Create a DataConsumer on the DirectTransport for each Peer.
|
|
const dataConsumer = await this._transport.consumeData(
|
|
{
|
|
dataProducerId
|
|
});
|
|
|
|
dataConsumer.on('message', (message, ppid) =>
|
|
{
|
|
// Ensure it's a WebRTC DataChannel string.
|
|
if (ppid !== 51)
|
|
{
|
|
logger.warn('ignoring non string messagee from a Peer');
|
|
|
|
return;
|
|
}
|
|
|
|
const text = message.toString('utf8');
|
|
|
|
logger.debug(
|
|
'SCTP message received [peerId:%s, size:%d]', peer.id, message.byteLength);
|
|
|
|
// Create a message to send it back to all Peers in behalf of the sending
|
|
// Peer.
|
|
const messageBack = `${peer.data.displayName} said me: "${text}"`;
|
|
|
|
this._dataProducer.send(messageBack);
|
|
});
|
|
}
|
|
}
|
|
|
|
module.exports = Bot;
|