public static void Main() { var calculatorChannel = new Channel("localhost", 50051, ChannelCredentials.Insecure); var calculatorClient = new Calculator.CalculatorClient(calculatorChannel); var addArgs = new BinaryOpArgs { left = 2, right = 2 }; var addTask = calculatorClient.AddAsync(addArgs).ResponseAsync; Display("Add", addArgs, addTask); var divArgs = new BinaryOpArgs { left = 1, right = 0 }; var divTask = calculatorClient.DivideAsync(divArgs).ResponseAsync; Display("Divide", divArgs, divTask); Console.ReadLine(); Task.WaitAll(calculatorChannel.ShutdownAsync()); }
public static void Main() { // Bond has an abstraction for network protocols called a Transport. Epoxy is a custom protocol that is // lightweight and built into Bond.Comm. If it doesn't meet your needs, you can write your own Transport. var transport = new EpoxyTransportBuilder().Construct(); var connection = transport.ConnectToAsync(new IPEndPoint(IPAddress.Loopback, EpoxyTransport.DefaultPort)).Result; // For each service, Bond will generate a proxy with methods corresponding to the service methods you defined. var proxy = new CalculatorProxy <EpoxyConnection>(connection); var addArgs = new BinaryOpArgs { left = 2, right = 2 }; // The result of a Bond call is a IMessage, which is either a payload or an error. // Display() shows how to handle both cases. var addResult = proxy.AddAsync(addArgs).Result; Display("Add", addArgs, addResult); var divArgs = new BinaryOpArgs { left = 1, right = 0 }; var divResult = proxy.DivideAsync(divArgs).Result; Display("Divide", divArgs, divResult); Console.ReadLine(); }
private static void Display(string call, BinaryOpArgs args, Task <IMessage <Result> > resultTask) { var callStr = $"{call}({args.left}, {args.right})"; try { var result = resultTask.GetAwaiter().GetResult(); var answer = result.Payload.Deserialize().value; Console.WriteLine($"{callStr} => {answer}"); } catch (RpcException e) { Console.WriteLine($"Error!: #{e.Status.Detail} with code: {e.Status.StatusCode}"); } }
private static void Display(string call, BinaryOpArgs args, IMessage <Result> result) { var callStr = $"{call}({args.left}, {args.right})"; if (result.IsError) { var error = result.Error.Deserialize(); Console.WriteLine($"{callStr} returned error code {error.error_code} with {error.message}"); } else { var answer = result.Payload.Deserialize().value; Console.WriteLine($"{callStr} => {answer}"); } }