Esempio n. 1
0
        public void TestMethod1()
        {
            var initialInventory = new RealTimeInventory("ticketsections-100", 10, 0, 0);
            var serverOptions    = new InventoryServerOptions()
            {
                InitialInventory        = initialInventory,
                InventoryActorAddress   = "akka.tcp://InventoryService-Server@localhost:10000/user/InventoryActor",
                ServerEndPoint          = "http://*:10088/",
                StorageType             = typeof(InMemory),
                ServerActorSystemName   = "InventoryService-Server",
                ServerActorSystemConfig = @"
                  akka.actor{provider= ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""}
                  akka.remote.helios.tcp {
                      transport-class =""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
                      port = 10000
                      transport-protocol = tcp
                      hostname = ""localhost""
                  }
              "
            };

            using (var server = new InventoryServiceServer(new TestPerformanceService(), new NullBackUp(), serverOptions))
            {
                var mySystem       = Akka.Actor.ActorSystem.Create("mySystem", ConfigurationFactory.ParseString(@"
                  akka.actor{provider= ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""}
                  akka.remote.helios.tcp {
                      transport-class =""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
                      port = 0
                      transport-protocol = tcp
                      hostname = ""localhost""
                  }
              "));
                var inventoryActor = mySystem.ActorSelection(serverOptions.InventoryActorAddress);

                var result =
                    server.inventoryActor.Ask <IInventoryServiceCompletedMessage>(new ReserveMessage(
                                                                                      initialInventory.ProductId, 20));

                result.ConfigureAwait(false);

                Task.WaitAll(result);

                if (result.Result.Successful)
                {
                    Console.WriteLine(result.Result.RealTimeInventory);
                }
                else
                {
                    Console.WriteLine(result.Result.RealTimeInventory);
                }
            }
        }
Esempio n. 2
0
        public void TestMethod2()
        {
            var serverOptions = new InventoryServerOptions()
            {
                InventoryActorAddress   = "akka.tcp://InventoryService-Server@localhost:10000/user/InventoryActor",
                ServerEndPoint          = "http://*:10088/",
                StorageType             = typeof(InMemory),
                ServerActorSystemName   = "InventoryService-Server",
                ServerActorSystemConfig = @"
                  akka.actor{provider= ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""}
                  akka.remote.helios.tcp {
                      transport-class =""Akka.Remote.Transport.Helios.HeliosTcpTransport, Akka.Remote""
                      port = 10000
                      transport-protocol = tcp
                      hostname = ""localhost""
                  }
              "
            };
            var InventoryserviceServer = new InventoryServiceServer(new TestPerformanceService(), new NullBackUp(), serverOptions);

            var res  = InventoryserviceServer.inventoryActor.Path;
            var res2 = InventoryserviceServer.inventoryActor.Ask(new GetInventoryMessage("sample")).Result;
        }
Esempio n. 3
0
        private RealTimeInventory RunSomeInventoryOperationUsingEventsAsync(List <Tuple <int, RealTimeInventory, int> > events, InventoryServiceServer testHelper)
        {
            var operations2 = InventoryServiceSpecificationHelper.GetOperations(testHelper);

            Task <IInventoryServiceCompletedMessage> currentInventoryAfterLastOperationResult = null;

            foreach (var @event in events)
            {
                currentInventoryAfterLastOperationResult = operations2[@event.Item1](@event.Item2, @event.Item3);
            }
            var currentInventoryAfterLastOperation = currentInventoryAfterLastOperationResult.WaitAndGetOperationResult().RealTimeInventory;

            return(currentInventoryAfterLastOperation as RealTimeInventory);
        }
Esempio n. 4
0
        public static Dictionary <int, Func <RealTimeInventory, int, Task <IInventoryServiceCompletedMessage> > > GetOperations(InventoryServiceServer testHelper)
        {
            var operations = new Dictionary <int, Func <RealTimeInventory, int, Task <IInventoryServiceCompletedMessage> > >
            {
                {
                    1, (product, update) =>
                    {
                        var reservationResult = testHelper.ReserveAsync(product, update);
                        return(reservationResult);
                    }
                },
                {
                    2, (product, update) =>
                    {
                        var reservationResult = testHelper.UpdateQuantityAsync(product, update);
                        return(reservationResult);
                    }
                },
                {
                    3, (product, update) =>
                    {
                        var reservationResult = testHelper.PlaceHoldAsync(product, update);
                        return(reservationResult);
                    }
                },
                {
                    4, (product, update) =>
                    {
                        var reservationResult = testHelper.UpdateQuantityAndHoldAsync(product, update);
                        return(reservationResult);
                    }
                },
                {
                    5, (product, update) =>
                    {
                        var reservationResult = testHelper.PurchaseAsync(product, update);
                        return(reservationResult);
                    }
                },
                {
                    6, (product, update) =>
                    {
                        var reservationResult = testHelper.PurchaseFromHoldsAsync(product, update);
                        return(reservationResult);
                    }
                }
            };

            return(operations);
        }
Esempio n. 5
0
        private void btnExecute_Click(object sender, EventArgs e)
        {
            try
            {
                var productName = "productName";
                var inventory   = new RealTimeInventory(
                    productName,
                    Convert.ToInt32(InitialQuantity.Text),
                    Convert.ToInt32(InitialReservation.Text),
                    Convert.ToInt32(InitialHold.Text));
                InventoryServiceServer helper = new InventoryServiceServer(new TestPerformanceService(), new NullBackUp(), new InventoryServerOptions()
                {
                    StorageType       = typeof(Storage.InMemoryLib.InMemory),
                    InitialInventory  = inventory,
                    ClientActorSystem = ActorSystem
                });

                var t = helper.ReserveAsync(ActorSystem.ActorSelection(textBox1.Text), 1);

                var task = ActorSystem.ActorSelection(textBox1.Text).ResolveOne(TimeSpan.FromSeconds(5));
                // task.ConfigureAwait(false);

                task.ContinueWith(r =>
                {
                    IInventoryServiceCompletedMessage result = null;
                    var newUpdate = Convert.ToInt32(NewQuantity.Text);
                    switch (cmbOoperation.SelectedItem.ToString())
                    {
                    case "ReadInventory":
                        result = helper.GetInventoryAsync(productName).WaitAndGetOperationResult();
                        break;

                    case "Reserve":
                        result = helper.ReserveAsync(inventory, newUpdate).WaitAndGetOperationResult();
                        break;

                    case "UpdateQuantity":
                        result = helper.UpdateQuantityAsync(inventory, newUpdate).WaitAndGetOperationResult();
                        break;

                    case "UpdateQuantityAndHold":
                        result = helper.UpdateQuantityAndHoldAsync(inventory, newUpdate).WaitAndGetOperationResult();
                        break;

                    case "PlaceHold":
                        result = helper.PlaceHoldAsync(inventory, newUpdate).WaitAndGetOperationResult();
                        break;

                    case "Purchase":
                        result = helper.PurchaseAsync(inventory, newUpdate).WaitAndGetOperationResult();
                        break;

                    case "PurchaseFromHolds":
                        result = helper.PurchaseFromHoldsAsync(inventory, newUpdate).WaitAndGetOperationResult();
                        break;
                    }

                    if (result != null)
                    {
                        ResultQuantity.Text    = result.RealTimeInventory.Quantity.ToString();
                        ResultHold.Text        = result.RealTimeInventory.Holds.ToString();
                        ResultReservation.Text = result.RealTimeInventory.Reserved.ToString();

                        if (!result.Successful)
                        {
                            var errorMessage       = result as InventoryOperationErrorMessage;
                            var list               = new List <string>();
                            var aggregateException = errorMessage?.Error;
                            if (aggregateException != null)
                            {
                                list.Add(aggregateException.ErrorMessage);
                            }
                            richTextBox1.Text = errorMessage?.Error?.ErrorMessage + " - " + string.Join(" ", list);
                        }
                        else
                        {
                            richTextBox1.Text = "";
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                richTextBox1.Text = ex.Message + ex?.InnerException?.Message;
            }
        }