public static CachedMember GetOrAddMember(this IGatewayDispatcher dispatcher, ISynchronizedDictionary <Snowflake, CachedSharedUser> userCache, ISynchronizedDictionary <Snowflake, CachedMember> memberCache, Snowflake guildId, MemberJsonModel memberModel) { if (!memberModel.User.HasValue) { return(null); } var sharedUser = dispatcher.GetOrAddSharedUser(userCache, memberModel.User.Value); if (sharedUser == null) { return(null); } if (memberCache.TryGetValue(memberModel.User.Value.Id, out var member)) { member.Update(memberModel); return(member); } member = new CachedMember(sharedUser, guildId, memberModel); memberCache.Add(memberModel.User.Value.Id, member); return(member); }
public static CachedMember GetOrAddMember(this IGatewayDispatcher dispatcher, Snowflake guildId, MemberJsonModel memberModel) { if (!memberModel.User.HasValue) { return(null); } var sharedUser = dispatcher.GetOrAddSharedUser(memberModel.User.Value); if (sharedUser == null) { return(null); } if (dispatcher.Client.CacheProvider.TryGetMembers(guildId, out var cache)) { if (cache.TryGetValue(memberModel.User.Value.Id, out var member)) { member.Update(memberModel); return(member); } member = new CachedMember(sharedUser, guildId, memberModel); cache.Add(memberModel.User.Value.Id, member); return(member); } return(null); }
public DefaultGatewayClient( IOptions <DefaultGatewayClientConfiguration> options, ILogger <DefaultGatewayClient> logger, IGatewayCacheProvider cacheProvider, IGatewayChunker chunker, IGatewayDispatcher dispatcher, IGatewayApiClient apiClient) { Logger = logger; CacheProvider = cacheProvider; CacheProvider.Bind(this); Chunker = chunker; Chunker.Bind(this); Dispatcher = dispatcher; if (apiClient != null) { _apiClient = apiClient; Shards = new Dictionary <ShardId, IGatewayApiClient>(1) { [new ShardId(0, 1)] = apiClient }.ReadOnly(); apiClient.DispatchReceived += Dispatcher.HandleDispatchAsync; } else { Shards = new SynchronizedDictionary <ShardId, IGatewayApiClient>(); } Dispatcher.Bind(this); }
public static CachedSharedUser GetOrAddSharedUser(this IGatewayDispatcher dispatcher, ISynchronizedDictionary <Snowflake, CachedSharedUser> userCache, UserJsonModel model) { return(userCache.GetOrAdd(model.Id, static (_, tuple) => { var(client, model) = tuple; return new CachedSharedUser(client, model); }, (dispatcher.Client, model))); }
public DefaultGatewayClient( IOptions <DefaultGatewayClientConfiguration> options, ILogger <DefaultGatewayClient> logger, IGatewayCacheProvider cacheProvider, IGatewayChunker chunker, IGatewayDispatcher dispatcher) : this(options, logger, cacheProvider, chunker, dispatcher, null) { // This is the constructor DiscordClientSharder uses. }
public static IMember GetOrAddMemberTransient(this IGatewayDispatcher dispatcher, Snowflake guildId, MemberJsonModel memberModel) { if (!memberModel.User.HasValue) { return(null); } var member = dispatcher.GetOrAddMember(guildId, memberModel); return(member ?? new TransientMember(dispatcher.Client, guildId, memberModel) as IMember); }
public static IUser GetSharedOrTransientUser(this IGatewayDispatcher dispatcher, UserJsonModel model) { if (dispatcher.Client.CacheProvider.TryGetUsers(out var cache)) { if (cache.TryGetValue(model.Id, out var user)) { return(user); } } return(new TransientUser(dispatcher.Client, model)); }
public static CachedSharedUser GetOrAddSharedUser(this IGatewayDispatcher dispatcher, UserJsonModel model) { if (dispatcher.Client.CacheProvider.TryGetUsers(out var cache)) { return(cache.GetOrAdd(model.Id, static (_, tuple) => { var(client, model) = tuple; return new CachedSharedUser(client, model); }, (dispatcher.Client, model))); } return(null); }
public static IMember GetOrAddMemberTransient(this IGatewayDispatcher dispatcher, ISynchronizedDictionary <Snowflake, CachedSharedUser> userCache, ISynchronizedDictionary <Snowflake, CachedMember> memberCache, Snowflake guildId, MemberJsonModel memberModel) { if (!memberModel.User.HasValue) { return(null); } var member = dispatcher.GetOrAddMember(userCache, memberCache, guildId, memberModel); return(member ?? new TransientMember(dispatcher.Client, guildId, memberModel) as IMember); }