Ho fatto qualche esperimento di utilizzo di PubNub in VB.NET, dato che gli esempi del sito sono solo in C#.Per chi non lo sapesse PubNub è un servizio di messaggistica realtime basato su canali con un modello publish-subscribe (simile a Telegram) . La cosa simpatica è che il piano base è gratuito fino a 1M di transazioni e 1GB di persistenza dei dati.Per prima cosa occorre registrarsi, creare un'app specificandone il nome.A questo punto avremo a disposizione due chiavi, una per pubblicare (pub-.....) ed una per sottoscrivere un canale (sub-.....).
- Creiamo un progetto VB.NET con una form
- In Visual Studio andiamo su Strumenti->Gestione pacchetti NuGet->Gestisci pacchetti NuGet per la soluzione ed importiamo il pacchetto PubNub
A questo punto possiamo iniziare a scrivere il nostro codice: per comodità ho inserito tutto nel form_shown
Private Sub FrmMAIN_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown
Dim pnConfiguration As New PubnubApi.PNConfiguration()
'Inserire la propria chiave qui sotto
pnConfiguration.SubscribeKey = "sub-xxxxxxxxxxxxx"
pnConfiguration.Secure = False
PubNub = New PubnubApi.Pubnub(pnConfiguration)
'preparo la call back
Dim IncomingMessages As Action(Of PubnubApi.Pubnub, PubnubApi.PNMessageResult(Of Object)) = AddressOf IncomingMessagesCB
Dim IncomingPresence As Action(Of PubnubApi.Pubnub, PubnubApi.PNPresenceEventResult) = AddressOf IncomingPresenceCB
Dim IncomingStatus As Action(Of PubnubApi.Pubnub, PubnubApi.PNStatus) = AddressOf IncomingStatusCB
Dim sc As New PubnubApi.SubscribeCallbackExt(IncomingMessages, IncomingPresence, IncomingStatus)
'aggiungo il listener
PubNub.AddListener(sc)
PubNub.Subscribe(Of String).Channels(New String() {"Il_mio_canale"}).Execute()
End Sub
'callback per la gestione dei messaggi
Private Sub IncomingMessagesCB(pn As PubnubApi.Pubnub, messageResult As PubnubApi.PNMessageResult(Of Object))
If messageResult IsNot Nothing Then
Debug.Print("In Example, SubscribeCallback received PNMessageResult")
Debug.Print("In Example, SubscribeCallback messsage channel = " + messageResult.Channel)
Debug.Print("In Example, SubscribeCallback messsage channelGroup = " + messageResult.Subscription)
Debug.Print("In Example, SubscribeCallback messsage publishTimetoken = " + messageResult.Timetoken.ToString)
Debug.Print("In Example, SubscribeCallback messsage publisher = " + messageResult.Publisher)
Dim jsonString = messageResult.Message.ToString()
Dim msg As Dictionary(Of String, String) = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Dictionary(Of String, String))(jsonString)
Debug.Print("msg: " + msg("msg"))
End if
End Sub
'callback per la gestione della presenza
Private Sub IncomingPresenceCB(pn As PubnubApi.Pubnub, presencResult As PubnubApi.PNPresenceEventResult)
If presencResult IsNot Nothing Then
Debug.Print("In Example, SubscribeCallback received PNPresenceEventResult")
Debug.Print(presencResult.Channel + " " + presencResult.Occupancy + " " + presencResult.Event)
End If
End Sub
'callback per la gestione dello stato
Private Sub IncomingStatusCB(pn As PubnubApi.Pubnub, statusResult As PubnubApi.PNStatus)
If statusResult.Category = PubnubApi.PNStatusCategory.PNConnectedCategory Then
Debug.Print(statusResult.Category.ToString)
End If
End Sub