Sub Class_Globals
Private Root As B4XView
Private xui As XUI
Private lstIPs As ListView
Private btnConnect As Button
Private selectedIP As String
Private xui As XUI
Private ServerSocket As ServerSocket
Private ClientSocket As Socket
Private AStreamsServer As AsyncStreams
Private AStreamsClient As AsyncStreams
Private defaultPort As Int = 5050
Private EditTextIP As EditText
Private BT_clear_log As Button
Private SendMessage As Button
End Sub
Public Sub Initialize
' B4XPages.GetManager.LogEvents = True
End Sub
'This event will be called once, before the page becomes visible.
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("MainPage")
lstIPs.SingleLineLayout.Label.TextSize = 13
lstIPs.SingleLineLayout.ItemHeight = 16dip
Dim myIP As String = GetLocalIP
lstIPs.AddSingleLine("Indirizzi ip:"&myIP)
Log("IP Device:"&myIP)
Sleep(500)
' Avvia il server
ServerSocket.Initialize(defaultPort, "ServerSocket")
ServerSocket.Listen
lstIPs.AddSingleLine("VMS server in ascolto... "&myIP)
Sleep(500)
lstIPs.AddSingleLine("porta predefinita: "&defaultPort)
Sleep(500)
End Sub
Sub GetLocalIP As String
Dim Server As ServerSocket
Server.Initialize(0, "")
Dim localIP As String = Server.GetMyWifiIP
Server.Close
Return localIP
End Sub
'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
Sub lstIPs_ItemClick(Position As Int, Value As Object)
lstIPs.Clear
selectedIP = Value
ToastMessageShow("IP selezionato: " & selectedIP, False)
lstIPs.AddSingleLine("IP Selezionato: "&selectedIP)
Sleep(500)
If selectedIP <> "" Then
ToastMessageShow("Connessione a " & selectedIP, False)
lstIPs.AddSingleLine("Connessione a:" & selectedIP)
Sleep(500)
' Qui puoi avviare la connessione al server
' Avvia il server
'ServerSocket.Initialize(defaultPort, "ServerSocket")
'ServerSocket.Listen
ToastMessageShow("Server in attesa di connessioni...", False)
lstIPs.AddSingleLine("Server in attesa di connessione...:" )
Sleep(500)
' ' Connetti al server remoto (modifica l'IP con quello del dispositivo server)
ClientSocket.Initialize("ClientSocket")
ClientSocket.Connect(selectedIP, defaultPort, 5000) ' Sostituisci con l'
Else
ToastMessageShow("Seleziona un IP prima di connetterti!", True)
End If
End Sub
Sub btnConnect_Click
ScanNetwork
End Sub
' Gestione connessione in entrata (Server)
Sub ServerSocket_NewConnection (Successful As Boolean, NewSocket As Socket)
If Successful Then
ToastMessageShow("Connessione stabilita con un client!", False)
lstIPs.AddSingleLine("Connessione stabilita con client: " & selectedIP)
Sleep(500)
AStreamsServer.Initialize(NewSocket.InputStream, NewSocket.OutputStream, "AStreamsServer")
Else
ToastMessageShow("Connessione fallita!", True)
lstIPs.AddSingleLine("Connessione fallita: " & selectedIP)
Sleep(500)
End If
End Sub
' Gestione connessione in uscita (Client)
Sub ClientSocket_Connected (Successful As Boolean)
If Successful Then
ToastMessageShow("Connesso al server remoto!", False)
lstIPs.AddSingleLine("Client connesso al server remote: " & selectedIP)
Sleep(500)
AStreamsClient.Initialize(ClientSocket.InputStream, ClientSocket.OutputStream, "AStreamsClient")
Else
ToastMessageShow("Connessione fallita!", True)
lstIPs.AddSingleLine("Connessione fallita: " & selectedIP)
Sleep(500)
End If
End Sub
' Ricezione dati dal server
Sub AStreamsServer_NewData (Buffer() As Byte)
Dim msg As String = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
ToastMessageShow("client: " & msg, False)
lstIPs.AddSingleLine("client: " & msg)
Sleep(500)
End Sub
' Ricezione dati dal client
Sub AStreamsClient_NewData (Buffer() As Byte)
Dim msg As String = BytesToString(Buffer, 0, Buffer.Length, "UTF8")
'ToastMessageShow("Messaggio ricevuto dal server: " & msg, False)
lstIPs.AddSingleLine("client: " & msg)
Sleep(500)
End Sub
' Invio messaggio al server o client
Sub SendMessage_Click
Dim str As String = EditTextIP.Text
If AStreamsServer.IsInitialized Then AStreamsServer.Write(str.GetBytes("UTF8"))
If AStreamsClient.IsInitialized Then AStreamsClient.Write(str.GetBytes("UTF8"))
ToastMessageShow("Messaggio inviato!", False)
lstIPs.AddSingleLine("@> "&EditTextIP.Text)
Sleep(500)
End Sub
Sub ScanNetwork()
ToastMessageShow("Scansione Avviata...",True)
Dim baseIP As String = "192.168.178."
Dim activeIPs As List
activeIPs.Initialize
Log(activeIPs)
For i = 1 To 255
Dim ip As String = baseIP & i
'If Ping(ip) Then
activeIPs.Add(ip)
Log(activeIPs)
'End If
Next
Log(activeIPs)
lstIPs.Clear
lstIPs.AddSingleLine("Generazione lista IP")
For Each ip As String In activeIPs
lstIPs.AddSingleLine(ip)
Next
End Sub
Sub Ping(targetIP As String) As Boolean
Dim p As Phone
Dim result As Int = p.Shell("ping", Array As String("-c", "178", targetIP), Null, Null)
Return (result = 0)
End Sub
Sub GetConnectedDevices
Dim p As Phone
Dim result As String = p.Shell("ip", Array As String("neigh"), Null, Null)
Log("Dispositivi connessi: " & result)
lstIPs.AddSingleLine(result)
End Sub
Private Sub BT_Connetti_Click
ToastMessageShow("Server in attesa di connessioni...", False)
lstIPs.AddSingleLine("Server in attesa di connessione... ")
Sleep(500)
' ' Connetti al server remoto (modifica l'IP con quello del dispositivo server)
If EditTextIP.Text.Length>0 Then
selectedIP= EditTextIP.Text
ClientSocket.Initialize("ClientSocket")
ClientSocket.Connect(selectedIP, defaultPort, 5000) ' Sostituisci con l'
Else
ToastMessageShow("Inserisci un indirizzo IP e premi 'Connetti'",True)
End If
End Sub
Private Sub BT_clear_log_Click
lstIPs.Clear
Dim myIP As String = GetLocalIP
lstIPs.AddSingleLine("Indirizzo ip:"&myIP&" ~ VMLOG Ver.1.1")
Sleep(500)
End Sub