0

I am using VB.NET with Ably .NET Realtime library version 1.2.1. I have a wrapper class setting up and managing Ably. The class implements ILoggerSink. It is setting up the channel as shown by these snippets from different parts of the 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))

The interface method starts with this definition:

Public Sub LogEvent(level As LogLevel, message As String) Implements ILoggerSink.LogEvent
'The rest of the sub here.

All of the other Ably things managed by this class work - attaching to the channel, publishing messages and receiving messages. The class gets mChannel.StateChanged and mChannel.[Error] events.

The LogEvent method never gets called. What am I missing? Thanks.

Update: The accepted answer worked and was a simple thing I missed seeing in any documentation. Here is the corrected line of code:

Dim opt = New ClientOptions(Main.AblyConnectionKey) With {.EchoMessages = False, .LogLevel = LogLevel.Debug, .LogHander = Me}

Also deemed noteworthy is that this class is a singleton.

1 Answer 1

1

The missing piece is that you need to tell the library which LoggerSink to use.

Something like Logger.LoggerSink = Me.

You need to be careful because the ably Logger is static and there is only once instance for the whole program. It will be a problem if you are going to instantiate more than one instance of you Ably class.

Generally it's recommended to have 1 instance of the RealtimeClient anyway so you will probably be Ok with the above code.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.