Пример #1
0
 public PingCaller(ConnectionManager connectionManager, ILoggerFactory loggerFactory,
                   IConfigAccessor configAccessor)
 {
     _connectionManager = connectionManager;
     _config            = configAccessor.Get <GrpcConfig>();
     _logger            = loggerFactory.CreateLogger(typeof(PingCaller));
 }
Пример #2
0
 public ServiceRegister(ConnectionManager connectionManager, IConfigAccessor configAccessor,
                        ILoggerFactory loggerFactory)
 {
     _connectionManager = connectionManager;
     _config            = configAccessor.Get <GrpcConfig>();
     _logger            = loggerFactory.CreateLogger(typeof(ServiceRegister));
 }
Пример #3
0
 public CLRStatsReporter(ConnectionManager connectionManager, ILoggerFactory loggerFactory,
                         IConfigAccessor configAccessor, IRuntimeEnvironment runtimeEnvironment)
 {
     _connectionManager  = connectionManager;
     _logger             = loggerFactory.CreateLogger(NLog.LogManager.GetCurrentClassLogger());
     _config             = configAccessor.Get <GrpcConfig>();
     _runtimeEnvironment = runtimeEnvironment;
 }
 public GrpcClientDiagnosticProcessor(ITracingContext tracingContext,
                                      IExitSegmentContextAccessor contextAccessor, IConfigAccessor configAccessor)
 {
     _tracingContext  = tracingContext;
     _contextAccessor = contextAccessor;
     _tracingConfig   = configAccessor.Get <TracingConfig>();
     _grpcConfig      = configAccessor.Get <GrpcConfig>();
 }
Пример #5
0
 public CLRStatsReporter(ConnectionManager connectionManager, ILoggerFactory loggerFactory,
                         IConfigAccessor configAccessor, IRuntimeEnvironment runtimeEnvironment)
 {
     _connectionManager  = connectionManager;
     _logger             = loggerFactory.CreateLogger(typeof(CLRStatsReporter));
     _config             = configAccessor.Get <GrpcConfig>();
     _runtimeEnvironment = runtimeEnvironment;
     _instrumentConfig   = configAccessor.Get <InstrumentConfig>();
 }
Пример #6
0
 public static Metadata GetMeta(this GrpcConfig config)
 {
     if (string.IsNullOrEmpty(config.Authentication))
     {
         return(null);
     }
     return(new Metadata {
         new Metadata.Entry("Authentication", config.Authentication)
     });
 }
Пример #7
0
        private const int MaxFieldId = 536870911; // 2^29-1

        static GrpcMarshaller()
        {
            // https://github.com/protobuf-net/protobuf-net/wiki/Getting-Started#inheritance
            var baseType = typeof(T).BaseType;

            if (baseType != typeof(object))
            {
                RegisterSubType(typeof(T));
            }
            if (typeof(T).IsGenericType)
            {
                foreach (var argType in typeof(T).GenericTypeArguments)
                {
                    GrpcConfig.Register(argType);
                }
            }
        }
Пример #8
0
        private static void RegisterSubType(Type type)
        {
            if (GrpcConfig.IgnoreTypeModel(type))
            {
                return;
            }

            var baseMetaType = GrpcConfig.Register(type.BaseType);
            // need to generate predictable fieldIds, allow specifying with [Id(n)] or use MurmurHash2 hash function % 2^29-1,
            var idAttr  = type.FirstAttribute <IdAttribute>();
            var fieldId = idAttr?.Id ?? Math.Abs(unchecked ((int)MurmurHash2.Hash(GetTypeName(type))));

            fieldId = fieldId % MaxFieldId;

            if (fieldId == default || (idAttr == null && fieldId < 50)) // min = 1, avoid hash conflicts with real field ids
            {
                fieldId += 50;
            }
Пример #9
0
        public void Can_Fail_Initialization_Multiple_Times()
        {
            var grpcConfig = new GrpcConfig(
                host: "127.0.0.1",
                port: 40405,
                serverShutdownDeadlineMs: 2000,
                serverMaxNumberOfRpcs: 100,
                clientRpcTimeoutMs: 10000
                );

            var sdCfg = new SDConfig(
                endpoints: "127.0.0.1:123123123",
                etcdPrefix: "pitaya/",
                serverTypeFilters: new List <string>(),
                heartbeatTTLSec: 10,
                logHeartbeat: false,
                logServerSync: false,
                logServerDetails: false,
                syncServersIntervalSec: 10,
                maxNumberOfRetries: 0,
                retryDelayMilliseconds: 0
                );

            var server = new Server(
                id: "id",
                type: "type",
                metadata: "",
                hostname: "",
                frontend: false
                );

            for (var i = 0; i < 10; ++i)
            {
                Assert.Throws <PitayaException>(() =>
                {
                    PitayaCluster.Initialize(grpcConfig, sdCfg, server, NativeLogLevel.Debug);
                });
            }

            PitayaCluster.Terminate();
        }
Пример #10
0
    public GrpcTestFixture()
    {
        Environment.SetEnvironmentVariable("ASPNETCORE_ENVIRONMENT", "IntegrationTests");
        string             contentRootFull = Path.GetFullPath(Directory.GetCurrentDirectory());
        IConfigurationRoot config          = new ConfigurationBuilder()
                                             .SetBasePath(contentRootFull)
                                             .AddJsonFile("appsettings.json", false, true)
                                             .AddJsonFile($"appsettings.Development.json", true, true)
                                             .AddEnvironmentVariables().Build();
        GrpcConfig grpcConfig = config.GetSection(nameof(GrpcConfig)).Get <GrpcConfig>();

        LoggerFactory = new LoggerFactory();
        _factory      = new CustomGRPCWebApplicationFactory <TStartup>(config);
        var client = _factory.CreateDefaultClient(new ResponseVersionHandler());

        client.BaseAddress = new Uri(grpcConfig.Endpoint);
        GrpcChannel        = GrpcChannel.ForAddress(client.BaseAddress, new GrpcChannelOptions
        {
            LoggerFactory = LoggerFactory,
            HttpClient    = client
        });
    }
Пример #11
0
        public void Can_Be_Initialized_And_Terminated_Multiple_Times()
        {
            var grpcConfig = new GrpcConfig(
                host: "127.0.0.1",
                port: 40405,
                serverShutdownDeadlineMs: 2000,
                serverMaxNumberOfRpcs: 100,
                clientRpcTimeoutMs: 10000
                );

            var sdCfg = new SDConfig(
                endpoints: "http://127.0.0.1:2379",
                etcdPrefix: "pitaya/",
                serverTypeFilters: new List <string>(),
                heartbeatTTLSec: 10,
                logHeartbeat: false,
                logServerSync: false,
                logServerDetails: false,
                syncServersIntervalSec: 10,
                maxNumberOfRetries: 0
                );

            var server = new Server(
                id: "myserverid",
                type: "myservertype",
                metadata: "",
                hostname: "",
                frontend: false
                );

            for (var i = 0; i < 2; ++i)
            {
                PitayaCluster.Initialize(grpcConfig, sdCfg, server, NativeLogLevel.Debug);
                PitayaCluster.Terminate();
            }
        }
Пример #12
0
        public async Task Can_call_Multiply_Grpc_Service_GrpcChannel()
        {
            GrpcClientFactory.AllowUnencryptedHttp2 = true;
            using var http = GrpcChannel.ForAddress(TestsConfig.BaseUri);

            var response = await http.CreateCallInvoker().Execute <Multiply, MultiplyResponse>(new Multiply {
                X = 12, Y = 4
            }, "GrpcServices",
                                                                                               GrpcConfig.GetServiceName(HttpMethods.Post, nameof(Multiply)));

            Assert.That(response.Result, Is.EqualTo(48));
        }
    private void Init()
    {
        Debug.Log("Init button clicked!");

        NPitaya.Models.Logger.SetLevel(LogLevel.DEBUG);
        Console.WriteLine("c# prog running");

        string serverId = Guid.NewGuid().ToString();

        var sdConfig = new SDConfig(
            endpoints: "http://10.0.21.167:2379",
            etcdPrefix: "pitaya/",
            serverTypeFilters: new List <string>(),
            heartbeatTTLSec: 60,
            logHeartbeat: false,
            logServerSync: true,
            logServerDetails: false,
            syncServersIntervalSec: 60,
            maxNumberOfRetries: 10,
            retryDelayMilliseconds: 100);

        var grpcConfig = new GrpcConfig(
            host: "127.0.0.1",
            port: 3000,
            serverShutdownDeadlineMs: 3000,
            serverMaxNumberOfRpcs: 1000,
            clientRpcTimeoutMs: 4000
            );

        var sv = new Server(
            serverId,
            "csharp",
            "{\"ip\":\"127.0.0.1\"}",
            "localhost",
            false);

        var nc = new NatsConfig(
            endpoint: "127.0.0.1:4222",
            connectionTimeoutMs: 2000,
            requestTimeoutMs: 2000,
            serverShutdownDeadlineMs: 4000,
            serverMaxNumberOfRpcs: 1000,
            maxConnectionRetries: 10,
            maxPendingMessages: 100,
            reconnectBufSize: 4 * 1024 * 1024);

        Debug.Log("Adding signal handler");
        Debug.Log("Adding signal handler DONE");

        try
        {
            Debug.Log("Initializing PitayaCluster");
            // PitayaCluster.Initialize(sdConfig, nc, sv);

            var listener = new PitayaCluster.ServiceDiscoveryListener((action, server) =>
            {
                switch (action)
                {
                case PitayaCluster.ServiceDiscoveryAction.ServerAdded:
                    Debug.Log("Server added:");
                    Debug.Log("    id:  " + server.id);
                    Debug.Log("    type:" + server.type);
                    break;

                case PitayaCluster.ServiceDiscoveryAction.ServerRemoved:
                    Debug.Log("Server removed:");
                    Debug.Log("    id:  " + server.id);
                    Debug.Log("    type:" + server.type);
                    break;

                default:
                    throw new ArgumentOutOfRangeException(nameof(action), action, null);
                }
            });
                    #if UNITY_EDITOR
            PitayaCluster.Initialize(nc, sdConfig, sv, NativeLogLevel.Debug, listener, "MY_LOG_FILE.txt");
                    #else
            PitayaCluster.Initialize(grpcConfig, sdConfig, sv, NativeLogLevel.Debug, listener);
            #endif
        }
        catch (PitayaException e)
        {
            Debug.LogError($"Failed to create cluster {e.Message}");
            Application.Quit();
            return;
        }

        NPitaya.Models.Logger.Info("pitaya lib initialized successfully :)");

        var tr = new TestRemote();
        PitayaCluster.RegisterRemote(tr);
    }
Пример #14
0
        private static void Main(string[] args)
        {
            Logger.SetLevel(LogLevel.INFO);

            var serverId = System.Guid.NewGuid().ToString();

            var sdConfig = new SDConfig(
                endpoints: "http://127.0.0.1:2379",
                etcdPrefix: "pitaya/",
                heartbeatTTLSec: 60,
                logHeartbeat: true,
                logServerSync: true,
                logServerDetails: true,
                syncServersIntervalSec: 30,
                maxNumberOfRetries: 0);

            var sv = new Server(
                id: serverId,
                type: "csharp",
                metadata: "",
                hostname: "localhost",
                frontend: false);

            var grpcConfig = new GrpcConfig(
                host: "127.0.0.1",
                port: 5444,
                serverShutdownDeadlineMs: 3000,
                serverMaxNumberOfRpcs: 500,
                clientRpcTimeoutMs: 10000
                );

            PitayaCluster.AddSignalHandler(() =>
            {
                Logger.Info("Calling terminate on cluster");
                PitayaCluster.Terminate();
                Logger.Info("Cluster terminated, exiting app");
                Environment.Exit(1);
            });

            PitayaCluster.RegisterHandler(new UserHandler());
            PitayaCluster.SetSerializer(new JSONSerializer()); // Using json serializer for easier interop with pitaya-cli

            try
            {
                PitayaCluster.Initialize(
                    grpcConfig,
                    sdConfig,
                    sv,
                    NativeLogLevel.Debug,
                    new PitayaCluster.ServiceDiscoveryListener((action, server) =>
                {
                    switch (action)
                    {
                    case PitayaCluster.ServiceDiscoveryAction.ServerAdded:
                        Console.WriteLine($"Server added: {server}");
                        break;

                    case PitayaCluster.ServiceDiscoveryAction.ServerRemoved:
                        Console.WriteLine($"Server removed: {server}");
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(action), action, null);
                    }
                })
                    );
            }
            catch (PitayaException exc)
            {
                Logger.Error("Failed to create cluster: {0}", exc.Message);
                Environment.Exit(1);
            }

            while (true)
            {
                Thread.Sleep(10);
            }
            ////
        }
Пример #15
0
        public static IHostBuilder CreateHostBuilder()
        {
            var hzConfiguration = new HazelcastConfig();
            var emailSettings   = new EmailSettings();

            return(new HostBuilder()
                   .ConfigureAppConfiguration((hostContext, configurationBuilder) =>
            {
                var configurationRoot = configurationBuilder
                                        .AddJsonFile("appsettings.json")
                                        .AddEnvironmentVariables()
                                        .Build();
                configurationRoot.Bind(nameof(HazelcastConfig), hzConfiguration);
                configurationRoot.Bind(nameof(EmailSettings), emailSettings);
            })
                   .ConfigureLogging(loggingBuilder =>
            {
                loggingBuilder.ClearProviders();
                loggingBuilder.UseLog4Net(new FileInfo("log4net.config"));
            })
                   .ConfigureSimpleInjector()
                   .ConfigureContainer <Container>((hostBuilderContext, container) =>
            {
                container.RegisterSingleton(() => hzConfiguration);

                // Register IMessagingClientFactory
                container.RegisterSingleton <IMessagingClientFactory, HazelcastMessagingClientFactory>();

                // Register IMessagingClient
                container.RegisterSingleton(() =>
                {
                    var config = container.GetInstance <IConfiguration>();
                    var factory = container.GetInstance <IMessagingClientFactory>();
                    return factory.CreateClient(nameof(HazelcastConfig), config);
                });

                // Register IMessagePublisher
                container.RegisterSingleton <IMessagePublisher>(container.GetInstance <IMessagingClient>);

                // Register IMessageSubscriber
                container.RegisterSingleton <IMessageSubscriber>(container.GetInstance <IMessagingClient>);

                // Register data context
                container.RegisterSingleton(() => new OrganizationServiceDataContextFactory {
                    LoggerFactory = container.GetInstance <ILoggerFactory>()
                });

                //Register Email Service
                container.RegisterSingleton(() => new EmailService(emailSettings));

                container.RegisterScoped(() =>
                {
                    var factory = container.GetInstance <OrganizationServiceDataContextFactory>();
                    var connectionString = hostBuilderContext.Configuration.GetConnectionString(nameof(OrganizationServiceDataContext));
                    return factory.CreateDbContext(connectionString);
                });

                // Register repositories
                DependencyInjectionRegistration.RegisterRepositories(container);

                // Register services
                DependencyInjectionRegistration.RegisterServices(container);

                //Register subscribers
                DependencyInjectionRegistration.RegisterSubscribers(container);

                //Register healthchecks
                DependencyInjectionRegistration.RegisterHealthChecks(container);
            })
                   .AddGrpcService <ProfileController>()
                   .AddGrpcService <OrganizationController>()
                   .AddGrpcService <OrganizationUserController>()
                   .AddGrpcService <GroupController>()
                   .AddGrpcService <GroupAuthorizationController>()
                   .AddGrpcService <AuthorizationController>()
                   .AddGrpcService <UserInvitationController>()
                   .AddGrpcService <HealthController>()
                   .ConfigureGrpcServer(
                       Assembly.GetEntryAssembly().GetName().Name,
                       (hostBuilderContext) =>
            {
                var config = new TracingConfig();
                hostBuilderContext.Configuration.Bind(nameof(TracingConfig), config);
                return config;
            },
                       (hostBuilderContext, c, logger, serverServiceDefinitions, interceptors) =>
            {
                var server = new Server();
                var config = new GrpcConfig();

                hostBuilderContext.Configuration.Bind(nameof(GrpcConfig), config);

                server.Ports.Add(new ServerPort(config.Host, config.Port, ServerCredentials.Insecure));

                GrpcEnvironment.SetLogger(logger);

                serverServiceDefinitions
                .ToList()
                .ForEach(x => { server.Services.Add(x.Intercept(interceptors.ToArray())); });

                return server;
            })
                   .ConfigureContainer <Container>(container => container.Verify()));
        }
Пример #16
0
        static void Main(string[] args)
        {
            Logger.SetLevel(LogLevel.DEBUG);

            Console.WriteLine("c# prog running");

            string serverId = System.Guid.NewGuid().ToString();

            var sdConfig = new SDConfig(
                endpoints: "http://127.0.0.1:2379",
                etcdPrefix: "pitaya/",
                serverTypeFilters: new List <string>(),
                heartbeatTTLSec: 60,
                logHeartbeat: true,
                logServerSync: true,
                logServerDetails: true,
                syncServersIntervalSec: 30,
                maxNumberOfRetries: 0,
                retryDelayMilliseconds: 0);

            var sv = new Server(
                id: serverId,
                type: "csharp",
                metadata: "",
                hostname: "localhost",
                frontend: false);

            var natsConfig = new NatsConfig(
                endpoint: "127.0.0.1:4222",
                connectionTimeoutMs: 2000,
                requestTimeoutMs: 1000,
                serverShutdownDeadlineMs: 3,
                serverMaxNumberOfRpcs: 100,
                maxConnectionRetries: 3,
                maxPendingMessages: 1000,
                reconnectBufSize: 4 * 1024 * 1024);

            var grpcConfig = new GrpcConfig(
                host: "127.0.0.1",
                port: 5444,
                serverShutdownDeadlineMs: 2000,
                serverMaxNumberOfRpcs: 200,
                clientRpcTimeoutMs: 10000
                );

            Dictionary <string, string> constantTags = new Dictionary <string, string>
            {
                { "game", "game" },
                { "serverType", "svType" }
            };
            var statsdMR = new StatsdMetricsReporter("localhost", 5000, "game", constantTags);

            MetricsReporters.AddMetricReporter(statsdMR);
            var prometheusMR = new PrometheusMetricsReporter("default", "game", 9090);

            MetricsReporters.AddMetricReporter(prometheusMR);

            PitayaCluster.AddSignalHandler(() =>
            {
                Logger.Info("Calling terminate on cluster");
                PitayaCluster.Terminate();
                Logger.Info("Cluster terminated, exiting app");
                Environment.Exit(1);
                //Environment.FailFast("oops");
            });

            try
            {
                PitayaCluster.Initialize(
                    grpcConfig,
                    sdConfig,
                    sv,
                    NativeLogLevel.Debug,
                    new PitayaCluster.ServiceDiscoveryListener((action, server) =>
                {
                    switch (action)
                    {
                    case PitayaCluster.ServiceDiscoveryAction.ServerAdded:
                        Console.WriteLine("Server was added");
                        Console.WriteLine("    id: " + server.id);
                        Console.WriteLine("  type: " + server.type);
                        break;

                    case PitayaCluster.ServiceDiscoveryAction.ServerRemoved:
                        Console.WriteLine("Server was removed");
                        Console.WriteLine("    id: " + server.id);
                        Console.WriteLine("  type: " + server.type);
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(action), action, null);
                    }
                }));
                //PitayaCluster.Initialize(natsConfig, sdConfig, sv, NativeLogLevel.Debug, "");
            }
            catch (PitayaException exc)
            {
                Logger.Error("Failed to create cluster: {0}", exc.Message);
                Environment.Exit(1);
            }

            Logger.Info("pitaya lib initialized successfully :)");

            var tr = new TestRemote();

            PitayaCluster.RegisterRemote(tr);
            var th = new TestHandler();

            PitayaCluster.RegisterHandler(th);

            Thread.Sleep(1000);

            TrySendRpc();
            Console.ReadKey();
            PitayaCluster.Terminate();
        }
Пример #17
0
 public LinkService(ILogger <LinkService> logger, IOptions <GrpcConfig> config)
 {
     this.logger     = logger;
     this.grpcConfig = config.Value;
 }