iOS Question WebSocket Server Disconnect Issue

aaronk

Well-Known Member
Licensed User
Longtime User
Hi,

I am using the following code, and it's sending / receiving data fine etc. However if the server (B4J app) closes the WebSocket connection the B4i app seems to crash.

B4X:
'Class module
Sub Class_Globals
   
    Private mModule As Object 
    Private mEventName As String
   
    Dim ws As WebSocket
   
End Sub

Public Sub Initialize(pModule As Object, pEventName As String)
    mModule = pModule
    mEventName = pEventName
   
    ws.Initialize("ws")
   
End Sub

Private Sub ws_Connected
    Log("Connected")
End Sub

Private Sub ws_Closed (Reason As String)
    Log("Close - " & Reason)
End Sub

Public Sub SendMessageToCloud(Msg As String)
    SendEventToServer("Device_MessageFrom", CreateMap("text": Msg))
End Sub

'Raises an event on the server. The Event parameter must include an underscore
Public Sub SendEventToServer(Event As String, Data As Map)
    Dim m As Map
    m.Initialize
    m.Put("type", "event")
    m.Put("event", Event)
    m.Put("params", Data)
    Dim jg As JSONGenerator
    jg.Initialize(m)
    ws.SendText(jg.ToString)
End Sub

Sub SendToServer(msg As String)
   Dim data As Map
   data.Initialize
   data.Put("message", msg)
   SendEventToServer("cloud_message", data)
End Sub

Sub server_incoming(Params As List)
    Dim msg As String
        msg = Params.Get(0)
   
    Log(msg)
       
End Sub

Sub Disconnect
    ws.Close
End Sub

Sub Connect
    ' connect to WebSocket server
    ws.Connect("ws://127.0.0.1:8888/app")
End Sub

' Same as SendToServer
Sub SendData(msg As String)
    SendToServer(msg)
End Sub

Private Sub ws_TextMessage(msg As String)
    Try
        Dim jp As JSONParser
        jp.Initialize(msg)
        Dim m As Map = jp.NextObject
        Dim etype As String = m.get("etype")
        Dim params As List = m.get("value")
        Dim Event As String = m.get("prop")
        If etype = "runFunction" Then
            If Event = "server_incoming" Then
                server_incoming(params)
            End If
        End If
    Catch
        Log("TextMessage Error: " & LastException)
    End Try
End Sub

Error:

The Sub ws_Closed doesn't seem to get triggered.

Any ideas on what I am doing wrong?

Using B4i Version 3.01 on Windows 10 (using Parallels desktop)
Local B4i Build Server Version 3.01
XCode Version 8.2.1 (8C1002)

When using the same code in B4J it seems to work fine.
 

aaronk

Well-Known Member
Licensed User
Longtime User
It should fix this issue.
It seems to fix it, but..

When the WebSocket is closed it now triggers the following code:
B4X:
Private Sub ws_Closed (Reason As String)
    Log("Close - " & Reason)
End Sub

However, it logs: Close - <null>

Should the reason in that sub return something other than <null> or is it not used ?
 
Upvote 0
Cookies are required to use this site. You must accept them to continue using the site. Learn more…