sclang: ServerShmInterface - try to avoid multiple destructor calls
[supercollider.git] / HelpSource / Classes / Main.schelp
blob7356d0b831c83a270ed5131c4cabe622bd0608b4
1 class::Main
2 categories::Core>Kernel
3 summary:: The concrete instance of Process
4 related:: Classes/StartUp
6 description::
8 Main is the concrete instance of link::Classes/Process:: (the runtime environment for the virtual machine and interpreter).
9 Main overrides some methods of Process. There are two methods of interest. One is named startup and is
10 called after the class library has been compiled. The other is called shutdown which gets called when the library gets re-compiled.
12 method:: thisProcess
13 The singleton instance of Main is available through the special keyword thisProcess.
14 For example, to find out what platform you're on:
16 code::
17 thisProcess.platform;   // --> e.g. "an OSXPlatform", "a LinuxPlatform", ...
20 classMethods::
22 subsection:: SuperCollider version
23 These class methods tell you which version of SuperCollider you are running and whether that version complies to your required minimum / maximum settings:
25 method::version
27 returns:: the current version as a human readable string
29 method::versionAtLeast
30 check if we are running at least version maj.min
31 code::
32 Main.versionAtLeast( 3, 1 );
34 returns:: true or false
36 method::versionAtMost
37 check if we are running version maj.min or older
38 code::
39 Main.versionAtMost( 3, 1 );
41 returns:: true or false
43 instanceMethods::
45 private::prArgv, prOpenUDPPort
47 method::startup
49 Called after the class library has been compiled.
51 discussion::
52 This calls the superclass' startup, which among other things initializes the link::Classes/AppClock:: and the top-level link::Classes/Environment::.
54 Main's startup then stores Server.default in the interpreter variable s, sets the platform default's link::Classes/GUI:: kit, initializes the link::Classes/GeneralHID:: system, calls a link::Classes/Platform:: specific startup method (for example OSXPlatform's startup opens the server windows), and finally invokes StartUp.run.
56 To add your own startup functionalities, you could either edit the special startup-file (discussed in link::Reference/StartupFile::), or use StartUp.add as discussed in the link::Classes/StartUp:: help file.
58 method::shutdown
60 Called after SuperCollider is quit or the class library is about to be re-compiled.
62 discussion::
63 This will quit all audio link::Classes/Server:: instances, perform a platform specific shutdown (e.g. on Mac OS X, the HID service is released), finally Process' shutdown method is called, resulting successive calls to UI.shutdown, NetAddr.disconnectAll, File.closeAll, and Archive.write. To register your own shutdown code, use a call like this:
65 code::
66 Shutdown({ "Good bye!!".postln });
69 method::run
71 Override this to do whatever you want, e. g. add a class extension file like this to the class library:
73 code::
74 + Main {
75         run { "myPatch.rtf".load }
79 method::recvOSCfunc
81 Get or set a custom link::Classes/Function:: in this field that gets called whenever SuperCollider language (the client) receives an OSC message.
83 warning::This method has been deprecated as of SC 3.5, and users should instead should use link::#-addOSCFunc:: and link::#-removeOSCFunc:: to avoid overwriting any other functions added here by system objects.::
85 argument::func
86 A link::Classes/Function:: or similar object to be set. When evaluated, this function will be passed the arguments time, replyAddr, and message, corresponding to the time the message was sent, the link::Classes/NetAddr:: of the sender, and the message itself as an link::Classes/Array::.
88 method::addOSCRecvFunc
90 Register a link::Classes/Function:: to be evaluated whenever SuperCollider language (the client) receives an OSC message. This will not overwrite any previously registered functions.
92 argument::func
93 A link::Classes/Function:: or similar object to be added. When evaluated, this function will be passed the arguments msg, time, replyAddr, and recvPort, corresponding to the message itself as an link::Classes/Array::, the time the message was sent, the link::Classes/NetAddr:: of the sender, and the port on which the message was received. Note that this order differs from that used by the deprecated method link::#-recvOSCfunc::.
95 code::
96 // post all incoming traffic except the server status messages
97 // basically the same as OSCFunc.trace
99 f = { |msg, time, replyAddr, recvPort|
100         if(msg[0] != '/status.reply') {
101                 "At time %s received message % from % on port%\n".postf( time, msg, replyAddr, recvPort )
102         }
104 thisProcess.addOSCRecvFunc(f);
107 // stop posting.
108 thisProcess.removeOSCRecvFunc(f);
111 method::removeOSCRecvFunc
113 Remove a link::Classes/Function:: from the list of those evaluated whenever SuperCollider language (the client) receives an OSC message. This will leave any other registered functions in place.
115 argument::func
116 A link::Classes/Function:: or similar object to be removed.
118 method::replaceOSCRecvFunc
120 Replace a link::Classes/Function:: in the list of those evaluated whenever SuperCollider language (the client) receives an OSC message with a different one. This will leave any other registered functions in place.
122 argument::func
123 The link::Classes/Function:: or similar object to be replaced.
125 argument::newFunc
126 A link::Classes/Function:: or similar object to be replace the one being removed. When evaluated, this function will be passed the arguments time, replyAddr, recvPort, and message, corresponding to the time the message was sent, the link::Classes/NetAddr:: of the sender, the port on which the message was received, and the message itself as an link::Classes/Array::.
128 method::openUDPPort
129 Attempt to open a new UDP port for receiving OSC traffic. If another application has already bound to the requested port this will fail. Once opened, ports remain bound until SC is recompiled.
131 argument::portNum
132 An link::Classes/Integer:: indicating the port to attempt to bind.
134 returns::A link::Classes/Boolean:: indicating whether the attempt was successful.
136 code::
137 thisProcess.openUDPPort(3000); // will return true or false.
138 thisProcess.customPorts; // returns all working custom ports
141 method::customPorts
142 Get a collection of all active custom UDP ports.
144 returns::An link::Classes/Array::.
146 method::pid
148 Returns:: The operating system's pid (process ID) for the process.
150 method::preferencesAction
152 A function to evaluate when the SuperCollider preferences menu is selected.
154 code::
155 thisProcess.preferencesAction = { arg process; SCWindow.new.front; }
158 method::recompile
160 Recompiles the class library. This is equivalent to restarting SC. Currently OSX (SuperCollider.app) only.
162 method::platform
163 Get the current link::Classes/Platform::
165 method::argv
166 Get the command-line arguments passed to sclang.