= Description The Daemon class is a wrapper class that allows you to run your code as a Windows service. = Synopsis class Daemon def service_main while running? sleep 3 File.open("c:\\test.log","a+"){ |f| f.puts "service is running" } end end end Daemon.mainloop = Class Methods Daemon.mainloop This is the method that actually puts your code into a loop and allows it to run as a service. The code that is actually run while in the mainloop is what you defined in the Daemon#service_main method. = Instance Methods Daemon#running? Returns whether or not the daemon is running. This is just a shortcut for checking if the state is RUNNING, PAUSED or IDLE. This is typically used within your service_main method. See the demo_daemon.rb file in the 'examples' directory for an example of how it's used in practice. Daemon#service_init Any code defined defined within this method occurs before service_main is reached. Any initialization code that takes more than two seconds to execute should be placed here. Otherwise, your service may timeout when you try to start it. Daemon#service_main(*args) You are expected to define your own service_main() method. The code defined in this method is the code that will run while running as a service. Any +args+ passed to Service.start are passed to this method. Daemon#state Returns the current state of the Daemon. For a list of valid states, see the Constants section below. = Signal Event Hooks These methods are called if defined within your Daemon class, and the appropriate signal is received by your service. Daemon#service_stop Called if the service receives a SERVICE_CONTROL_STOP signal. This is what the Service.stop() method sends. Daemon#service_pause Called if the service receives a SERVICE_CONTROL_PAUSE signal. This is what the Service.pause() method sends. Daemon#service_resume Called if the service receives a SERVICE_CONTROL_CONTINUE signal. This is what the Service.resume() method sends. Daemon#service_interrogate Called if the service receives a SERVICE_CONTROL_INTERROGATE signal. This notifies a service that it should report its current status information to the service control manager. Daemon#service_shutdown Called if the service receives a SERVICE_CONTROL_SHUTDOWN signal. Daemon#service_netbindadd Called if the service receives a SERVICE_CONTROL_NETBINDADD signal. This notifies a network service that there is a new component for binding. Daemon#service_netbinddisable Called if the service receives a SERVICE_CONTROL_NETBINDDISABLE signal. This notifies a network service that one of its bindings has been disabled. Daemon#service_netbindenable Called if the service receives a SERVICE_CONTROL_NETBINDENABLE signal. This Notifies a network service that a disabled binding has been enabled. Daemon#service_netbindremove Called if the service receives a SERVICE_CONTROL_NETBINDREMOVE signal. This notifies a network service that that a component for binding has been removed. Daemon#service_paramchange Called if the service receives a SERVICE_CONTROL_PARAMCHANGE signal. This notifies a service that its startup parameters have changed. = Constants === Service state constants Daemon::CONTINUE_PENDING The service continue is pending. Daemon::PAUSE_PENDING The service pause is pending. Daemon::PAUSED The service is paused (but not STOPPED). Daemon::RUNNING The service is running. Daemon::START_PENDING The service is starting (but is not yet in a RUNNING state). Daemon::STOP_PENDING The service is stopping (but is not yet in a STOPPED state). Daemon::STOPPED The service is not running. Daemon::IDLE The service is running, in an idle state. This is a custom state that we added that gets around a thread blocking issue. = Notes You must create a service before you can actually run it. Look in the examples directory for the files 'demo_daemon.rb' and 'demodaemon_ctl.rb'. They're small and straightforward examples of how to control, install and setup your own Daemon. = Known Bugs None known. Please report any bugs you find on the Bug tracker at http://rubyforge.org/projects/win32utils. = Future Plans Suggestions welcome. Please log them on the Feature Request tracker at http://rubyforge.org/projects/win32utils = Acknowledgements Many thanks go to Patrick Hurley for providing the fix for the thread blocking issue. Thanks also go to Kevin Burge for his patch that solved service responsiveness issues. = Copyright (C) 2003-2007 Daniel J. Berger, All Rights Reserved = License Ruby's = Warranty This package is provided "as is" and without any express or implied warranties, including, without limitation, the implied warranties of merchantability and fitness for a particular purpose. = Author(s) * Daniel J. Berger * Park Heesob