Esempio n. 1
0
        private Task OnPartyUpdate(PartyUpdateContract contract)
        {
            var party     = new Party(contract.Party);
            var memberIDs = party.Members
                            .Select(m => m.ID)
                            .ToImmutableList();
            var users = GetUsers()
                        .Where(u => u.FieldUser != null)
                        .Select(u => u.FieldUser)
                        .Where(u => u.Party?.ID == party.ID || memberIDs.Contains(u.ID))
                        .ToImmutableList();

            users.ForEach(u => u.Party = memberIDs.Contains(u.ID) ? party : null);
            return(Task.CompletedTask);
        }
Esempio n. 2
0
        public PartyService(
            ICacheClient cache,
            IMessageBus messenger,
            IDataStore store,
            IDispatchService dispatcher
            )
        {
            _messenger  = messenger;
            _locker     = new ScopedLockProvider(new CacheLockProvider(cache, messenger), PartyLockScope);
            _dispatcher = dispatcher;
            _repository = new PartyRepository(cache, store);
            _channels   = new List <ChannelWriter <PartyUpdateContract> >();

            _ = _messenger.SubscribeAsync <PartyUpdateEvent>(async e =>
            {
                var contract = new PartyUpdateContract {
                    Party = e.Party.ToContract()
                };

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