/// <summary> /// Used to spawn specific shards only /// </summary> /// <param name="properties">general gateway properties</param> /// <param name="shards">Which shards should this cluster spawn</param> public GatewayCluster(GatewayProperties properties, IEnumerable <int> shards) { if (shards == null) { throw new ArgumentException("shards cannot be null."); } messageSubject = new Subject <GatewayMessage>(); foreach (var i in shards) { var shardProperties = new GatewayProperties { Encoding = properties.Encoding, Compressed = properties.Compressed, Ratelimiter = properties.Ratelimiter, ShardCount = properties.ShardCount, ShardId = i, Token = properties.Token, Version = properties.Version, Intents = properties.Intents, AllowNonDispatchEvents = properties.AllowNonDispatchEvents, GatewayFactory = properties.GatewayFactory, SerializerOptions = properties.SerializerOptions, UseGatewayEvents = false }; var shard = properties.GatewayFactory(shardProperties); Shards.Add(i, shard); shard.PacketReceived.Subscribe(messageSubject.OnNext); } Events = new GatewayEventHandler(messageSubject, properties.SerializerOptions); }
public GatewayShard(GatewayProperties configuration) { tokenSource = new CancellationTokenSource(); connection = new GatewayConnection(configuration); if (configuration.UseGatewayEvents) { eventHandler = new GatewayEventHandler( PacketReceived, configuration.SerializerOptions); } }
/// <summary> /// Spawn all shards in a single cluster /// </summary> /// <param name="properties">general gateway properties</param> public GatewayCluster(GatewayProperties properties) : this(properties, Enumerable.Range(0, properties.ShardCount)) { }