private static void RemoveServiceDiscoveryListener(ServiceDiscoveryListener listener)
 {
     if (listener != null)
     {
         tfg_pitc_RemoveServiceDiscoveryListener(listener.NativeListenerHandle);
         _serviceDiscoveryListenerHandle.Free();
         _serviceDiscoveryListener = null;
     }
 }
Beispiel #2
0
        public static void Initialize(string envPrefix,
                                      string configFile,
                                      Server serverInfo,
                                      NativeLogLevel logLevel,
                                      NativeLogKind logKind,
                                      Action <string> logFunction,
                                      MetricsConfiguration metricsConfig,
                                      ServiceDiscoveryListener serviceDiscoveryListener = null)
        {
            _serviceDiscoveryListener    = serviceDiscoveryListener;
            _handleRpcCallback           = new HandleRpcCallbackFunc(HandleRpcCallback);
            _clusterNotificationCallback = new ClusterNotificationCallbackFunc(ClusterNotificationCallback);
            _logFunctionCallback         = new LogFunction(LogFunctionCallback);
            var logCtx        = GCHandle.Alloc(logFunction, GCHandleType.Normal);
            var pitayaMetrics = IntPtr.Zero;

            if (metricsConfig.IsEnabled)
            {
                if (metricsConfig.CustomMetrics == null)
                {
                    metricsConfig.CustomMetrics = new CustomMetrics();
                }
                metricsConfig.CustomMetrics.AddHistogram(
                    RPC_LATENCY_METRIC,
                    new HistogramBuckets(HistogramBucketKind.Exponential, 0.0005, 2.0, 20)
                    );
                _metricsReporter = new MetricsReporter(metricsConfig);
                pitayaMetrics    = _metricsReporter.GetPitayaPtr();
            }

            IntPtr err = pitaya_initialize_with_nats(
                IntPtr.Zero,
                envPrefix,
                configFile,
                Marshal.GetFunctionPointerForDelegate(_handleRpcCallback),
                Marshal.GetFunctionPointerForDelegate(_clusterNotificationCallback),
                logLevel,
                logKind,
                Marshal.GetFunctionPointerForDelegate(_logFunctionCallback),
                GCHandle.ToIntPtr(logCtx),
                pitayaMetrics,
                serverInfo.Handle,
                out pitaya
                );

            if (err != IntPtr.Zero)
            {
                var pitayaError = new PitayaError(pitaya_error_code(err), pitaya_error_message(err));
                pitaya_error_drop(err);
                throw new PitayaException($"Initialization failed: code={pitayaError.Code} msg={pitayaError.Message}");
            }

            _rpcClient = new RpcClient(pitaya, _serializer);
            _metricsReporter?.Start();
        }
        private static void AddServiceDiscoveryListener(ServiceDiscoveryListener listener)
        {
            _serviceDiscoveryListener = listener;
            if (listener == null)
            {
                return;
            }

            _serviceDiscoveryListenerHandle = GCHandle.Alloc(_serviceDiscoveryListener);

            IntPtr nativeListenerHandle = tfg_pitc_AddServiceDiscoveryListener(
                OnServerAddedOrRemovedNativeCb,
                (IntPtr)_serviceDiscoveryListenerHandle
                );

            listener.NativeListenerHandle = nativeListenerHandle;
        }
        public static void Initialize(GrpcConfig grpcCfg,
                                      SDConfig sdCfg,
                                      Server server,
                                      NativeLogLevel logLevel,
                                      ServiceDiscoveryListener serviceDiscoveryListener = null,
                                      string logFile = "")
        {
            IntPtr grpcCfgPtr = new StructWrapper(grpcCfg);
            IntPtr sdCfgPtr   = new StructWrapper(sdCfg);
            IntPtr serverPtr  = new StructWrapper(server);

            bool ok = InitializeWithGrpcInternal(grpcCfgPtr, sdCfgPtr, serverPtr, logLevel,
                                                 logFile);

            if (!ok)
            {
                throw new PitayaException("Initialization failed");
            }

            AddServiceDiscoveryListener(serviceDiscoveryListener);
            ListenToIncomingRPCs();
        }