Ably Pub/Sub 实时 ILoggerSink LogEvent 不工作
Ably Pub/Sub Realtime ILoggerSink LogEvent not working
我正在使用 VB.NET 和 Ably .NET 实时库版本 1.2.1。我有一个包装器 class 设置和管理 Ably。 class 实现了 ILoggerSink。它正在设置频道,如 class:
不同部分的这些片段所示
Public Class Ably
Implements IDisposable, ILoggerSink
.
.
Private WithEvents mChannel As IRealtimeChannel
Private Delegate Sub ReceiveMessageDelegate(ByVal m As Message)
Private Delegate Sub PublishCallbackDelegate(ByVal result As Boolean, ByVal einfo As ErrorInfo)
Private mPublishCallbackDelegate As PublishCallbackDelegate = AddressOf PublishCallback
Private mReceiveMessageDelegate As ReceiveMessageDelegate = AddressOf ReceiveMessage
.
.
Dim opt = New ClientOptions(Main.AblyConnectionKey) With {.EchoMessages = False, .LogLevel = LogLevel.Debug}
Dim art = New AblyRealtime(opt)
mChannel = art.Channels.Get(idstr)
mChannel.Subscribe(Sub(m) mReceiveMessageDelegate(m))
.
.
mChannel.Publish(mname, mdata, Sub(m, n) mPublishCallbackDelegate(m, n))
接口方法以此定义开头:
Public Sub LogEvent(level As LogLevel, message As String) Implements ILoggerSink.LogEvent
'The rest of the sub here.
此 class 管理的所有其他 Ably 事物都可以工作 - 附加到频道、发布消息和接收消息。 class 获取 mChannel.StateChanged 和 mChannel.[Error] 事件。
从未调用 LogEvent 方法。我错过了什么?谢谢
更新:已接受的答案有效,是我在任何文档中都没有看到的简单内容。这是更正后的代码行:
Dim opt = New ClientOptions(Main.AblyConnectionKey) With {.EchoMessages = False, .LogLevel = LogLevel.Debug, .LogHander = Me}
同样值得注意的是,这个 class 是一个单例。
缺少的部分是您需要告诉图书馆要使用哪个LoggerSink
。
类似于Logger.LoggerSink = Me
。
你需要小心,因为干练的Logger
是静态的,整个程序只有一次实例。如果你要实例化一个以上的你的实例,那将是一个问题 Ably
class.
一般来说,无论如何都建议拥有 1 个 RealtimeClient 实例,这样您可能会接受上面的代码。
我正在使用 VB.NET 和 Ably .NET 实时库版本 1.2.1。我有一个包装器 class 设置和管理 Ably。 class 实现了 ILoggerSink。它正在设置频道,如 class:
不同部分的这些片段所示Public Class Ably
Implements IDisposable, ILoggerSink
.
.
Private WithEvents mChannel As IRealtimeChannel
Private Delegate Sub ReceiveMessageDelegate(ByVal m As Message)
Private Delegate Sub PublishCallbackDelegate(ByVal result As Boolean, ByVal einfo As ErrorInfo)
Private mPublishCallbackDelegate As PublishCallbackDelegate = AddressOf PublishCallback
Private mReceiveMessageDelegate As ReceiveMessageDelegate = AddressOf ReceiveMessage
.
.
Dim opt = New ClientOptions(Main.AblyConnectionKey) With {.EchoMessages = False, .LogLevel = LogLevel.Debug}
Dim art = New AblyRealtime(opt)
mChannel = art.Channels.Get(idstr)
mChannel.Subscribe(Sub(m) mReceiveMessageDelegate(m))
.
.
mChannel.Publish(mname, mdata, Sub(m, n) mPublishCallbackDelegate(m, n))
接口方法以此定义开头:
Public Sub LogEvent(level As LogLevel, message As String) Implements ILoggerSink.LogEvent
'The rest of the sub here.
此 class 管理的所有其他 Ably 事物都可以工作 - 附加到频道、发布消息和接收消息。 class 获取 mChannel.StateChanged 和 mChannel.[Error] 事件。
从未调用 LogEvent 方法。我错过了什么?谢谢
更新:已接受的答案有效,是我在任何文档中都没有看到的简单内容。这是更正后的代码行:
Dim opt = New ClientOptions(Main.AblyConnectionKey) With {.EchoMessages = False, .LogLevel = LogLevel.Debug, .LogHander = Me}
同样值得注意的是,这个 class 是一个单例。
缺少的部分是您需要告诉图书馆要使用哪个LoggerSink
。
类似于Logger.LoggerSink = Me
。
你需要小心,因为干练的Logger
是静态的,整个程序只有一次实例。如果你要实例化一个以上的你的实例,那将是一个问题 Ably
class.
一般来说,无论如何都建议拥有 1 个 RealtimeClient 实例,这样您可能会接受上面的代码。