Android Example Simple Socket Class

Hi All

I have created a simple socket class for a project we a doing. Thought I might share it. Hopefully it will be of use to others.

Regards

John.

B4X:
Type=Class
Version=2.71
@EndOfDesignText@
'Class module
Sub Class_Globals
   
    Private callback As Object
    Private event As String
   
    Dim WS_SOCKET As Socket
    Dim WS_IO_ASTREAM As AsyncStreams
   
   
End Sub

'Initializes the object. You can add parameters to this method if needed.
Public Sub Initialize(callBackModule As Object,callBackEvent As String)
   
    callback = callBackModule
    event = callBackEvent

    WS_SOCKET.Initialize("ws_socket")

End Sub

Sub ws_socket_Connected(Connected As Boolean)As Boolean
   
   
    Try
        If Connected = True Then
            If Not(WS_IO_ASTREAM.IsInitialized ) Then
                WS_IO_ASTREAM.Initialize(WS_SOCKET.InputStream,WS_SOCKET.OutputStream,"wsStream")
            End If
            Log(DateTime.Time(DateTime.now) & " *** sockets::ws_socket_Connected(" & callback & ") " & Connected)
        Else
            If SubExists(callback, event & "_failure") Then
                CallSub2(callback, event & "_failure",LastException.Message)
            End If
        End If
        If SubExists(callback, event & "_Connected") Then
            CallSub2(callback, event & "_Connected",Connected)
        End If
    Catch
        Log(DateTime.Time(DateTime.now) & " *** sockets::ws_socket_Connected(" & callback & ") " & LastException.Message )
        If SubExists(callback, event & "_socket_failure") Then
            CallSub2(callback, event & "_failure",LastException.Message)
        End If
    End Try

    Return Connected
   
End Sub

Sub wsStream_NewData (Buffer() As Byte)
 
    Dim wsData As String
   
    wsData = BytesToString(Buffer, 0, Buffer.Length, "ASCII")
    If SubExists(callback, event & "_DataArrival") Then
        CallSub2(callback, event & "_DataArrival",wsData)
    End If

End Sub

Sub wsStream_Terminated()
   
    ws_close
   
End Sub

Sub ws_connect(pHost As String, pPort As Int, pTimeout As Int)
   
    If Not(WS_SOCKET.IsInitialized) Then
        WS_SOCKET.Initialize("ws_socket")
    End If
    Log(DateTime.Time(DateTime.now) & " *** sockets::ws_connect(" & pHost & ":" & pPort & ")")
    WS_SOCKET.Connect(pHost,pPort,pTimeout)

End Sub
Sub ws_close()
   
    If WS_SOCKET.Connected Then
        WS_SOCKET.Close
        Log(DateTime.Time(DateTime.now) & " *** sockets::ws_close(" & callback & ")")
    End If

End Sub

Sub ws_isConnected() As Boolean
   
    Return WS_SOCKET.Connected 

End Sub

Sub ws_isInitialised() As Boolean
   
    Return WS_SOCKET.IsInitialized 

End Sub

Sub ws_senddata(pData As String)

    Dim Buffer() As Byte
   
    If Not(ws_isConnected) Then
        Return
    End If
   
    Try
       
        If Not(WS_IO_ASTREAM.IsInitialized) Then
            Log(DateTime.Time(DateTime.now) & " *** sockets::ws_senddata() WS_IO_ASTREAM.Initialize")
            WS_IO_ASTREAM.Initialize(WS_SOCKET.InputStream,WS_SOCKET.OutputStream,"wsStream")
        End If
   
        Buffer = pData.GetBytes("UTF8")
        If Not(WS_IO_ASTREAM.Write(Buffer)) Then
            Log(DateTime.Time(DateTime.now) & " *** sockets::ws_senddata() WS_IO_ASTREAM.write failed")
            If SubExists(callback, event & "_failure") Then
                CallSub2(callback, event & "_failure",LastException.Message)
            End If
        End If
    Catch
        Log(LastException.Message)
    End Try
   
   
End Sub
 

Attachments

  • sockets.bas
    3 KB · Views: 657
Last edited:
Top