コード例 #1
0
ファイル: GameStage.cs プロジェクト: Kaioru/Edelstein
        private Task OnGuildUpdate(GuildUpdateContract contract)
        {
            var guild     = new Guild(contract.Guild);
            var memberIDs = guild.Members
                            .Select(m => m.ID)
                            .ToImmutableList();
            var users = GetUsers()
                        .Where(u => u.FieldUser != null)
                        .Select(u => u.FieldUser)
                        .Where(u => u.Guild?.ID == guild.ID || memberIDs.Contains(u.ID))
                        .ToImmutableList();

            users.ForEach(u => u.Guild = memberIDs.Contains(u.ID) ? guild : null);
            return(Task.CompletedTask);
        }
コード例 #2
0
ファイル: GuildService.cs プロジェクト: Kaioru/Edelstein
        public GuildService(ICacheClient cache, IMessageBus messenger, IDataStore store)
        {
            _messenger  = messenger;
            _locker     = new ScopedLockProvider(new CacheLockProvider(cache, messenger), GuildLockScope);
            _repository = new GuildRepository(cache, store);
            _channels   = new List <ChannelWriter <GuildUpdateContract> >();

            _ = _messenger.SubscribeAsync <GuildUpdateEvent>(async e =>
            {
                var contract = new GuildUpdateContract {
                    Guild = e.Guild.ToContract()
                };

                await Task.WhenAll(_channels.Select(async d => await d.WriteAsync(contract)));
            });
        }