Platforms to show: All Mac Windows Linux Cross-Platform
/MacFrameworks/NSNetService/NSNetService iOS/Desktop App
You find this example project in your Plugins Download as a Xojo project file within the examples folder: /MacFrameworks/NSNetService/NSNetService iOS/Desktop App
This example is the version from Sun, 13th May 2023.
Project "Desktop App.xojo_binary_project"
Class App Inherits DesktopApplication
Const kEditClear = "&Delete"
Const kFileQuit = "&Quit"
Const kFileQuitShortcut = ""
End Class
Class MainWindow Inherits DesktopWindow
Control List Inherits DesktopListBox
ControlInstance List Inherits DesktopListBox
End Control
Control ServiceNameField Inherits DesktopTextField
ControlInstance ServiceNameField Inherits DesktopTextField
EventHandler Sub TextChanged()
MyServerSocket.ServiceName = me.Text
End EventHandler
End Control
EventHandler Sub Opening()
MyServerSocket.ServiceName = ServiceNameField.Text
StartServer
AdvertiseService
End EventHandler
Sub AdvertiseService()
Const domain = "" // default
Const type = "_test._tcp."
Const name = "MyTestService"
Dim port As Integer = ServerSocket.port
Service = New MyNetService(domain, type, name, port)
Service.publish
End Sub
Sub StartServer()
ServerSocket = New MyServerSocket
ServerSocket.MinimumSocketsAvailable = 3
ServerSocket.Listen
System.DebugLog "Waiting on port "+ServerSocket.Port.ToString
End Sub
Property ServerSocket As MyServerSocket
Property Service As MyNetService
End Class
MenuBar MainMenuBar
MenuItem FileMenu = "&File"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Edit"
MenuItem EditUndo = "&Undo"
MenuItem EditSeparator1 = "-"
MenuItem EditCut = "Cu&t"
MenuItem EditCopy = "&Copy"
MenuItem EditPaste = "&Paste"
MenuItem EditClear = "#App.kEditClear"
MenuItem EditSeparator2 = "-"
MenuItem EditSelectAll = "Select &All"
MenuItem HelpMenu = "&Help"
End MenuBar
Class MyServerSocket Inherits ServerSocket
EventHandler Function AddSocket() As TCPSocket
Dim t As New MySocket
Return t
End EventHandler
EventHandler Sub Error(ErrorCode As Integer, err As RuntimeException)
System.DebugLog CurrentMethodName+": "+ErrorCode.ToString
End EventHandler
Property Shared ServiceName As String
End Class
Class MySocket Inherits TCPSocket
EventHandler Sub Connected()
System.DebugLog CurrentMethodName
// let's send a greeting. In general you have to think about the protocol you like to use.
// we pick JSON packets
Dim j As New JSONItem
j.Value("ServiceName") = MyServerSocket.ServiceName
j.Value("Version") = app.Version
Send j
End EventHandler
EventHandler Sub DataAvailable()
System.DebugLog CurrentMethodName
Dim buf As String = Me.ReadAll
buffer = buffer + buf
Dim Delimiter As String = "}"+EndOfLine.UNIX
Dim pos As Integer = buffer.IndexOf(Delimiter)
While pos >= 0
Dim packet As String = buffer.Left(pos+1)
Process packet
buffer = buffer.Middle(pos+2)
pos = buffer.IndexOf(Delimiter)
Wend
End EventHandler
EventHandler Sub Error(err As RuntimeException)
System.DebugLog CurrentMethodName+": "+err.ErrorNumber.ToString
Break
End EventHandler
Sub Process(Packet as string)
Dim j As New JSONItem(Packet)
If j.HasKey("Message") Then
Dim s As String = j.Value("Message")
dim now as new date
MainWindow.List.AddRow s, now.SQLDateTime
End If
End Sub
Sub Send(j as JSONItem)
Me.Write j.ToString
Me.Write EndOfLine.UNIX
// we send EndOfLine, so we can watch on other side for } + endofline as delimiter
End Sub
Property Buffer As string
End Class
Class MyNetService Inherits NSNetServiceMBS
EventHandler Sub DidNotPublish(Error as Dictionary)
Dim ErrorCode As Integer = error.Lookup(NSNetServicesErrorCode, "")
'Dim errorDomain As String = error.Lookup(NSNetServicesErrorDomain, "")
System.DebugLog CurrentMethodName+": "+ErrorCode.ToString
End EventHandler
EventHandler Sub DidPublish()
System.DebugLog CurrentMethodName
End EventHandler
EventHandler Sub DidStop()
System.DebugLog CurrentMethodName
End EventHandler
EventHandler Sub WillPublish()
System.DebugLog CurrentMethodName
End EventHandler
End Class
End Project
See also:
The items on this page are in the following plugins: MBS MacFrameworks Plugin.