示例#1
0
        private CcyPairRate GetCcyPairRate(CcyPair request)
        {
            CcyPairRate response;

            switch (request.CcyPairName)
            {
            case "EURUSD":
                response = new CcyPairRate
                {
                    CcyPairName = "EURUSD",
                    Rate        = 1.15 + 0.05 * _random.NextDouble()
                };
                break;

            case "EURGBP":
                response = new CcyPairRate
                {
                    CcyPairName = "EURGBP",
                    Rate        = 0.87 + 0.05 * _random.NextDouble()
                };
                break;

            default:
                throw new ArgumentOutOfRangeException($"Unknown currency pair: {request.CcyPairName}");
            }

            return(response);
        }
示例#2
0
        private async Task <CcyPairRate> GetRateAsync(CcyPair request, MethodCallContext context)
        {
            Console.WriteLine("Received request: {0}", request);
            CcyPairRate response;

            switch (request.CcyPairName)
            {
            case "EURUSD":
                response = new CcyPairRate
                {
                    CcyPairName = "EURUSD",
                    Rate        = 1.15 + 0.05 * _random.NextDouble()
                };
                break;

            case "EURGBP":
                response = new CcyPairRate
                {
                    CcyPairName = "EURGBP",
                    Rate        = 0.87 + 0.05 * _random.NextDouble()
                };
                break;

            default:
                throw new ArgumentOutOfRangeException($"Unknown currency pair: {request.CcyPairName}");
            }
            Console.WriteLine("Sending response: {0}", response);
            return(response);
        }
示例#3
0
        // Implementation of unary method GetRate
        public Task <CcyPairRate> GetRate(CcyPair request, MethodCallContext context)
        {
            Console.WriteLine("Received request: {0}", request);
            var response = GetCcyPairRate(request);

            Console.WriteLine("Sending response: {0}", response);
            return(Task.FromResult(response));
        }
示例#4
0
        public async Task MainAsync(string[] args)
        {
            // Read broker working dir specified either in the first
            // command line argument or in environment variable, or just use current working directory
            var brokerLocation = args.Length > 0
                ? args[0]
                : Environment.GetEnvironmentVariable("PLEXUS_BROKER_WORKING_DIR") ?? Directory.GetCurrentDirectory();

            Console.WriteLine("Connecting to broker {0}.", brokerLocation);

            // Defining client options
            var clientOptions = new ClientOptionsBuilder()
                                .WithDefaultConfiguration(brokerLocation)
                                .WithApplicationId("vendorB.fx.CcyPairRateViewer")
                                .Build();

            // Connecting
            var client = ClientFactory.Instance.Create(clientOptions);
            await client.ConnectAsync();

            Console.WriteLine("Connected.");

            while (true)
            {
                Console.Write("Enter currency pair (e.g. \"EURUSD\") or press Enter to exit: ");
                var ccyPairName = Console.ReadLine();
                if (string.IsNullOrEmpty(ccyPairName))
                {
                    break;
                }
                // Requesting ccy pair rate from another app
                var request = new CcyPair {
                    CcyPairName = ccyPairName
                };
                var response = await client.Call(GetRateMethod, request);

                Console.WriteLine("Response received: " + response);
            }

            Console.WriteLine("Disconnecting.");
            await client.DisconnectAsync();

            Console.WriteLine("Disconnected.");
        }
示例#5
0
        public async Task MainAsync(string[] args)
        {
            // Read broker working dir specified either in the first
            // command line argument or in environment variable,
            // or just use current working directory.
            var brokerWorkingDir = args.Length > 0
                ? args[0]
                : EnvironmentHelper.GetBrokerWorkingDir() ?? Directory.GetCurrentDirectory();

            // Creating client and connecting to broker
            Console.WriteLine("Connecting to broker {0}", brokerWorkingDir);
            var client = new CcyPairRateViewerClient(setup => setup.WithBrokerWorkingDir(brokerWorkingDir));
            await client.ConnectAsync();

            Console.WriteLine("Connected");

            while (true)
            {
                Console.Write("Enter currency pair (e.g. \"EURUSD\") or press Enter to exit: ");
                var ccyPairName = Console.ReadLine();
                if (string.IsNullOrEmpty(ccyPairName))
                {
                    break;
                }
                // Requesting ccy pair rate from another app
                var request = new CcyPair {
                    CcyPairName = ccyPairName
                };
                var response = await client.CcyPairRateService.GetRate(request);

                Console.WriteLine("Response received: " + response);
            }

            Console.WriteLine("Disconnecting");
            await client.DisconnectAsync();

            Console.WriteLine("Disconnected");
        }
示例#6
0
        // Implementation of server streaming method GetRateStream
        public async Task GetRateStream(
            CcyPair request,
            IWritableChannel <CcyPairRate> responseStream,
            MethodCallContext context)
        {
            Console.WriteLine("Received subscription: {0}", request);
            try
            {
                do
                {
                    var response = GetCcyPairRate(request);
                    Console.WriteLine("Sending response: {0}", response);
                    await responseStream.TryWriteAsync(response, context.CancellationToken);

                    await Task.Delay(_random.Next(1000, 3000), context.CancellationToken);
                } while (!context.CancellationToken.IsCancellationRequested);
            }
            catch (OperationCanceledException) when(context.CancellationToken.IsCancellationRequested)
            {
                // Ignoring cancellation exception
            }
            Console.WriteLine("Subscription completed");
        }