Platforms to show: All Mac Windows Linux Cross-Platform
Required plugins for this example: MBS Linux Plugin
Last modified Wed, 25th Sep 2012.
You find this example project in your MBS Xojo Plugin download as a Xojo project file within the examples folder: /Linux/Avahi Browse
Download this example: Avahi Browse.zip
Project "Avahi Browse.xojo_binary_project"
Class App Inherits Application
Const kEditClear = "&Löschen"
Const kFileQuit = "Beenden"
Const kFileQuitShortcut = ""
EventHandler Sub Open()
if MyClient.available = false then
MsgBox "Please run on Linux with avahi installed."
quit
end if
client = new MyClient
log "HostName: "+Client.HostName
log "Domain: "+Client.DomainName
log "Version: "+Client.Version
// for the list of domains we find
domains = new Dictionary
// for the list of types we find
types = new Dictionary
// for the browsers we run
Browsers = new Dictionary
// for the resolvers we run
Resolvers = new Dictionary
// look for types
typebrowser = new MyTypeBrowser(client)
call typebrowser.BrowseTypes(typebrowser.kInterfaceAny, typebrowser.kProtocolAny)
End EventHandler
Sub Browse()
for each domain as string in domains.Keys
for each type as string in types.keys
dim key as string = type+domain
if Browsers.HasKey(key) then
// already handled
else
dim b as new MyBrowser(client)
if b.Browse(b.kInterfaceAny, b.kProtocolAny, type, domain) then
Browsers.Value(key) = b
end if
end if
next
next
End Sub
Property Browsers As Dictionary
Property Client As MyClient
Property Domains As Dictionary
Property Resolvers As Dictionary
Property Types As Dictionary
Property typebrowser As MyTypeBrowser
End Class
Class MainWindow Inherits Window
Control List Inherits Listbox
ControlInstance List Inherits Listbox
End Control
Control Timer1 Inherits Timer
ControlInstance Timer1 Inherits Timer
EventHandler Sub Action()
// speedup the plugin
AvahiClientMBS.Poll
End EventHandler
End Control
End Class
MenuBar MenuBar1
MenuItem FileMenu = "&Ablage"
MenuItem FileQuit = "#App.kFileQuit"
MenuItem EditMenu = "&Bearbeiten"
MenuItem EditUndo = "&Rückgängig"
MenuItem UntitledMenu1 = "-"
MenuItem EditCut = "&Ausschneiden"
MenuItem EditCopy = "&Kopieren"
MenuItem EditPaste = "&Einfügen"
MenuItem EditClear = "#App.kEditClear"
MenuItem UntitledMenu0 = "-"
MenuItem EditSelectAll = "&Alles auswählen"
End MenuBar
Class MyClient Inherits AvahiClientMBS
EventHandler Sub Failure(error as string, errorcode as integer)
Log "Client Failure: "+error
End EventHandler
EventHandler Sub Running()
log "Running..."
End EventHandler
End Class
Class MyBrowser Inherits AvahiBrowserMBS
EventHandler Sub Failure(error as string, errorcode as integer)
Log "Browser Failure: "+error
End EventHandler
EventHandler Sub ServiceFound(InterfaceIndex as integer, protocol as Integer, name as string, type as string, domain as string, flags as integer)
Log "Found Service "+name+" of type "+type+" ("+description+") at domain "+domain
dim key as string = name+type+domain
if app.Resolvers.HasKey(key) then
// already running
else
dim r as new MyResolver(Client)
if r.Resolve(InterfaceIndex, protocol, name, type, domain, 0) then
app.Resolvers.Value(key) = r
end if
end if
End EventHandler
EventHandler Sub ServiceRemoved(InterfaceIndex as integer, protocol as Integer, name as string, type as string, domain as string, flags as integer)
Log "Lost Service "+name+" of type "+type+" ("+description+") at domain "+domain
// here you could stop resolvers started in the ServiceFound events
End EventHandler
Property description As string
End Class
Class MyResolver Inherits AvahiResolverMBS
EventHandler Sub Failure(error as string, errorcode as integer)
Log "Resolver Failure: "+error
End EventHandler
EventHandler Sub Found(interfaceIndex as integer, Protocol as Integer, name as string, type as string, domain as string, hostname as string, port as integer, address as string, txt as string, flags as integer)
Log "Found Address "+address+":"+str(port)+" for "+name
End EventHandler
End Class
Module Module1
Sub Log(s as string)
MainWindow.List.AddRow str(ticks), s
MainWindow.List.ScrollPosition = MainWindow.List.ListCount
End Sub
End Module
Class MyTypeBrowser Inherits AvahiTypeBrowserMBS
EventHandler Sub Failure(error as string, errorcode as integer)
Log "Browser Failure: "+error
End EventHandler
EventHandler Sub TypeFound(InterfaceIndex as integer, protocol as Integer, type as string, domain as string, flags as integer)
Log "Found Type "+type+" ("+description+") at domain "+domain
app.domains.Value(domain) = domain
app.types.Value(type) = type
app.Browse
End EventHandler
EventHandler Sub TypeRemoved(InterfaceIndex as integer, protocol as Integer, type as string, domain as string, flags as integer)
Log "Lost Type "+type+" ("+description+") at domain "+domain
// here you could stop resolvers started in the ServiceFound events
End EventHandler
Property description As string
End Class
End Project
See also:
Download this example: Avahi Browse.zip
The items on this page are in the following plugins: MBS Linux Plugin.
