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); }
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); }
// 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)); }
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."); }
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"); }
// 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"); }