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.


The biggest plugin in space...