B4J Question How to set up a simple websocket server

kostefar

Active Member
Licensed User
Longtime User
Dear All,

For reasons that I´ll skip explaining here (look here https://www.b4x.com/android/forum/threads/webview-continuously-receiving-data.95551/#post-603680 if you want the background) I need to set up a websocket server that I can communicate with on my intranet, simply sending frames to it that will processed.
So I´m trying to create a simple setup where I send a message every 3 seconds, and then I was hoping to find out how to manipulate it further.
But I get an error from the server side:

Code: Copy
java.lang.NullPointerException
    at anywheresoftware.b4j.object.WebSocketModule$Adapter.onWebSocketText(WebSocketModule.java:112)

Is anybody able to see what I´m doing wrong?

Thanks in advance, project attached.

PS: No, it won´t work to send this via UDP instead; they´re being sent from within a javascript.
 

Attachments

Last edited:
On the client side, you will be better off using the WebSocketHandler class instead of the raw WebSocketClient. Instead of sending text messages back and forth, you will be raising events with parameters.
 
Upvote 0
On the client side, you will be better off using the WebSocketHandler class instead of the raw WebSocketClient. Instead of sending text messages back and forth, you will be raising events with parameters.

Thanks, but I found a solution now.
I wasn´t aware of the syntax for messages that needs to be followed. So I have this now:

Code: Copy
Sub timer_tick
'Dim m As Map
'm.Initialize
    'm.Put ("time", DateTime.Now)
    Dim json As JSONGenerator
'    json.Initialize(m)
'    Dim jsonstring As String = json.ToString
'    Log (jsonstring)
    'ws.SendText(jsonstring)
    Dim timestring As String = DateTime.now
    Dim m As Map
    m.Initialize
    m.Put("type", "event")
    m.Put("event","Device_Message")
    m.Put("params", timestring)
    Dim jg As JSONGenerator
    jg.Initialize(m)
    ws.SendText(jg.ToString)
End Sub

And in the Websock Class I have:

Code: Copy
Sub Device_Message(Params As Map)
Dim indstring As String = Params
    indstring = indstring.replace("(String) ","")
Log (indstring)

End Sub

I guess it can be done more elegantly than this, but I´m pretty ok with it!
 
Upvote 0
Back
Top