示例#1
0
        public override ValueTask <ThreadCreatedEventArgs> HandleDispatchAsync(IGatewayApiClient shard, ChannelJsonModel model)
        {
            IThreadChannel thread;

            if (CacheProvider.TryGetChannels(model.GuildId.Value, out var channelCache))
            {
                thread = channelCache.AddOrUpdate(model.Id,
                                                  (_, tuple) =>
                {
                    var(client, model) = tuple;
                    return(new CachedThreadChannel(client, model));
                },
                                                  (_, tuple, oldThread) =>
                {
                    var(_, model) = tuple;
                    oldThread.Update(model);
                    return(oldThread);
                }, (Client, model)) as IThreadChannel;
            }
            else
            {
                thread = new TransientThreadChannel(Client, model);
            }

            var e = new ThreadCreatedEventArgs(thread);

            return(new(e));
        }
示例#2
0
        public override ValueTask <ThreadDeletedEventArgs> HandleDispatchAsync(IGatewayApiClient shard, ChannelJsonModel model)
        {
            IThreadChannel thread;

            if (CacheProvider.TryGetChannels(model.GuildId.Value, out var channelCache) && channelCache.TryRemove(model.Id, out var cachedThread))
            {
                thread = cachedThread as CachedThreadChannel;
            }
            else
            {
                thread = new TransientThreadChannel(Client, model);
            }

            //  TODO: Pass removed messages to e?
            CacheProvider.TryRemoveCache <CachedUserMessage>(model.Id, out _);

            var e = new ThreadDeletedEventArgs(thread);

            return(new(e));
        }
示例#3
0
        public override ValueTask <ThreadUpdatedEventArgs> HandleDispatchAsync(IGatewayApiClient shard, ChannelJsonModel model)
        {
            CachedThreadChannel oldThread;
            IThreadChannel      newThread;

            if (CacheProvider.TryGetChannels(model.GuildId.Value, out var channelCache) && channelCache.TryGetValue(model.Id, out var cachedThread))
            {
                newThread = cachedThread as CachedThreadChannel;
                oldThread = cachedThread.Clone() as CachedThreadChannel;
                newThread.Update(model);
            }
            else
            {
                oldThread = null;
                newThread = new TransientThreadChannel(Client, model);
            }

            var e = new ThreadUpdatedEventArgs(oldThread, newThread);

            return(new(e));
        }