Back in this post i mentioned that we’re looking at improved Service Discovery for RemObjects SDK.

Well, that’s still a bit off (it won’t be shipping in the November releases, as we have an extremely busy cycle ahead of ourselves for that), but i got around to playing and advancing this yet a bit last night and wanted to show a sneak peak.

the screenshot below shows a (ever so slightly) modified MegaDemo that has been adjusted to leverage the new ZeroConfRegistration component to register it’s services with ZeroConf (aka DNS-SD or Bonjour). Literally the only code changes are that the component was dropped, and that a new attribute was added to the Megademo Service:


(the last part could have been omitted, in which case the default name – the class name – would be used.)

The MegaDemo server is being run in a Windows 2008 VM, called VEMMY – that’ll become relevant soon.

As soon as the “Activate” button is clicked to start the server, Bonjour Browser (here running on the host machine, but really it could be running on any other computer on the LAN or configured for the same wide-area service discovery domain, more in that later) shows a new service of type megademorosdk._tcp., with the name of VEMMY. If i click “Deactivate”, it disappears again, right away.

By default, ZeroConfRegistration uses the machine name to register your service (so if you run the same executable on three different machines, it will show up under three different names automatically). That’s why our service showed up in Bonjour Browser named “VEMMY”. This can of course be overriden, so your server could — say — load a specific name from its configuration.

Finally, hiding in the back, is the Mac OS X version of our Mega Demo (which you’ve seen before here). It too has been updated to support ZeroConf, which was a matter of a few lines of code using Cocoa’s standard NSNetServiceBrowser class that already implements the Bonjour discovery infrastructure. As new services are discovered, they are automatically added to the combo box; as they go away they are removed.

You can see in the screen shot that VEMMY was found (this time across the WLAN, as the client demo is running on my laptop). using the initWithNetService method on the RORemoteService class, the client code instantiates a proxy for that service (without having to worry about host name, port, or even channel and message type), and fire away to make its calls:

remloteService = [[RORemoteService alloc] initWithNetService:netService]; megaDemoLibrary = [[MegaDemoService_Proxy alloc] initWithService:remloteService]; int result = [megaDemoLibrary sum:A:B];

The above sample shows a .NET server and a Mac client, but the same concepts will of course apply to clients and servers written with either of the three versions of the product.

As mentioned before, the new discovery support will not make it for the Nov08 releases (it’s still very much a work in progress, and September and October have been and will be so busy months here at RO that we don’t have the time to fully concentrate on this, just yet). But i’m looking forward to this receiving our full focus come December, so hopefully this will ship in Feb09.

On more short term news, look forward to the official announcement of the RemObjects Client SDK of OS X, very soon.


marc hoffman

Chief Architect and CEO here at RemObjects Software. Project Manager for Elements and lead developer of Fire, our awesome new development environment for the Mac.