Beispiel #1
0
        internal void Init(RdKafkaType type, IntPtr config, Config.LogCallback logger)
        {
            logger = logger ?? ((string handle, int level, string fac, string buf) =>
            {
                var now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff", CultureInfo.InvariantCulture);
                Console.WriteLine($"{level}|{now}|{handle}|{fac}| {buf}");
            });
            LogDelegate = (IntPtr rk, int level, string fac, string buf) =>
            {
                // The log_cb is called very early during construction, before
                // SafeKafkaHandle or any of the C# wrappers are ready.
                // So we can't really pass rk on, just pass the rk name instead.
                var name = Marshal.PtrToStringAnsi(LibRdKafka.name(rk));
                logger(name, level, fac, buf);
            };
            LibRdKafka.conf_set_log_cb(config, LogDelegate);

            StatsDelegate = (IntPtr rk, IntPtr json, UIntPtr json_len, IntPtr opaque) =>
            {
                OnStatistics?.Invoke(this, Marshal.PtrToStringAnsi(json));
                return 0;
            };
            LibRdKafka.conf_set_stats_cb(config, StatsDelegate);

            handle = SafeKafkaHandle.Create(type, config);

            callbackCts = new CancellationTokenSource();
            callbackTask = StartCallbackTask(callbackCts.Token);
        }
 internal static SafeKafkaHandle Create(RdKafkaType type, IntPtr config)
 {
     var errorStringBuilder = new StringBuilder(512);
     var skh = LibRdKafka.kafka_new(type, config, errorStringBuilder,
             (UIntPtr) errorStringBuilder.Capacity);
     if (skh.IsInvalid)
     {
         throw new InvalidOperationException(errorStringBuilder.ToString());
     }
     return skh;
 }
        internal static SafeKafkaHandle Create(RdKafkaType type, IntPtr config)
        {
            var errorStringBuilder = new StringBuilder(512);
            var skh = LibRdKafka.kafka_new(type, config, errorStringBuilder,
                                           (UIntPtr)errorStringBuilder.Capacity);

            if (skh.IsInvalid)
            {
                throw new InvalidOperationException(errorStringBuilder.ToString());
            }
            return(skh);
        }
        public static SafeKafkaHandle Create(RdKafkaType type, IntPtr config)
        {
            var errorStringBuilder = new StringBuilder(LibRdKafka.MaxErrorStringLength);
            var skh = LibRdKafka.kafka_new(type, config, errorStringBuilder,
                                           (UIntPtr)errorStringBuilder.Capacity);

            if (skh.IsInvalid)
            {
                LibRdKafka.conf_destroy(config);
                throw new InvalidOperationException(errorStringBuilder.ToString());
            }
            return(skh);
        }
Beispiel #5
0
        internal void Init(RdKafkaType type, IntPtr config, Config.LogCallback logger)
        {
            ErrorDelegate = (IntPtr rk, ErrorCode err, string reason, IntPtr opaque) =>
            {
                OnError?.Invoke(this, new ErrorArgs()
                {
                    ErrorCode = err,
                    Reason    = reason
                });
            };
            LibRdKafka.conf_set_error_cb(config, ErrorDelegate);

            if (logger == null)
            {
                logger = ((string handle, int level, string fac, string buf) =>
                {
                    var now = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
                    Console.WriteLine($"{level}|{now}|{handle}|{fac}| {buf}");
                });
            }

            LogDelegate = (IntPtr rk, int level, string fac, string buf) =>
            {
                // The log_cb is called very early during construction, before
                // SafeKafkaHandle or any of the C# wrappers are ready.
                // So we can't really pass rk on, just pass the rk name instead.
                var name = Marshal.PtrToStringAnsi(LibRdKafka.name(rk));
                logger(name, level, fac, buf);
            };
            LibRdKafka.conf_set_log_cb(config, LogDelegate);

            StatsDelegate = (IntPtr rk, IntPtr json, UIntPtr json_len, IntPtr opaque) =>
            {
                OnStatistics?.Invoke(this, Marshal.PtrToStringAnsi(json));
                return(0);
            };
            LibRdKafka.conf_set_stats_cb(config, StatsDelegate);

            handle = SafeKafkaHandle.Create(type, config);

            callbackCts  = new CancellationTokenSource();
            callbackTask = StartCallbackTask(callbackCts.Token);
        }
 internal static extern SafeKafkaHandle rd_kafka_new(
     RdKafkaType type, IntPtr conf,
     StringBuilder errstr,
     UIntPtr errstr_size);
 internal static SafeKafkaHandle kafka_new(RdKafkaType type, IntPtr conf,
                                           StringBuilder errstr, UIntPtr errstr_size)
 => _new(type, conf, errstr, errstr_size);
Beispiel #8
0
 public static extern IntPtr rd_kafka_new(RdKafkaType type, IntPtr conf, IntPtr errstr, int errstr_size);
Beispiel #9
0
 internal static extern SafeKafkaHandle rd_kafka_new(
         RdKafkaType type, IntPtr conf,
         StringBuilder errstr,
         UIntPtr errstr_size);
Beispiel #10
0
 internal static SafeKafkaHandle kafka_new(RdKafkaType type, IntPtr conf,
         StringBuilder errstr, UIntPtr errstr_size)
     => _new(type, conf, errstr, errstr_size);
Beispiel #11
0
 public static extern IntPtr rd_kafka_new(RdKafkaType type, IntPtr conf, IntPtr errstr, int errstr_size);