コード例 #1
0
        protected async Task RunPromptingLoop()
        {
            while (!StopToken.IsCancellationRequested)
            {
                var timeGap = TimeSpan.FromMilliseconds(Res.GetRandomCoefficient(GapMean, GapSigma));
                //await Task.Delay(timeGap);
                if (StopToken.IsCancellationRequested)
                {
                    break;                                    // Just so that a "stop" doesn't mean "do one last cue" it means stop right away.
                }
                // TODO: Later on, this won't just be a plain random draw.
                var offenseKey         = MeleeBetaActivity.OFFENSE;
                var defenseKey         = MeleeBetaActivity.DEFENSE;
                var offendersMoveIndex = StaticRandom.Next(4);
                var defendersMoveIndex = AppropriateParries[offendersMoveIndex];
                var goTime             = DateTime.Now + timeGap;

                ExchangeOfBlows exchange;
                if (Res.CoinFlip)
                {
                    exchange = new ExchangeOfBlows()
                    {
                        CueTime          = goTime,
                        ExchangeID       = Guid.NewGuid(),
                        MyClassifierKey  = offenseKey,
                        MyGestureIndex   = offendersMoveIndex,
                        OppClassifierKey = defenseKey,
                        OppGestureIndex  = defendersMoveIndex
                    };
                }
                else
                {
                    exchange = new ExchangeOfBlows()
                    {
                        CueTime          = goTime,
                        ExchangeID       = Guid.NewGuid(),
                        MyClassifierKey  = defenseKey,
                        MyGestureIndex   = defendersMoveIndex,
                        OppClassifierKey = offenseKey,
                        OppGestureIndex  = offendersMoveIndex
                    };
                }

                // Now actually send out the event.
                OnExchangeChosen.Raise(exchange);

                await Task.WhenAny(readyToProceed.WaitAsync(), StopToken.AsTask()).Result;
            }
        }