コード例 #1
0
ファイル: GameStage.cs プロジェクト: Kaioru/Edelstein
        private async Task OnDispatch(DispatchContract contract)
        {
            var targets = GetUsers();
            var packet  = new UnstructuredOutgoingPacket();

            packet.WriteBytes(contract.Data.ToArray());

            if (contract.TargetCharacters.Count > 0)
            {
                targets = targets
                          .Where(u => contract.TargetCharacters.Contains(u.ID))
                          .ToList();
            }

            await Task.WhenAll(targets.Select(t => t.Dispatch(packet)));
        }
コード例 #2
0
        public DispatchService(IMessageBus messenger)
        {
            _messenger   = messenger;
            _dispatchers = new List <ChannelWriter <DispatchContract> >();

            _ = _messenger.SubscribeAsync <DispatchEvent>(async e =>
            {
                var contract = new DispatchContract {
                    Data = ByteString.CopyFrom(e.Data)
                };

                contract.TargetServers.Add(e.TargetServers);
                contract.TargetCharacters.Add(e.TargetCharacters);

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