class:: AbstractServerAction summary:: register actions to be taken for a server related:: Classes/Server, Classes/ServerBoot, Classes/ServerTree, Classes/ServerQuit categories:: Control description:: This is an strong::abstract superclass:: for singletons like link::Classes/ServerQuit::, which provides a place for registering functions and objects for events that should happen when something happens in the server. No direct call to AbstractServerAction is required. note:: not fully working on Linux and windows. Setting the computer to sleep on these systems causes the actions to be called. As to date in Linux, JACK does not survive a sleep, it nevertheless behaves correctly for the time being. :: ClassMethods:: method::functionSelector Subclasses return specific function selectors for objects that implement this as interface. Selectors are: list:: ## doOnServerBoot - link::Classes/ServerBoot:: ## doOnServerQuit - link::Classes/ServerQuit:: ## doOnServerTree - link::Classes/ServerTree:: :: not for registry with a server, but analogous are: list:: ## doOnCmdPeriod - link::Classes/CmdPeriod:: ## doOnStartUp - link::Classes/StartUp:: ## doOnShutDown - link::Classes/ShutDown:: :: method::add Add an action or object for registry. argument::object Can either be a link::Classes/Function:: to be evaluated (as first arg the server is passed in), or an link::Classes/Object:: that implements the message returned by link::#-functionSelector::. strong::One object is only registered once::, so that multiple additions don't cause multiple calls. argument::server Server for which to register. If the symbol strong::\default:: is passed in, the action is called for the current default server. If the symbol strong::\all:: is passed in, the action is called for all current servers. If server is nil, it is added to \all. method::remove Remove an item or object from registry. If server is nil, remove from strong::all:: key. method::removeServer Remove all items that are registered for a given server. Examples:: code:: // ServerBoot s.boot; f = { |server| "------------The server '%' has booted.------------\n".postf(server) }; ServerBoot.add(f, \default); s.quit; // quit the server and observe the post s.boot; ServerBoot.remove(f, \default); // remove it again s.quit; s.boot;// no post. ServerBoot.add(f, Server.internal); Server.internal.quit; Server.internal.boot; ServerBoot.removeAll; // clear all :: code:: // ServerQuit s.boot; f = { |server| "------------The server '%' has quit.------------\n".postf(server) }; ServerQuit.add(f, \default); s.quit; // quit the server and observe the post s.boot; ServerQuit.remove(f, \default); // remove it again s.quit; // no post. ServerQuit.add(f, Server.internal); Server.internal.boot; Server.internal.quit; ServerQuit.removeAll; // clear all :: code:: // ServerTree s.quit; f = { |server| "-------The server '%' has initialised tree.-------\n".postf(server) }; g = { |server| 10.do { Group(server).postln } }; ServerBoot.add(f, \default); ServerTree.add(g, \default); s.boot; // boot and see how the actions are evaluated in order // "cmd-period" (or equivalent) resends the groups. ServerBoot.removeAll; // clear all ServerTree.removeAll; // clear all ::