Beispiel #1
0
 public void Client()
 {
     using (var server = new TcpRpcServer())
         using (var client = new TcpRpcClient())
         {
             Assert.IsFalse(client.IsComputing);
             Assert.IsFalse(client.IsWaitingForData);
             Assert.AreEqual(0L, client.SendCount);
             Assert.AreEqual(0L, client.RecvCount);
             Assert.ThrowsException <InvalidOperationException>(() => client.GetMain <ITestInterface>());
             Assert.ThrowsException <ArgumentNullException>(() => client.AttachTracer(null));
             Assert.ThrowsException <ArgumentNullException>(() => client.InjectMidlayer(null));
             (var addr, int port) = TcpManager.Instance.GetLocalAddressAndPort();
             server.StartAccepting(addr, port);
             client.Connect(addr.ToString(), port);
             Assert.ThrowsException <InvalidOperationException>(() => client.Connect(addr.ToString(), port));
             Assert.IsTrue(client.WhenConnected.Wait(MediumNonDbgTimeout));
             Assert.ThrowsException <InvalidOperationException>(() => client.AttachTracer(new FrameTracing.RpcFrameTracer(Console.Out, false)));
             Assert.ThrowsException <InvalidOperationException>(() => client.InjectMidlayer(_ => _));
             Assert.AreEqual(port, client.RemotePort);
             Assert.IsTrue(client.LocalPort != 0);
             Assert.AreEqual(0L, client.SendCount);
             Assert.AreEqual(0L, client.RecvCount);
             Assert.IsTrue(SpinWait.SpinUntil(() => client.IsWaitingForData, MediumNonDbgTimeout));
             ((IConnection)client).Close();
             Assert.IsTrue(SpinWait.SpinUntil(() => client.State == ConnectionState.Down, MediumNonDbgTimeout));
         }
 }
        public void BasicClient()
        {
            LaunchCompatTestProcess("server:Interface", stdout =>
            {
                using (var client = new TcpRpcClient("localhost", TcpPort))
                {
                    client.WhenConnected.Wait();

                    using (var main = client.GetMain <ITestInterface>())
                    {
                        var request1 = main.Foo(123, true, default);
                        var request3 = Assert.ThrowsExceptionAsync <RpcException>(() => main.Bar(default));
                        var s        = new TestAllTypes();
                        Common.InitTestMessage(s);
                        var request2 = main.Baz(s, default);

                        AssertOutput(stdout, "foo 123 1");
                        Assert.IsTrue(request1.Wait(MediumNonDbgTimeout));
                        Assert.AreEqual("foo", request1.Result);

                        Assert.IsTrue(request2.Wait(MediumNonDbgTimeout));

                        AssertOutput(stdout, "baz");
                        AssertOutput(stdout, "baz fin");
                        Assert.IsTrue(request3.Wait(MediumNonDbgTimeout));
                    }
Beispiel #3
0
        public async Task <List <Common.IdInformation> > GetAvailableServicesAsync()
        {
            //access climate services
            using (TcpRpcClient regClient = new TcpRpcClient("login01.cluster.zalf.de", 10001))
            {
                await Task.WhenAll(regClient.WhenConnected);

                var climateServices = new List <Common.IdInformation>();

                using var registry = regClient.GetMain <Mas.Rpc.Service.IRegistry>();
                var services = await registry.GetAvailableServices(
                    new Service.Registry.Query()
                {
                    which = Service.Registry.Query.WHICH.Type,
                    Type  = Service.ServiceType.climate
                }
                    );

                foreach (var entry in services)
                {
                    using var climateService = ((Mas.Rpc.Common.Identifiable_Proxy)entry.Service).Cast <Mas.Rpc.Climate.IService>(true);
                    var serviceInfo = await climateService.Info();

                    climateServices.Add(serviceInfo);
                }

                return(climateServices);
            }
        }
Beispiel #4
0
        static async Task Main(string[] args)
        {
            if (args.Length > 0)
            {
                var pair = new EnginePair();
                pair.Engine1.Main = new CapnpEchoService();
                var echoer = (CapabilityReflection.CreateProxy <IEchoer>(pair.Endpoint2.QueryMain()) as IEchoer);

                await Run(echoer);
            }
            else
            {
                using var server = new TcpRpcServer();
                server.Main      = new CapnpEchoService();
                server.AddBuffering();
                server.StartAccepting(IPAddress.Any, 5002);
                using var client = new TcpRpcClient();
                client.AddBuffering();
                client.Connect("localhost", 5002);
                await client.WhenConnected;
                using var echoer = client.GetMain <IEchoer>();

                await Run(echoer);
            }
        }
Beispiel #5
0
 public void ConnectNoServer()
 {
     (var addr, int port) = TcpManager.Instance.GetLocalAddressAndPort();
     using (var client = new TcpRpcClient(addr.ToString(), port))
     {
         Assert.IsTrue(Assert.ThrowsExceptionAsync <RpcException>(() => client.WhenConnected).Wait(10000));
     }
 }
        protected TcpRpcClient SetupClient()
        {
            var client = new TcpRpcClient();

            client.AddBuffering();
            client.Connect("localhost", TcpPort);
            return(client);
        }
        /// <summary>
        /// Somewhat ugly helper method which ensures that both Tcp client and server
        /// are waiting for data reception from each other. This is a "balanced" state, meaning
        /// that nothing will ever happen in the RcpEngines without some other thread requesting
        /// anything.
        /// </summary>
        protected void WaitClientServerIdle(TcpRpcServer server, TcpRpcClient client)
        {
            var conn = server.Connections[0];

            SpinWait.SpinUntil(() => conn.IsWaitingForData && client.IsWaitingForData &&
                               conn.RecvCount == client.SendCount &&
                               conn.SendCount == client.RecvCount,
                               MediumNonDbgTimeout);
        }
Beispiel #8
0
 public void Setup()
 {
     _client = new TcpRpcClient("localhost", 5002);
     if (BufferSize > 0)
     {
         _client.AddBuffering(BufferSize);
     }
     _client.WhenConnected.Wait();
     _echoer  = _client.GetMain <IEchoer>();
     _payload = new byte[PayloadBytes];
     new Random().NextBytes(_payload);
 }
Beispiel #9
0
        public async Task <List <string> > GetMetaPlusDataAsync(string serviceId)
        {
            using (TcpRpcClient regClient = new TcpRpcClient("login01.cluster.zalf.de", 10001))
            {
                await Task.WhenAll(regClient.WhenConnected);

                var climateServices = new List <Common.IdInformation>();

                using var registry = regClient.GetMain <Mas.Rpc.Service.IRegistry>();
                var services = await registry.GetAvailableServices(
                    new Service.Registry.Query()
                {
                    which = Service.Registry.Query.WHICH.Type,
                    Type  = Service.ServiceType.climate
                }
                    );

                var metaPlusData = new List <string>();

                foreach (var entry in services)
                {
                    using var climateService = ((Mas.Rpc.Common.Identifiable_Proxy)entry.Service).Cast <Mas.Rpc.Climate.IService>(true);
                    var serviceInfo = await climateService.Info();

                    if (serviceInfo.Id == serviceId)
                    {
                        var datasets = await climateService.GetAvailableDatasets();

                        //var datasets = await climateService.GetDatasetsFor()
                        foreach (var metaPlus in datasets)
                        {
                            using var info = metaPlus.Meta.Info;
                            var allMetaInfos = await info.ForAll();

                            var metaStr = allMetaInfos.
                                          Select(x => "[" + x.Snd.Id + "|" + x.Snd.Name + "|" + x.Snd.Description + "]").
                                          Aggregate((acc, str) => acc + ", " + str);
                            metaPlusData.Add(metaStr);
                        }
                    }
                }

                return(metaPlusData);
            }
        }
Beispiel #10
0
        public void ScatteredTransfer()
        {
            using (var server = new TcpRpcServer(IPAddress.Any, TcpPort))
                using (var client = new TcpRpcClient())
                {
                    server.InjectMidlayer(s => new ScatteringStream(s, 7));
                    client.InjectMidlayer(s => new ScatteringStream(s, 10));
                    client.Connect("localhost", TcpPort);
                    client.WhenConnected.Wait();

                    var counters = new Counters();
                    server.Main = new TestInterfaceImpl(counters);
                    using (var main = client.GetMain <ITestInterface>())
                    {
                        for (int i = 0; i < 100; i++)
                        {
                            var request1 = main.Foo(123, true, default);
                            var request3 = Assert.ThrowsExceptionAsync <RpcException>(() => main.Bar(default));
Beispiel #11
0
        public void Server3()
        {
            using (var server = new TcpRpcServer())
            {
                server.Main = new TestInterfaceImpl2();
                var tracer = new FrameTracing.RpcFrameTracer(Console.Out);
                server.OnConnectionChanged += (s, a) =>
                {
                    a.Connection.Close();
                };

                (var addr, int port) = TcpManager.Instance.GetLocalAddressAndPort();
                server.StartAccepting(addr, port);

                var client1 = new TcpRpcClient(addr.ToString(), port);
                Assert.IsTrue(client1.WhenConnected.Wait(MediumNonDbgTimeout));
                Assert.IsTrue(SpinWait.SpinUntil(() => client1.State == ConnectionState.Down, MediumNonDbgTimeout));
            }
        }
Beispiel #12
0
        protected static TcpRpcClient SetupClient(IPAddress addr, int port, TcpRpcTestOptions options = TcpRpcTestOptions.None)
        {
            var client = new TcpRpcClient();

            client.AddBuffering();
            if (options.HasFlag(TcpRpcTestOptions.ClientTracer))
            {
                client.AttachTracer(new FrameTracing.RpcFrameTracer(Console.Out, false));
            }
            if (options.HasFlag(TcpRpcTestOptions.ClientFluctStream))
            {
                client.InjectMidlayer(s => new FluctStream(s));
            }
            if (!options.HasFlag(TcpRpcTestOptions.ClientNoConnect))
            {
                client.Connect(addr.ToString(), port);
            }
            return(client);
        }
        public void ScatteredTransfer()
        {
            (var addr, int port) = TcpManager.Instance.GetLocalAddressAndPort();

            using (var server = new TcpRpcServer(addr, port))
                using (var client = new TcpRpcClient())
                {
                    server.InjectMidlayer(s => new ScatteringStream(s, 7));
                    client.InjectMidlayer(s => new ScatteringStream(s, 10));
                    client.Connect(addr.ToString(), port);
                    //client.WhenConnected.Wait();

                    var counters = new Counters();
                    server.Main = new TestInterfaceImpl(counters);
                    using (var main = client.GetMain <ITestInterface>())
                    {
                        for (int i = 0; i < 100; i++)
                        {
                            var request1 = main.Foo(123, true, default);
                            var request3 = Assert.ThrowsExceptionAsync <RpcException>(() => main.Bar(default));
        static async Task Main(string[] args)
        {
            using var server = new TcpRpcServer();
            server.Main      = new CapnpEchoService();
            server.AddBuffering();
            server.StartAccepting(IPAddress.Any, 5002);
            using var client = new TcpRpcClient("localhost", 5002);
            await client.WhenConnected;

            using var echoer = client.GetMain <IEchoer>();
            var payload = new byte[20];

            new Random().NextBytes(payload);

            while (true)
            {
                var result = await echoer.Echo(payload);

                if (result.Count != payload.Length)
                {
                    throw new InvalidOperationException("Echo server malfunction");
                }
            }
        }
Beispiel #15
0
        static async Task Main(string[] args)
        {
            using (var conMan = new Mas.Infrastructure.Common.ConnectionManager())
            {
                if (args.Length > 0 && args[0] == "client")
                {
                    //*
                    using (var monicaClient = new TcpRpcClient("localhost", 6666))
                        using (var csvTimeSeriesClient = new TcpRpcClient("localhost", 11002))
                        {
                            await Task.WhenAll(csvTimeSeriesClient.WhenConnected, monicaClient.WhenConnected);

                            using var timeSeries = csvTimeSeriesClient.GetMain <Mas.Rpc.Climate.ITimeSeries>();

                            var y = await timeSeries.Data();

                            string envJson = System.IO.File.ReadAllText(@"data\monica\env.json");

                            using var monica = monicaClient.GetMain <Mas.Rpc.Model.IEnvInstance <Mas.Rpc.Common.StructuredText, Mas.Rpc.Common.StructuredText> >();
                            //var minfo = await monica.Info();
                            //Console.WriteLine("id: " + minfo.Id + " name: " + minfo.Name);

                            var res = await monica.Run(
                                new Mas.Rpc.Model.Env <Mas.Rpc.Common.StructuredText>()
                            {
                                Rest = new Mas.Rpc.Common.StructuredText()
                                {
                                    Structure = new Mas.Rpc.Common.StructuredText.structure()
                                    {
                                        which = Mas.Rpc.Common.StructuredText.structure.WHICH.Json
                                    },
                                    Value = envJson
                                },
                                TimeSeries = Proxy.Share(timeSeries)
                            }
                                );

                            var data = await timeSeries.Data();

                            int x = 0;
                            foreach (var d in data)
                            {
                                x += d.Count;
                            }
                            Console.WriteLine("data.Count=" + data.Count + " should be: " + data.Count * 7 + " is: " + x);
                            Console.WriteLine("\n");
                        }
                    return;
                    //*/


                    /*
                     * var admin = (await conMan.Connect("capnp://insecure@nb-berg-9550:10001/5ea7896b-e2ea-4f63-8ad0-03ecafc35082")).Cast<Mas.Rpc.Registry.IAdmin>(true);
                     * var registry = await admin.Registry();
                     * var addSucc = await admin.AddCategory(new Mas.Rpc.Common.IdInformation() { Id = "test1", Name = "Test1 Name", Description = "Test1 Description" }, false);
                     * var cats = await registry.SupportedCategories();
                     * foreach(var cat in cats)
                     *  Console.WriteLine(cat.Name);
                     * //*/

                    /*
                     * //access climate services
                     * using (TcpRpcClient regClient = new TcpRpcClient("login01.cluster.zalf.de", 10001))
                     * //using (TcpRpcClient client = new TcpRpcClient("192.168.111.202", 11111))
                     * {
                     *  await Task.WhenAll(regClient.WhenConnected);
                     *
                     *  using var registry = regClient.GetMain<Mas.Rpc.Service.IRegistry>();
                     *  var services = await registry.GetAvailableServices(
                     *      new Service.Registry.Query() {
                     *          which = Service.Registry.Query.WHICH.Type,
                     *          Type = Service.ServiceType.climate
                     *      }
                     *  );
                     *  foreach (var entry in services)
                     *  {
                     *      using var climateService = ((Mas.Rpc.Common.Identifiable_Proxy)entry.Service).Cast<Mas.Rpc.Climate.IService>(true);
                     *      var serviceInfo = await climateService.Info();
                     *      Console.WriteLine("Service id:" + serviceInfo.Id + " name:" + serviceInfo.Name);
                     *      var datasets = await climateService.GetAvailableDatasets();
                     *      foreach (var metaPlusData in datasets)
                     *      {
                     *          using var info = metaPlusData.Meta.Info;
                     *          var allMetaInfos = await info.ForAll();
                     *          var metaStr = allMetaInfos.
                     *              Select(x => "[" + x.Snd.Id + "|" + x.Snd.Name + "|" + x.Snd.Description + "]").
                     *              Aggregate((acc, str) => acc + ", " + str);
                     *          Console.WriteLine(metaStr);
                     *          using var dataset = metaPlusData.Data;
                     *          using var timeSeries = await dataset.ClosestTimeSeriesAt(
                     *              new Geo.Coord()
                     *              {
                     *                  Latlon = new Geo.LatLonCoord() { Lat = 53.0, Lon = 12.5 }
                     *              }
                     *           );
                     *          var (start, end) = await timeSeries.Range();
                     *          var startDate = new DateTime(start.Year, start.Month, start.Day);
                     *          var header = await timeSeries.Header();
                     *          var headerLine = header.Select(elem => elem.ToString()).Aggregate((acc, str) => acc + ", " + str);
                     *          Console.WriteLine(headerLine);
                     *          var data = await timeSeries.Data();
                     *          foreach (var (day, index) in data.Take(10).Select((Value, Index) => ValueTuple.Create(Value, Index)))
                     *          {
                     *              var currentDate = startDate.AddDays(index);
                     *              var dataLine = day.Select(elem => elem.ToString()).Aggregate((acc, str) => acc + ", " + str);
                     *              Console.WriteLine(currentDate.ToShortDateString() + ", " + dataLine);
                     *          }
                     *      }
                     *  }
                     *
                     *  //return;
                     * }
                     * //*/


                    /*
                     * using (TcpRpcClient client = new TcpRpcClient("localhost", 11111))
                     * //using (TcpRpcClient client = new TcpRpcClient("192.168.111.202", 11111))
                     * {
                     *  await Task.WhenAll(client.WhenConnected);
                     *
                     *  var service = client.GetMain<Mas.Rpc.IA>();
                     *
                     *  var res = await service.Method("_________________method_PARAM_____________________");
                     *
                     *  Console.WriteLine(res);
                     *
                     *  return;
                     * }
                     * //*/

                    /*
                     * //using (var csvTimeSeriesClient = new TcpRpcClient("login01.cluster.zalf.de", 11002))
                     * //using (var monicaClient = new TcpRpcClient("login01.cluster.zalf.de", 10002))
                     * using (var monicaClient = new TcpRpcClient("localhost", 6666))
                     * //using (var monicaClient = new TcpRpcClient("login01.cluster.zalf.de", 10003))
                     * //using (var regClient = new TcpRpcClient("login01.cluster.zalf.de", 10001))
                     * using (var csvTimeSeriesClient = new TcpRpcClient("localhost", 11002))
                     * {
                     *  await Task.WhenAll(regClient.WhenConnected, monicaClient.WhenConnected);
                     *  using var registry = regClient.GetMain<Mas.Rpc.Service.IRegistry>();
                     *  var services = await registry.availableServices(
                     *      new Service.Registry.Query()
                     *      {
                     *          which = Service.Registry.Query.WHICH.Type,
                     *          Type = Service.ServiceType.climate
                     *      }
                     *  );
                     *  if (services.Count() > 0)
                     *  {
                     *      var entry = services[0];
                     *      using var climateService = ((Mas.Rpc.Common.Identifiable_Proxy)entry.Service).Cast<Mas.Rpc.Climate.IService>(true);
                     *      var serviceInfo = await climateService.Info();
                     *      Console.WriteLine("Service id:" + serviceInfo.Id + " name:" + serviceInfo.Name);
                     *      var datasets = await climateService.GetAvailableDatasets();
                     *      if (datasets.Count() > 0)
                     *      {
                     *          var metaPlusData = datasets[0];
                     *          using var info = metaPlusData.Meta.Info;
                     *          var allMetaInfos = await info.ForAll();
                     *          var metaStr = allMetaInfos.
                     *              Select(x => "[" + x.Snd.Id + "|" + x.Snd.Name + "|" + x.Snd.Description + "]").
                     *              Aggregate((acc, str) => acc + ", " + str);
                     *          Console.WriteLine(metaStr);
                     *          using var dataset = metaPlusData.Data;
                     *          using var timeSeries = await dataset.ClosestTimeSeriesAt(
                     *              new Geo.Coord()
                     *              {
                     *                  Latlon = new Geo.LatLonCoord() { Lat = 53.0, Lon = 12.5 }
                     *              }
                     *           );
                     *
                     *          string envJson = System.IO.File.ReadAllText(@"data\monica\env.json");
                     *
                     *          using var monica = monicaClient.GetMain<Model.IEnvInstance<Common.StructuredText, Common.StructuredText>>();
                     *          //var minfo = await monica.Info();
                     *          //Console.WriteLine("id: " + minfo.Id + " name: " + minfo.Name);
                     *
                     *          var res = await monica.Run(
                     *              new Model.Env<Common.StructuredText>()
                     *              {
                     *                  Rest = new Common.StructuredText()
                     *                  {
                     *                      Structure = new Common.StructuredText.structure() { which = Common.StructuredText.structure.WHICH.Json },
                     *                      Value = envJson
                     *                  },
                     *                  TimeSeries = Proxy.Share(timeSeries)
                     *              }
                     *          );
                     *
                     *          var data = await timeSeries.Data();
                     *          int x = 0;
                     *          foreach (var d in data)
                     *          {
                     *              x += d.Count;
                     *          }
                     *          Console.WriteLine("data.Count=" + data.Count + " should be: " + data.Count * 7 + " is: " + x);
                     *          Console.WriteLine("\n");
                     *
                     *      }
                     *  }
                     * }
                     * return;
                     * //*/


                    /*
                     * //using (TcpRpcClient client = new TcpRpcClient("localhost", 10001))
                     * using (TcpRpcClient client = new TcpRpcClient("login01.cluster.zalf.de", 10001))
                     * {
                     *  await Task.WhenAll(client.WhenConnected);
                     *
                     *  using var registry = client.GetMain<Mas.Rpc.Service.IRegistry>();
                     *
                     *  var services = await registry.GetAvailableServices(
                     *      new Service.Registry.Query()
                     *      {
                     *          which = Service.Registry.Query.WHICH.Type,
                     *          Type = Service.ServiceType.soil
                     *      }
                     *  );
                     *
                     *  foreach (var entry in services)
                     *  {
                     *      using var soilService = ((Mas.Rpc.Common.Identifiable_Proxy)entry.Service).Cast<Mas.Rpc.Soil.IService>(true);
                     *      var serviceInfo = await soilService.Info();
                     *      Console.WriteLine("Service id:" + serviceInfo.Id + " name:" + serviceInfo.Name);
                     *      var allParams = await soilService.GetAllAvailableParameters(true);
                     *      Console.WriteLine("soilService.getAllAvailableParameters(true) -> ");
                     *      Console.WriteLine("mandatory:");
                     *      foreach (var m in allParams.Item1)
                     *      {
                     *          Console.WriteLine("\t" + m);
                     *      }
                     *      Console.WriteLine("optional:");
                     *      foreach (var o in allParams.Item2)
                     *      {
                     *          Console.WriteLine("\t" + o);
                     *      }
                     *      Console.WriteLine("---------------------------------");
                     *
                     *      var profiles = await soilService.ProfilesAt(
                     *          new Geo.LatLonCoord() { Lat = 53.0, Lon = 12.5 },
                     *          new Soil.Query()
                     *          {
                     *              Mandatory = new Soil.PropertyName[]
                     *          {
                     *      Soil.PropertyName.sand, Soil.PropertyName.clay, Soil.PropertyName.bulkDensity, Soil.PropertyName.organicCarbon
                     *          },
                     *              Optional = new Soil.PropertyName[] { Soil.PropertyName.pH },
                     *              OnlyRawData = false
                     *          }
                     *      );
                     *      Console.WriteLine("soilService.profileAt(...) -> ");
                     *      Console.WriteLine("profiles[0]:");
                     *      foreach (var profile in profiles)
                     *      {
                     *          Console.WriteLine("percentageOfArea: " + profile.PercentageOfArea);
                     *          foreach (var it in profile.Layers.Select((Value, Index) => new { Value, Index }))
                     *          {
                     *              Console.WriteLine("Layer " + it.Index + ":");
                     *              foreach (var prop in it.Value.Properties)
                     *              {
                     *                  Func<Soil.Layer.Property, String> show = x =>
                     *                  {
                     *                      switch (x.which)
                     *                      {
                     *                          case Soil.Layer.Property.WHICH.F32Value: return x.F32Value.ToString();
                     *                          case Soil.Layer.Property.WHICH.BValue: return x.BValue.ToString();
                     *                          case Soil.Layer.Property.WHICH.Type: return x.Type.ToString();
                     *                          default: return "unknown";
                     *                      }
                     *                  };
                     *                  Console.WriteLine("\t" + prop.Name + " = " + show(prop));
                     *              }
                     *          }
                     *      }
                     *      Console.WriteLine("---------------------------------");
                     *
                     *  }
                     *  //var res = await service.Method("_________________method_PARAM_____________________");
                     *
                     *  //Console.WriteLine(res);
                     *
                     *  return;
                     * }
                     * //*/


                    /*
                     * using (TcpRpcClient soilServiceClient = new TcpRpcClient("localhost", 6003))
                     * //using (TcpRpcClient soilServiceClient = new TcpRpcClient("127.0.0.1", 6003))
                     * //using (TcpRpcClient soilServiceClient = new TcpRpcClient("login01.cluster.zalf.de", 6003))
                     * {
                     *  await Task.WhenAll(soilServiceClient.WhenConnected);
                     *
                     *  var service = soilServiceClient.GetMain<Mas.Rpc.Soil.IService>();
                     *
                     *  var allParams = await service.GetAllAvailableParameters(true);
                     *  Console.WriteLine("soilService.getAllAvailableParameters(true) -> ");
                     *  Console.WriteLine("mandatory:");
                     *  foreach (var m in allParams.Item1)
                     *  {
                     *      Console.WriteLine(m);
                     *  }
                     *  Console.WriteLine("optional:");
                     *  foreach (var o in allParams.Item2)
                     *  {
                     *      Console.WriteLine(o);
                     *  }
                     *  Console.WriteLine("---------------------------------");
                     *
                     *  var profiles = await service.ProfilesAt(
                     *      new Geo.LatLonCoord() { Lat = 53.0, Lon = 12.5 },
                     *      new Soil.Query()
                     *      {
                     *          Mandatory = new Soil.PropertyName[]
                     *      {
                     *          Soil.PropertyName.sand, Soil.PropertyName.clay, Soil.PropertyName.bulkDensity, Soil.PropertyName.organicCarbon
                     *      },
                     *          Optional = new Soil.PropertyName[] { Soil.PropertyName.pH },
                     *          OnlyRawData = false
                     *      }
                     *  );
                     *  Console.WriteLine("soilService.profileAt(...) -> ");
                     *  Console.WriteLine("profiles[0]:");
                     *  foreach (var profile in profiles)
                     *  {
                     *      Console.WriteLine("percentageOfArea: " + profile.PercentageOfArea);
                     *      foreach (var it in profile.Layers.Select((Value, Index) => new {Value, Index}))
                     *      {
                     *          Console.WriteLine("Layer " + it.Index + ":");
                     *          foreach (var prop in it.Value.Properties)
                     *          {
                     *              Func<Soil.Layer.Property, String> show = x =>
                     *              {
                     *                  switch (x.which)
                     *                  {
                     *                      case Soil.Layer.Property.WHICH.F32Value: return x.F32Value.ToString();
                     *                      case Soil.Layer.Property.WHICH.BValue: return x.BValue.ToString();
                     *                      case Soil.Layer.Property.WHICH.Type: return x.Type.ToString();
                     *                      default: return "unknown";
                     *                  }
                     *              };
                     *              Console.WriteLine("\t" + prop.Name + " = " + show(prop));
                     *          }
                     *      }
                     *  }
                     *  Console.WriteLine("---------------------------------");
                     *  return;
                     *
                     *  var query = new Soil.Query()
                     *  {
                     *      Mandatory = new Soil.PropertyName[]
                     *      {
                     *          Soil.PropertyName.sand, Soil.PropertyName.clay, Soil.PropertyName.bulkDensity, Soil.PropertyName.organicCarbon
                     *      },
                     *      Optional = new Soil.PropertyName[] { Soil.PropertyName.pH },
                     *      OnlyRawData = false
                     *  };
                     *  var locs = await service.AllLocations(query);
                     *  var latlonAndCap = locs[0];
                     *  var capList = latlonAndCap.Snd;
                     *  var p = await capList[0].Cap();
                     *
                     *  //var data = await ts.Data();
                     *  //int x = 0;
                     *  //foreach (var d in data)
                     *  //{
                     *  //x += d.Count;
                     *  //}
                     *  //Console.WriteLine("data.Count=" + data.Count + " should be: " + data.Count * 7 + " is: " + x);
                     *  Console.WriteLine("\n");
                     * }
                     * //*/


                    /*
                     * using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("login01.cluster.zalf.de", 11002))
                     * //using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("localhost", 11002))
                     * //using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("10.10.24.206", 11002))
                     * {
                     *  await Task.WhenAll(csvTimeSeriesClient.WhenConnected);
                     *
                     *  var ts = csvTimeSeriesClient.GetMain<Mas.Rpc.ClimateData.IListTests>();
                     *
                     *  var testLI32_2 = await ts.TestLI32();
                     *  var testLI32_2_Count = testLI32_2.Count;
                     *  var testLI32_2_Sum = testLI32_2.Sum();
                     *
                     *
                     *  var receivedBytes = 0;
                     *  for (var i = 1; i < 10000; i++)
                     *  {
                     *      var testLI32 = await ts.TestLI32();
                     *      var testLI32_Count = testLI32.Count;
                     *      receivedBytes += testLI32_Count * 4;
                     *      var testLI32_Sum_Soll = testLI32_Count * 1;
                     *      var testLI32_Sum = testLI32.Sum();
                     *      Console.WriteLine("Count: " + testLI32_Count
                     + " ok?: " + (testLI32_Sum == testLI32_Sum_Soll)
                     + " received bytes so far: " + receivedBytes);
                     +  }
                     +  //var testLI32_2 = await ts.TestLI32();
                     +  //var testLI32_2_Count = testLI32_2.Count;
                     +  //var testLI32_2_Sum = testLI32_2.Sum();
                     +  var testLI32_3 = await ts.TestLI32();
                     +  var testLI32_3_Count = testLI32_3.Count;
                     +  var testLI32_3_Sum = testLI32_3.Sum();
                     +  //var testLLI32 = await ts.TestLLI32();
                     +  //int testLLI32_Count = 0;
                     +  //int testLLI32_Soll = testLLI32.Count * 7;
                     +  //foreach (var d in testLLI32)
                     +  //{
                     +  //    testLLI32_Count += d.Count;
                     +  //}
                     +
                     +  var testLF32 = await ts.TestLF32();
                     +  var testLF32_Count = testLF32.Count;
                     +  var testLLF32 = await ts.TestLLF32();
                     +  int testLLF32_Count = 0;
                     +  int testLLF32_Soll = testLLF32.Count * 7;
                     +  foreach (var d in testLLF32)
                     +  {
                     +      testLLF32_Count += d.Count;
                     +  }
                     +
                     +  //var testLI32_2 = await ts.TestLI32();
                     +  //var testLI32_Count_2 = testLI32_2.Count;
                     +
                     +  //Console.WriteLine("data.Count=" + data.Count + " should be: " + data.Count * 7 + " is: " + x);
                     +  Console.WriteLine("\n");
                     + }
                     + //*/


                    /*
                     * using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("login01.cluster.zalf.de", 11000))
                     * //using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("localhost", 11002))
                     * {
                     *  await Task.WhenAll(csvTimeSeriesClient.WhenConnected);
                     *
                     *  var ts = csvTimeSeriesClient.GetMain<Mas.Rpc.ClimateData.ITimeSeries>();
                     *  var data = await ts.Data();
                     *  int x = 0;
                     *  foreach(var d in data)
                     *  {
                     *      x += d.Count;
                     *  }
                     *  Console.WriteLine("data.Count=" + data.Count + " should be: " + data.Count*7 + " is: " + x);
                     *  Console.WriteLine("\n");
                     * }
                     * //*/

                    /*
                     * using (TcpRpcClient climateDataServiceClient = new TcpRpcClient("login01.cluster.zalf.de", 11001))
                     * {
                     *  await Task.WhenAll(climateDataServiceClient.WhenConnected);
                     *
                     *  var service = climateDataServiceClient.GetMain<Mas.Rpc.ClimateData.IService>();
                     *  var sims = await service.GetAvailableSimulations();
                     *  var sim = sims[0];
                     *  var scens = await sim.Scenarios();
                     *  var scen = scens[0];
                     *  var reals = await scen.Realizations();
                     *  var real = reals[0];
                     *  var coord = new Geo.Coord();
                     *  coord.Latlon = new Geo.LatLonCoord();
                     *  coord.Latlon.Lat = 46.51412;
                     *  coord.Latlon.Lon = 12.81895;
                     *  var tss = await real.ClosestTimeSeriesAt(coord);
                     *  var ts = tss[0];
                     *  var data = await ts.Data();
                     *  Console.WriteLine(data.Count);
                     * }
                     * //*/

                    /*
                     * using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("localhost", 11000),
                     *  adminMasterClient = new TcpRpcClient("10.10.24.186", 8000))
                     * {
                     *  await Task.WhenAll(csvTimeSeriesClient.WhenConnected, adminMasterClient.WhenConnected);
                     *
                     *  //csv_time_series = capnp.TwoPartyClient("localhost:11000").bootstrap().cast_as(
                     *  //climate_data_capnp.TimeSeries)
                     *  var adminMaster = adminMasterClient.GetMain<Cluster.IAdminMaster>();
                     *  var factories = await adminMaster.AvailableModels();
                     *  if (factories.Count > 0)
                     *  {
                     *      var factory = factories[0];
                     *      var instanceCapHolder = factory.NewInstance().Eager<Mas.Rpc.Common.ICapHolder<object>>();
                     *      var envInstance = ((BareProxy)(await instanceCapHolder.Cap())).Cast<Mas.Rpc.Model.IEnvInstance>(true);
                     *      //var envInstance = ((BareProxy)(await instanceCapHolder.Cap())).Cast<Mas.Rpc.Model.IEnvInstance>(true);
                     *      var infos = await envInstance.Info();
                     *      Console.WriteLine(infos.ToString());
                     *      //modelRes.PseudoEager<Mas.Rpc.Model.IEnvInstance>();
                     *      //var x = modelRes.PseudoEager();
                     *
                     *      Console.WriteLine("Hello World!");
                     *
                     *      auto monica = modelRes.getCap().getAs<rpc::Model::EnvInstance>();
                     *      //auto monica = cap.getAs<rpc::Model::EnvInstance>();
                     *      //auto monica = capHolder.capRequest().send().wait(waitScope).getCap(); //<rpc::Model::EnvInstance>().;
                     *      //auto monicaId = monica.infoRequest().send().wait(waitScope).getInfo().getId();
                     *      monica.infoRequest().send().then([](auto && res) {
                     *          cout << "monicaId: " << res.getInfo().getId().cStr() << endl;
                     *      }).wait(waitScope);
                     *      //auto monicaId = monicaRes.getInfo().getId().cStr();
                     *      //cout << "monicaId: " << monicaId << endl;
                     *      //auto sturdyRef = capHolder.saveRequest().send().wait(waitScope).getSturdyRef();
                     *      instanceCapHolder.saveRequest().send().then([](auto && res) {
                     *          cout << "sturdyRef: " << res.getSturdyRef().cStr() << endl;
                     *      }).wait(waitScope);
                     *      //auto sturdyRefP = instanceCapHolder.saveRequest().send().wait(waitScope);// .getSturdyRef();
                     *
                     *  }
                     *
                     * var csvTimeSeries = csvTimeSeriesClient.GetMain<Climate.ITimeSeries>();
                     * var header = csvTimeSeries.Header();
                     * header.Wait();
                     * var elems = header.Result;
                     * foreach(var elem in elems)
                     * {
                     * Console.WriteLine(elem);
                     * }
                     * //csvTimeSeries.WhenResolved.Wait(3000);
                     *
                     * //SpinWait.SpinUntil(() => server.ConnectionCount > 0, MediumTimeout);
                     * //Assert.AreEqual(1, server.ConnectionCount);
                     *
                     * //server.Main = new ProvidedCapabilityMock();
                     * //var main = client.GetMain<BareProxy>();
                     * //var resolving = main as IResolvingCapability;
                     * //Assert.IsTrue(resolving.WhenResolved.Wait(MediumTimeout));
                     * }
                     * //*/
                }
                else if (args.Length > 0 && args[0] == "server")
                {
                    /*
                     * using (TcpRpcClient runtimeClient = new TcpRpcClient("10.10.24.186", 9000),
                     *  adminMasterClient = new TcpRpcClient("10.10.24.186", 8000))
                     *
                     * //using (client)
                     * {
                     *  await Task.WhenAll(csvTimeSeriesClient.WhenConnected, adminMasterClient.WhenConnected);
                     *
                     *  //csv_time_series = capnp.TwoPartyClient("localhost:11000").bootstrap().cast_as(
                     *  //climate_data_capnp.TimeSeries)
                     *  var adminMaster = adminMasterClient.GetMain<Cluster.IAdminMaster>();
                     *  var factories = await adminMaster.AvailableModels();
                     *  if (factories.Count > 0)
                     *
                     *
                     * }
                     *      using (var server = new TcpRpcServer(IPAddress.Any, TcpPort))
                     * {
                     *  Console.WriteLine($"starting server at localhost:{TcpPort}");
                     *  server.Main = new Mas.Rpc.Monica.SlurmMonicaInstanceFactory("MONICA v3", "C:\\Users}\berg.ZALF-AD\\GitHub\\monica\\_cmake_vs2019_win64\\Debug\\monica-capnp-server.exe", "localhost", 10000);
                     *  Console.WriteLine($"after");
                     * }
                     */
                }
                Console.WriteLine("Hello World!");
            }
        }
Beispiel #16
0
        public async Task <List <Climate.IService> > test(string serviceId)
        {
            using (TcpRpcClient client = new TcpRpcClient("login01.cluster.zalf.de", 10001))
            {
                await Task.WhenAll(client.WhenConnected);

                using var registry = client.GetMain <Mas.Rpc.Service.IRegistry>();

                var services = await registry.GetAvailableServices(
                    new Service.Registry.Query()
                {
                    which = Service.Registry.Query.WHICH.Type,
                    Type  = Service.ServiceType.soil
                }
                    );

                foreach (var entry in services)
                {
                    using var soilService = ((Mas.Rpc.Common.Identifiable_Proxy)entry.Service).Cast <Mas.Rpc.Soil.IService>(true);
                    var serviceInfo = await soilService.Info();

                    Console.WriteLine("Service id:" + serviceInfo.Id + " name:" + serviceInfo.Name);
                    var allParams = await soilService.GetAllAvailableParameters(true);

                    Console.WriteLine("soilService.getAllAvailableParameters(true) -> ");
                    Console.WriteLine("mandatory:");
                    foreach (var m in allParams.Item1)
                    {
                        Console.WriteLine("\t" + m);
                    }
                    Console.WriteLine("optional:");
                    foreach (var o in allParams.Item2)
                    {
                        Console.WriteLine("\t" + o);
                    }
                    Console.WriteLine("---------------------------------");

                    var profiles = await soilService.ProfilesAt(
                        new Geo.LatLonCoord()
                    {
                        Lat = 53.0, Lon = 12.5
                    },
                        new Soil.Query()
                    {
                        Mandatory = new Soil.PropertyName[]
                        {
                            Soil.PropertyName.sand, Soil.PropertyName.clay, Soil.PropertyName.bulkDensity, Soil.PropertyName.organicCarbon
                        },
                        Optional    = new Soil.PropertyName[] { Soil.PropertyName.pH },
                        OnlyRawData = false
                    }
                        );

                    Console.WriteLine("soilService.profileAt(...) -> ");
                    Console.WriteLine("profiles[0]:");
                    foreach (var profile in profiles)
                    {
                        Console.WriteLine("percentageOfArea: " + profile.PercentageOfArea);
                        foreach (var it in profile.Layers.Select((Value, Index) => new { Value, Index }))
                        {
                            Console.WriteLine("Layer " + it.Index + ":");
                            foreach (var prop in it.Value.Properties)
                            {
                                Func <Soil.Layer.Property, String> show = x =>
                                {
                                    switch (x.which)
                                    {
                                    case Soil.Layer.Property.WHICH.F32Value: return(x.F32Value.ToString());

                                    case Soil.Layer.Property.WHICH.BValue: return(x.BValue.ToString());

                                    case Soil.Layer.Property.WHICH.Type: return(x.Type.ToString());

                                    default: return("unknown");
                                    }
                                };
                                Console.WriteLine("\t" + prop.Name + " = " + show(prop));
                            }
                        }
                    }
                    Console.WriteLine("---------------------------------");
                }
                //var res = await service.Method("_________________method_PARAM_____________________");

                //Console.WriteLine(res);

                //return "ignored";
            }
            //*/


            /*
             * using (TcpRpcClient soilServiceClient = new TcpRpcClient("localhost", 6003))
             * //using (TcpRpcClient soilServiceClient = new TcpRpcClient("127.0.0.1", 6003))
             * //using (TcpRpcClient soilServiceClient = new TcpRpcClient("login01.cluster.zalf.de", 6003))
             * {
             *  await Task.WhenAll(soilServiceClient.WhenConnected);
             *
             *  var service = soilServiceClient.GetMain<Mas.Rpc.Soil.IService>();
             *
             *  var allParams = await service.GetAllAvailableParameters(true);
             *  Console.WriteLine("soilService.getAllAvailableParameters(true) -> ");
             *  Console.WriteLine("mandatory:");
             *  foreach (var m in allParams.Item1)
             *  {
             *      Console.WriteLine(m);
             *  }
             *  Console.WriteLine("optional:");
             *  foreach (var o in allParams.Item2)
             *  {
             *      Console.WriteLine(o);
             *  }
             *  Console.WriteLine("---------------------------------");
             *
             *  var profiles = await service.ProfilesAt(
             *      new Geo.LatLonCoord() { Lat = 53.0, Lon = 12.5 },
             *      new Soil.Query()
             *      {
             *          Mandatory = new Soil.PropertyName[]
             *      {
             *          Soil.PropertyName.sand, Soil.PropertyName.clay, Soil.PropertyName.bulkDensity, Soil.PropertyName.organicCarbon
             *      },
             *          Optional = new Soil.PropertyName[] { Soil.PropertyName.pH },
             *          OnlyRawData = false
             *      }
             *  );
             *  Console.WriteLine("soilService.profileAt(...) -> ");
             *  Console.WriteLine("profiles[0]:");
             *  foreach (var profile in profiles)
             *  {
             *      Console.WriteLine("percentageOfArea: " + profile.PercentageOfArea);
             *      foreach (var it in profile.Layers.Select((Value, Index) => new {Value, Index}))
             *      {
             *          Console.WriteLine("Layer " + it.Index + ":");
             *          foreach (var prop in it.Value.Properties)
             *          {
             *              Func<Soil.Layer.Property, String> show = x =>
             *              {
             *                  switch (x.which)
             *                  {
             *                      case Soil.Layer.Property.WHICH.F32Value: return x.F32Value.ToString();
             *                      case Soil.Layer.Property.WHICH.BValue: return x.BValue.ToString();
             *                      case Soil.Layer.Property.WHICH.Type: return x.Type.ToString();
             *                      default: return "unknown";
             *                  }
             *              };
             *              Console.WriteLine("\t" + prop.Name + " = " + show(prop));
             *          }
             *      }
             *  }
             *  Console.WriteLine("---------------------------------");
             *  return;
             *
             *  var query = new Soil.Query()
             *  {
             *      Mandatory = new Soil.PropertyName[]
             *      {
             *          Soil.PropertyName.sand, Soil.PropertyName.clay, Soil.PropertyName.bulkDensity, Soil.PropertyName.organicCarbon
             *      },
             *      Optional = new Soil.PropertyName[] { Soil.PropertyName.pH },
             *      OnlyRawData = false
             *  };
             *  var locs = await service.AllLocations(query);
             *  var latlonAndCap = locs[0];
             *  var capList = latlonAndCap.Snd;
             *  var p = await capList[0].Cap();
             *
             *  //var data = await ts.Data();
             *  //int x = 0;
             *  //foreach (var d in data)
             *  //{
             *  //x += d.Count;
             *  //}
             *  //Console.WriteLine("data.Count=" + data.Count + " should be: " + data.Count * 7 + " is: " + x);
             *  Console.WriteLine("\n");
             * }
             * //*/


            /*
             * using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("login01.cluster.zalf.de", 11002))
             * //using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("localhost", 11002))
             * //using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("10.10.24.206", 11002))
             * {
             *  await Task.WhenAll(csvTimeSeriesClient.WhenConnected);
             *
             *  var ts = csvTimeSeriesClient.GetMain<Mas.Rpc.ClimateData.IListTests>();
             *
             *  var testLI32_2 = await ts.TestLI32();
             *  var testLI32_2_Count = testLI32_2.Count;
             *  var testLI32_2_Sum = testLI32_2.Sum();
             *
             *
             *  var receivedBytes = 0;
             *  for (var i = 1; i < 10000; i++)
             *  {
             *      var testLI32 = await ts.TestLI32();
             *      var testLI32_Count = testLI32.Count;
             *      receivedBytes += testLI32_Count * 4;
             *      var testLI32_Sum_Soll = testLI32_Count * 1;
             *      var testLI32_Sum = testLI32.Sum();
             *      Console.WriteLine("Count: " + testLI32_Count
             + " ok?: " + (testLI32_Sum == testLI32_Sum_Soll)
             + " received bytes so far: " + receivedBytes);
             +  }
             +  //var testLI32_2 = await ts.TestLI32();
             +  //var testLI32_2_Count = testLI32_2.Count;
             +  //var testLI32_2_Sum = testLI32_2.Sum();
             +  var testLI32_3 = await ts.TestLI32();
             +  var testLI32_3_Count = testLI32_3.Count;
             +  var testLI32_3_Sum = testLI32_3.Sum();
             +  //var testLLI32 = await ts.TestLLI32();
             +  //int testLLI32_Count = 0;
             +  //int testLLI32_Soll = testLLI32.Count * 7;
             +  //foreach (var d in testLLI32)
             +  //{
             +  //    testLLI32_Count += d.Count;
             +  //}
             +
             +  var testLF32 = await ts.TestLF32();
             +  var testLF32_Count = testLF32.Count;
             +  var testLLF32 = await ts.TestLLF32();
             +  int testLLF32_Count = 0;
             +  int testLLF32_Soll = testLLF32.Count * 7;
             +  foreach (var d in testLLF32)
             +  {
             +      testLLF32_Count += d.Count;
             +  }
             +
             +  //var testLI32_2 = await ts.TestLI32();
             +  //var testLI32_Count_2 = testLI32_2.Count;
             +
             +  //Console.WriteLine("data.Count=" + data.Count + " should be: " + data.Count * 7 + " is: " + x);
             +  Console.WriteLine("\n");
             + }
             + //*/


            /*
             * using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("login01.cluster.zalf.de", 11000))
             * //using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("localhost", 11002))
             * {
             *  await Task.WhenAll(csvTimeSeriesClient.WhenConnected);
             *
             *  var ts = csvTimeSeriesClient.GetMain<Mas.Rpc.ClimateData.ITimeSeries>();
             *  var data = await ts.Data();
             *  int x = 0;
             *  foreach(var d in data)
             *  {
             *      x += d.Count;
             *  }
             *  Console.WriteLine("data.Count=" + data.Count + " should be: " + data.Count*7 + " is: " + x);
             *  Console.WriteLine("\n");
             * }
             * //*/

            /*
             * using (TcpRpcClient climateDataServiceClient = new TcpRpcClient("login01.cluster.zalf.de", 11001))
             * {
             *  await Task.WhenAll(climateDataServiceClient.WhenConnected);
             *
             *  var service = climateDataServiceClient.GetMain<Mas.Rpc.ClimateData.IService>();
             *  var sims = await service.GetAvailableSimulations();
             *  var sim = sims[0];
             *  var scens = await sim.Scenarios();
             *  var scen = scens[0];
             *  var reals = await scen.Realizations();
             *  var real = reals[0];
             *  var coord = new Geo.Coord();
             *  coord.Latlon = new Geo.LatLonCoord();
             *  coord.Latlon.Lat = 46.51412;
             *  coord.Latlon.Lon = 12.81895;
             *  var tss = await real.ClosestTimeSeriesAt(coord);
             *  var ts = tss[0];
             *  var data = await ts.Data();
             *  Console.WriteLine(data.Count);
             * }
             * //*/

            /*
             * using (TcpRpcClient csvTimeSeriesClient = new TcpRpcClient("localhost", 11000),
             *  adminMasterClient = new TcpRpcClient("10.10.24.186", 8000))
             * {
             *  await Task.WhenAll(csvTimeSeriesClient.WhenConnected, adminMasterClient.WhenConnected);
             *
             *  //csv_time_series = capnp.TwoPartyClient("localhost:11000").bootstrap().cast_as(
             *  //climate_data_capnp.Climate.TimeSeries)
             *  var adminMaster = adminMasterClient.GetMain<Cluster.IAdminMaster>();
             *  var factories = await adminMaster.AvailableModels();
             *  if (factories.Count > 0)
             *  {
             *      var factory = factories[0];
             *      var instanceCapHolder = factory.NewInstance().Eager<Mas.Rpc.Common.ICapHolder<object>>();
             *      var envInstance = ((BareProxy)(await instanceCapHolder.Cap())).Cast<Mas.Rpc.Model.IEnvInstance>(true);
             *      //var envInstance = ((BareProxy)(await instanceCapHolder.Cap())).Cast<Mas.Rpc.Model.IEnvInstance>(true);
             *      var infos = await envInstance.Info();
             *      Console.WriteLine(infos.ToString());
             *      //modelRes.PseudoEager<Mas.Rpc.Model.IEnvInstance>();
             *      //var x = modelRes.PseudoEager();
             *
             *      Console.WriteLine("Hello World!");
             *
             *      auto monica = modelRes.getCap().getAs<rpc::Model::EnvInstance>();
             *      //auto monica = cap.getAs<rpc::Model::EnvInstance>();
             *      //auto monica = capHolder.capRequest().send().wait(waitScope).getCap(); //<rpc::Model::EnvInstance>().;
             *      //auto monicaId = monica.infoRequest().send().wait(waitScope).getInfo().getId();
             *      monica.infoRequest().send().then([](auto && res) {
             *          cout << "monicaId: " << res.getInfo().getId().cStr() << endl;
             *      }).wait(waitScope);
             *      //auto monicaId = monicaRes.getInfo().getId().cStr();
             *      //cout << "monicaId: " << monicaId << endl;
             *      //auto sturdyRef = capHolder.saveRequest().send().wait(waitScope).getSturdyRef();
             *      instanceCapHolder.saveRequest().send().then([](auto && res) {
             *          cout << "sturdyRef: " << res.getSturdyRef().cStr() << endl;
             *      }).wait(waitScope);
             *      //auto sturdyRefP = instanceCapHolder.saveRequest().send().wait(waitScope);// .getSturdyRef();
             *
             *  }
             *
             * var csvTimeSeries = csvTimeSeriesClient.GetMain<Climate.ITimeSeries>();
             * var header = csvTimeSeries.Header();
             * header.Wait();
             * var elems = header.Result;
             * foreach(var elem in elems)
             * {
             * Console.WriteLine(elem);
             * }
             * //csvTimeSeries.WhenResolved.Wait(3000);
             *
             * //SpinWait.SpinUntil(() => server.ConnectionCount > 0, MediumTimeout);
             * //Assert.AreEqual(1, server.ConnectionCount);
             *
             * //server.Main = new ProvidedCapabilityMock();
             * //var main = client.GetMain<BareProxy>();
             * //var resolving = main as IResolvingCapability;
             * //Assert.IsTrue(resolving.WhenResolved.Wait(MediumTimeout));
             * }
             * //*/
            //}
            //else if (args.Length > 0 && args[0] == "server")
            //else // just pass...
            //{

            /*
             * using (TcpRpcClient runtimeClient = new TcpRpcClient("10.10.24.186", 9000),
             *  adminMasterClient = new TcpRpcClient("10.10.24.186", 8000))
             *
             * //using (client)
             * {
             *  await Task.WhenAll(csvTimeSeriesClient.WhenConnected, adminMasterClient.WhenConnected);
             *
             *  //csv_time_series = capnp.TwoPartyClient("localhost:11000").bootstrap().cast_as(
             *  //climate_data_capnp.Climate.TimeSeries)
             *  var adminMaster = adminMasterClient.GetMain<Cluster.IAdminMaster>();
             *  var factories = await adminMaster.AvailableModels();
             *  if (factories.Count > 0)
             *
             *
             * }
             *      using (var server = new TcpRpcServer(IPAddress.Any, TcpPort))
             * {
             *  Console.WriteLine($"starting server at localhost:{TcpPort}");
             *  server.Main = new Mas.Rpc.Monica.SlurmMonicaInstanceFactory("MONICA v3", "C:\\Users}\berg.ZALF-AD\\GitHub\\monica\\_cmake_vs2019_win64\\Debug\\monica-capnp-server.exe", "localhost", 10000);
             *  Console.WriteLine($"after");
             * }
             */
            return(null);
        }
Beispiel #17
0
        public void Server1()
        {
            var cbb    = new BufferBlock <IConnection>();
            var server = new TcpRpcServer();

            server.Main = new TestInterfaceImpl2();
            bool init   = true;
            var  tracer = new FrameTracing.RpcFrameTracer(Console.Out);

            (var addr, int port)        = TcpManager.Instance.GetLocalAddressAndPort();
            server.OnConnectionChanged += (s, a) =>
            {
                var c = a.Connection;
                if (init)
                {
                    Assert.ThrowsException <ArgumentNullException>(() => c.AttachTracer(null));
                    c.AttachTracer(tracer);
                    Assert.ThrowsException <ArgumentNullException>(() => c.InjectMidlayer(null));
                    c.InjectMidlayer(_ => _);
                    Assert.IsFalse(c.IsComputing);
                    Assert.IsFalse(c.IsWaitingForData);
                    Assert.AreEqual(ConnectionState.Initializing, c.State);
                    Assert.IsNotNull(c.RemotePort);
                    Assert.AreEqual(port, c.LocalPort);
                    Assert.AreEqual(0L, c.RecvCount);
                    Assert.AreEqual(0L, c.SendCount);
                }
                else
                {
                    Assert.ThrowsException <InvalidOperationException>(() => c.AttachTracer(tracer));
                    Assert.ThrowsException <InvalidOperationException>(() => c.InjectMidlayer(_ => _));
                    Assert.AreEqual(ConnectionState.Down, c.State);
                }

                cbb.Post(c);
            };

            Assert.ThrowsException <InvalidOperationException>(() => server.StopListening());

            server.StartAccepting(addr, port);
            Assert.IsTrue(server.IsAlive);
            Assert.ThrowsException <InvalidOperationException>(() => server.StartAccepting(addr, port));

            var server2 = new TcpRpcServer();

            Assert.ThrowsException <SocketException>(() => server2.StartAccepting(addr, port));

            var client1 = new TcpRpcClient(addr.ToString(), port);
            var c1      = cbb.Receive(TimeSpan.FromMilliseconds(MediumNonDbgTimeout));

            Assert.IsNotNull(c1);
            Assert.AreEqual(1, server.ConnectionCount);
            Assert.AreEqual(c1, server.Connections[0]);
            Assert.AreEqual(ConnectionState.Active, c1.State);
            var proxy = client1.GetMain <ITestInterface>();

            Assert.IsTrue(proxy is IResolvingCapability r && r.WhenResolved.WrappedTask.Wait(MediumNonDbgTimeout));
            Assert.IsTrue(c1.RecvCount > 0);
            Assert.IsTrue(c1.SendCount > 0);

            var client2 = new TcpRpcClient(addr.ToString(), port);
            var c2      = cbb.Receive(TimeSpan.FromMilliseconds(MediumNonDbgTimeout));

            Assert.IsNotNull(c2);
            Assert.AreEqual(2, server.ConnectionCount);
            Assert.AreEqual(c2, server.Connections[1]);

            init = false;

            client1.Dispose();
            var c1d = cbb.Receive(TimeSpan.FromMilliseconds(MediumNonDbgTimeout));

            Assert.IsNotNull(c1d);
            Assert.AreEqual(1, server.ConnectionCount);
            Assert.AreEqual(c2, server.Connections[0]);
            Assert.IsTrue(SpinWait.SpinUntil(() => c1d.State == ConnectionState.Down, MediumNonDbgTimeout));

            client2.Dispose();
            var c2d = cbb.Receive(TimeSpan.FromMilliseconds(MediumNonDbgTimeout));

            Assert.IsNotNull(c2d);
            Assert.AreEqual(0, server.ConnectionCount);
            Assert.IsTrue(SpinWait.SpinUntil(() => c2d.State == ConnectionState.Down, MediumNonDbgTimeout));

            server.StopListening();
            Assert.IsFalse(server.IsAlive);
            Assert.ThrowsException <InvalidOperationException>(() => server.StopListening());

            for (int i = 0; i < 100; i++)
            {
                server.StartAccepting(addr, port);
                Assert.IsTrue(server.IsAlive);
                server.StopListening();
                Assert.IsFalse(server.IsAlive);
            }

            server.Dispose();
        }