• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: NSStatusItem, RunLoops and daemons (Oh My)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSStatusItem, RunLoops and daemons (Oh My)


  • Subject: Re: NSStatusItem, RunLoops and daemons (Oh My)
  • From: Matt Jaffa <email@hidden>
  • Date: Wed, 12 May 2004 15:41:53 -0600

Michael,

I can relate to the daemon side of your situation. I wrote a program with a daemon, Pref Panel and a Network Kernel Extension, not a driver extension though.

In my daemon since it is running as root, I used Shared memory to communicate with other processes. It starts up as a Startup Item, I do have some obj-C in it, but nothing to do with AppKit since it not allowed. If your daemon needs input from the user, then you can use CoreFoundation's CFUserNotification to get information from them. So I mixed my daemon with BSD C, and my own defined Obj-c classes.

Although Panther these days allows you to be able to post DistributedNotifications across Session boundaries with the right method. You could create an obj-c class in your code you don't want to totally change, create an instance of the defined class in your old code and have that object serve as the object that receives notifications.

Anybody on the list correct me if I am wrong, but this is what I have been doing and it works great for me.

Matt



On May 12, 2004, at 2:49 PM, Michael Cashwell wrote:

Greetings all,

I've read the archives here and at Omni and am basically more confused than before. What I'm looking for here is "been there, done that" guidance.

I'm working on the userland parts to go with an Ethernet-like driver I've written. The "like" qualifier stems from it needing some user-configurable data in the same vein as the Network Name or WEP/WPA are pushed down to the Airport driver before it will work.

I know I'll need a daemon to push down this information (via my user client) because it must happen during boot. This daemon will also need to use Quinn's MoreSCF to deal with the network config (Location changes). I know I'm going to need a system pref panel so the user can view and set this configurable data per Location and interface. And lastly, I could envision having an NSStatusItem in the menu bar while a user is logged in displaying status from the daemon (akin to signal strength in Airport).

From reading the archives it seems that a boot-context daemon should not try to handle an NSStatusItem itself. So it sounds like I'm going to need a user-context process for that. I'm planning to use mach_init.d to start the daemon and mach_init_per_user.d to start the status process. (As an aside, I don't understand the boot daemon startup stuff in Panther. It seems to ignore dependancies that the now-deprecated SystemStarter handled. It also does not seem to address shutdown or restart. It seems to want to defer starting daemons until they are "needed" but it's not clear how one expresses that need post-boot. Confusing.)

Where I'm hung up is the language to use for the daemon (BSD C or Obj-C) because of the need for IPC between them and the apparent prohibition against using some system frameworks (AppKit) within a daemon. What I have so far is:

Sys Pref Panel Obj-C / Cocoa
Status Obj-C / Cocoa
daemon ???

I have a rudimentary CLI app that I'm trying to morph into the daemon. But I'm stuck on the IPC with the other parts. According to the best docs I can find (http://developer.apple.com/documentation/UserExperience/Conceptual/ PreferencePanes/index.html) I could use distributed objects if I wrote the daemon in Obj-C / Cocoa. But that would be a rewrite from what I have now and I haven't been able to find any real CLI examples written this way. One-liners that CFShow a "Hello World" message or that don't show me how to handle argc / argv the cocoa way are of little help.

I could just stick with BSD C for the daemon but then I can't use distributed objects. That same html page says that I could use Distributed Notifications and goes on to show some code snippets, but no working example. And elsewhere on that page it says that for the notifications to work I must enter a Runloop. I also expect to need the RunLoop in order to register for changes in the Sys Config (Location) but I haven't really gotten that far.

The problem is, I cannot figure out how to create a run loop in a BSD (non-Obj-C, non-carbon) app. Again, it would seem to me that template / sample code claiming to be a daemon or tool written in Obj-C / Cocoa might show how to deal with the run loop.

While I admit I'm green on Obj-C/Cocoa, I do see the advantages for processes with any substantial UI. But I'm less sure about using it for a faceless daemon given the dearth of real example code showing how to do it right. But with the features I need I don't want to be closed minded.

If I've missed the sample code or made wrong guesses here please advise. Guidance welcome.

Many thanks,
Mike Cashwell
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.
_______________________________________________
cocoa-dev mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/cocoa-dev
Do not post admin requests to the list. They will be ignored.


References: 
 >NSStatusItem, RunLoops and daemons (Oh My) (From: Michael Cashwell <email@hidden>)

  • Prev by Date: Re: Inserting objects in content array
  • Next by Date: Re: Unsigned Long Long
  • Previous by thread: Re: NSStatusItem, RunLoops and daemons (Oh My)
  • Next by thread: Cocoa or C++ Database API
  • Index(es):
    • Date
    • Thread