public override void Bind(DefaultGatewayDispatcher value) { base.Bind(value); // Gets or adds the map of events for the given dispatcher instance. _events = _eventsByDispatcher.GetOrAdd(Dispatcher, dispatcher => { var dictionary = new Dictionary <Type, AsynchronousEvent>(_eventsProperties.Length); for (var i = 0; i < _eventsProperties.Length; i++) { var property = _eventsProperties[i]; dictionary.Add(property.PropertyType.GenericTypeArguments[0], (AsynchronousEvent)property.GetValue(dispatcher)); } return(dictionary); }); // Some dispatches won't map to events (e.g. READY) or will map to multiple ones (e.g. GUILD_CREATE maps to GuildAvailable and JoinedGuild). if (typeof(TEventArgs) == typeof(EventArgs)) { return; } if (!_events.TryGetValue(typeof(TEventArgs), out var @event)) { throw new ArgumentException($"No {nameof(DefaultGatewayDispatcher)} event found matching the type of {nameof(TEventArgs)}."); } Event = (AsynchronousEvent <TEventArgs>)@event; }
public override void Bind(DefaultGatewayDispatcher value) { base.Bind(value); foreach (var id in Client.Shards.Keys) { InitialReadys.Add(id, new Tcs()); } }
public override void Bind(DefaultGatewayDispatcher value) { _guildMemberRemoveHandler = value[GatewayDispatchNames.GuildMemberRemove] as GuildMemberRemoveHandler; if (_guildMemberRemoveHandler != null) { _lastMemberIds = new(); } base.Bind(value); }
public override void Bind(DefaultGatewayDispatcher value) { _readyHandler = value["READY"] as ReadyHandler; base.Bind(value); }