connect static method
- NyxxGateway client,
- GatewayBot gatewayBot
Connect to the gateway using the provided client
and gatewayBot
configuration.
Implementation
static Future<Gateway> connect(NyxxGateway client, GatewayBot gatewayBot) async {
final logger = Logger('${client.options.loggerName}.Gateway');
final totalShards = client.apiOptions.totalShards ?? gatewayBot.shards;
final List<int> shardIds = client.apiOptions.shards ?? List.generate(totalShards, (i) => i);
logger
..info('Connecting ${shardIds.length}/$totalShards shards')
..fine('Shard IDs: $shardIds')
..fine(
'Gateway URL: ${gatewayBot.url}, Recommended Shards: ${gatewayBot.shards}, Max Concurrency: ${gatewayBot.sessionStartLimit.maxConcurrency},'
' Remaining Session Starts: ${gatewayBot.sessionStartLimit.remaining}, Reset After: ${gatewayBot.sessionStartLimit.resetAfter}',
);
assert(
shardIds.every((element) => element < totalShards),
'Shard ID exceeds total shard count',
);
assert(
shardIds.every((element) => element >= 0),
'Invalid shard ID',
);
assert(
shardIds.toSet().length == shardIds.length,
'Duplicate shard ID',
);
assert(
client.apiOptions.compression != GatewayCompression.payload || client.apiOptions.payloadFormat != GatewayPayloadFormat.etf,
'Cannot enable payload compression when using the ETF payload format',
);
final shards = shardIds.map((id) => Shard.connect(id, totalShards, client.apiOptions, gatewayBot.url, client));
return Gateway(client, gatewayBot, await Future.wait(shards), totalShards, shardIds);
}