connect static method
- int id,
- int totalShards,
- GatewayApiOptions apiOptions,
- Uri connectionUri,
- NyxxGateway client
Connect to the Gateway using the provided parameters.
Implementation
static Future<Shard> connect(int id, int totalShards, GatewayApiOptions apiOptions, Uri connectionUri, NyxxGateway client) async {
final logger = Logger('${client.options.loggerName}.Shards[$id]');
final receivePort = ReceivePort('Shard #$id message stream (main)');
final receiveStream = receivePort.asBroadcastStream();
logger.fine('Spawning shard runner');
final isolate = await Isolate.spawn(
_isolateMain,
debugName: 'Shard #$id runner',
_IsolateSpawnData(
totalShards: totalShards,
id: id,
apiOptions: apiOptions,
originalConnectionUri: connectionUri,
sendPort: receivePort.sendPort,
),
);
final exitPort = ReceivePort('Shard #$id exit listener');
isolate.addOnExitListener(exitPort.sendPort);
exitPort.listen((_) {
logger.info('Shard exited');
receivePort.close();
exitPort.close();
});
final sendPort = await receiveStream.first as SendPort;
logger.fine('Shard runner ready');
return Shard(id, isolate, receiveStream, sendPort, client);
}