예제 #1
0
        private static HttpMessageState ConfigureSendOrderState(HttpMessageState s, Log log, Random rng, string endPoint, string user)
        {
            var orderMessage = OrderMessage.GenerateRandomMessage("-1", rng);

            s.Name         = user + ", HttpMessageState::sendOrder";
            s.Uri          = endPoint + "/post-order";
            s.Message      = orderMessage;
            s.SetupMessage = (msg) =>
            {
                orderMessage.token = s.Context.Resolve <string>(UserTokenId);
                orderMessage.Randomize(s.Context.Resolve <Random>());

                s.Context.Register(MessageCountId, s.Context.Resolve <int>(MessageCountId) + 1);

                log?.Put(OutputLevel.Info, s.Name, "sending order with " + orderMessage.items.Length + " items.");
            };
            s.ProcessResponse = async(response) =>
            {
                if (response.IsSuccessStatusCode)
                {
                    var message = await response.Content.ReadAsStringAsync();

                    if (!string.IsNullOrEmpty(message))
                    {
                        var serverResponse = JsonSerializer.Deserialize <ServerResponse>(message);

                        s.Context.Register(AckCountId, s.Context.Resolve <int>(AckCountId) + 1);

                        /*if (serverResponse.timeStamp == orderMessage.timeStamp)
                         * {
                         *  s.Context.Register(AckCountId, s.Context.Resolve<int>(AckCountId) + 1);
                         * }*/
                    }
                    else
                    {
                        LogError(log, s.Context, s.Name + " send order received no ack");
                    }
                }
                else
                {
                    LogError(log, s.Context, s.Name + " send order with " + orderMessage.items.Length + " items, received error code."
                             + " - " + response.ReasonPhrase);
                }
            };
            s.SendMethod = RestMethod.POST;
            return(s);
        }