// Pre-requisites
using Grpc.Core;
using System;
using System.Threading.Tasks;

using PipServices3.Commons.Config;
using PipServices3.Grpc.Services;

using Calculations;

// gRPC server
public class MyGrpcService : GrpcService
{
    public MyGrpcService() : base("my_data_v1") { }

    private async Task<Number2> Sum(Number1 number, ServerCallContext context)
    {
        var res = Calculations.Summator.Sum(number.Value1, number.Value2);
        return new Number2() { Value = res };
    }

    protected override void OnRegister()
    {
        RegisterMethod<Number1, Number2>("sum", Sum);
    }
}
    
var service = new MyGrpcService();
service.Configure(ConfigParams.FromTuples(
    "connection.protocol", "http",
    "connection.host", "localhost",
    "connection.port", 50055
));

service.SetReferences(new References());

await service.OpenAsync(null);