SF.net SVN: supercollider: [7521] trunk/build/Help/Libraries/crucial/ UncoupledUsefulThings/NotificationCenter.html

View: New views
1 Messages — Rating Filter:   Alert me  

SF.net SVN: supercollider: [7521] trunk/build/Help/Libraries/crucial/ UncoupledUsefulThings/NotificationCenter.html

by cruxxial :: Rate this Message:

Reply (Restricted by the Administrator) | Reply to Author | View Threaded | Show Only this Message

Revision: 7521
          http://svn.sourceforge.net/supercollider/?rev=7521&view=rev
Author:   cruxxial
Date:     2008-04-19 16:25:26 -0700 (Sat, 19 Apr 2008)

Log Message:
-----------
updated help

Modified Paths:
--------------
    trunk/build/Help/Libraries/crucial/UncoupledUsefulThings/NotificationCenter.html

Modified: trunk/build/Help/Libraries/crucial/UncoupledUsefulThings/NotificationCenter.html
===================================================================
--- trunk/build/Help/Libraries/crucial/UncoupledUsefulThings/NotificationCenter.html 2008-04-19 23:00:43 UTC (rev 7520)
+++ trunk/build/Help/Libraries/crucial/UncoupledUsefulThings/NotificationCenter.html 2008-04-19 23:25:26 UTC (rev 7521)
@@ -5,116 +5,58 @@
 <meta http-equiv="Content-Style-Type" content="text/css">
 <title></title>
 <meta name="Generator" content="Cocoa HTML Writer">
-<meta name="CocoaVersion" content="824.42">
+<meta name="CocoaVersion" content="824.47">
 <style type="text/css">
 p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
 p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
 p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
-p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
-p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #0019b7}
+p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #001fb3}
+p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
 p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
-p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #a71e12}
-p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #0019b7}
-p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #a71e12}
-p.p10 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #316c17}
-p.p11 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #606060}
-span.s1 {color: #0019b7}
-span.s2 {color: #316c17}
-span.s3 {color: #000000}
-span.s4 {color: #606060}
+p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #000000; min-height: 14.0px}
+p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; color: #000000}
+span.s1 {color: #000000}
+span.s2 {color: #42691d}
 span.Apple-tab-span {white-space:pre}
 </style>
 </head>
 <body>
 <p class="p1"><b>NotificationCenter</b></p>
 <p class="p2"><br></p>
+<p class="p3">One common OOP pattern is Model-View-Controller where one object (the controller) is a dependant of the model.<span class="Apple-converted-space">  </span>Every time the model changes it notifies all of its dependants.<span class="Apple-converted-space">  </span>In this case the model has a dictionary of dependants and iterates through those.</p>
 <p class="p2"><br></p>
-<p class="p3">Objects can send notifications to the NotificationCenter, and all functions that were registered for</p>
-<p class="p3">that notification will be excecuted.</p>
+<p class="p3">Another common pattern is NotificationCenter wherein an object emits a notification and clients can register functions that will be executed when that notification happens.</p>
 <p class="p2"><br></p>
-<p class="p3">implements the <span class="s1">Notification</span> pattern.</p>
-<p class="p3">This is similar to MVC, except here the model object does not ever</p>
-<p class="p3">know anything about who is dependant on it.</p>
-<p class="p3">This allows any interested client object to be notified of special events such as the object being</p>
-<p class="p3">saved to disk, the object recording a sound file version of itself etc.</p>
+<p class="p3">A Server emits a \newAllocators notification when it creates new node and bus allocators which it does when it quits or boots.</p>
 <p class="p2"><br></p>
-<p class="p3">For instance when a Sample is saved it emits a \didSave notification:</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="s1">NotificationCenter</span>(notify,<span class="s1">Sample</span>,<span class="s2">\didSave</span>,soundFilePath);</p>
+<p class="p4"><span class="s1"><span class="Apple-tab-span"> </span></span>NotificationCenter<span class="s1">.notify(</span>Server.default<span class="s1">,</span><span class="s2">\newAllocators</span><span class="s1">);</span></p>
 <p class="p2"><br></p>
 <p class="p3">You can listen for this:</p>
-<p class="p5"><span class="s3"><span class="Apple-tab-span"> </span></span>NotificationCenter<span class="s3">.register(</span>Sample<span class="s3">,</span><span class="s2">\didSave</span><span class="s3">,</span><span class="s2">\sampleWatcher</span><span class="s3">, { </span>arg<span class="s3"> path;</span></p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>path.postln;<span class="Apple-converted-space"> </span></p>
-<p class="p4"><span class="Apple-tab-span"> </span>});</p>
-<p class="p6"><br></p>
 <p class="p2"><br></p>
-<p class="p7">//in the following examples <b>this </b>is the interpreter</p>
-<p class="p3"><span class="s1">this</span>.postln<span class="Apple-converted-space"> </span></p>
-<p class="p8"><span class="s3">an </span>Interpreter</p>
+<p class="p4"><span class="s1"><span class="Apple-tab-span"> </span></span>NotificationCenter<span class="s1">.register(</span>Server.default<span class="s1">,</span><span class="s2">\newAllocators</span><span class="s1">,</span><span class="s2">yourself</span><span class="s1">, {</span></p>
+<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>// throw away all your node variables</p>
+<p class="p5"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>// or stop the music</p>
+<p class="p5"><span class="Apple-tab-span"> </span>});</p>
 <p class="p6"><br></p>
-<p class="p6"><span class="Apple-tab-span"> </span></p>
-<p class="p4">(</p>
-<p class="p9">// nothing is yet registered</p>
-<p class="p9">// so notify finds nothing to do</p>
-<p class="p5">NotificationCenter<span class="s3">.notify(</span>this<span class="s3">,</span><span class="s2">\didRecord</span><span class="s3">);</span></p>
+<p class="p3">The Buffer class register a function to clear its info cache whenever a server restarts.<span class="Apple-converted-space">  </span>The server is emiting changed messages quite often (every 0.4 secs for the status updates), and the Buffer class is only interested in boot/quit events, so this is a more lightweight system for this purpose.</p>
 <p class="p6"><br></p>
-<p class="p9">// register a function</p>
-<p class="p10"><span class="s1">NotificationCenter</span><span class="s3">.register(</span><span class="s1">this</span><span class="s3">,</span>\didRecord<span class="s3">,</span>\theRequestingObject<span class="s3">, { </span><span class="s4">"hello"</span><span class="s3">.postln; });</span></p>
+<p class="p7"><br></p>
+<p class="p8"><b>*notify(object,message,args)</b></p>
+<p class="p8"><span class="Apple-tab-span"> </span>The object emits a message and may also pass extra args</p>
+<p class="p7"><span class="Apple-tab-span"> </span></p>
+<p class="p8"><b>*register(object,message,listener,action)</b></p>
+<p class="p8"><span class="Apple-tab-span"> </span>An interested client can register the action function for the object/message notification.</p>
+<p class="p8"><span class="Apple-tab-span"> </span>A listener may only register one action per object/message notification.</p>
+<p class="p7"><span class="Apple-tab-span"> </span></p>
+<p class="p8"><b>*unregister(object,message,listener)</b></p>
+<p class="p8"><span class="Apple-tab-span"> </span>Remove the registrations</p>
+<p class="p7"><br></p>
+<p class="p8"><b>*registerOneShot(object,message,listener,action)</b></p>
+<p class="p8"><span class="Apple-tab-span"> </span>After the notification has been emited and handled, automatically unregister.</p>
+<p class="p7"><span class="Apple-tab-span"> </span></p>
+<p class="p8"><b>*registrationExists(object,message,listener)</b></p>
+<p class="p8"><span class="Apple-tab-span"> </span>Simply confirms if a registration is already in place</p>
 <p class="p6"><br></p>
-<p class="p9">// now it has something to do</p>
-<p class="p5">NotificationCenter<span class="s3">.notify(</span>this<span class="s3">,</span><span class="s2">\didRecord</span><span class="s3">);</span></p>
-<p class="p4">hello</p>
-<p class="p6"><br></p>
-<p class="p9">// unregister, thus releasing yourself for GC</p>
-<p class="p10"><span class="s1">NotificationCenter</span><span class="s3">.unregister(</span><span class="s1">this</span><span class="s3">,</span>\didRecord<span class="s3">,</span>\theRequestingObject<span class="s3">)</span></p>
-<p class="p6"><br></p>
-<p class="p9">// theRequestingObject is no longer interested in this notification</p>
-<p class="p5">NotificationCenter<span class="s3">.notify(</span>this<span class="s3">,</span><span class="s2">\didRecord</span><span class="s3">);</span></p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p4">)</p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p3">The listener argument is somewhat unimportant as far as you the client is concerned. <span class="Apple-converted-space"> </span></p>
-<p class="p3">It is used to identify the notification and to find it later to remove it when needed.</p>
-<p class="p2"><br></p>
-<p class="p3">There can only be one notification per listener, but you may use anything for the listener object, such</p>
-<p class="p3">as an arbitrary symbol.</p>
-<p class="p6"><br></p>
-<p class="p9"><span class="s3">(</span>// two symbols</p>
-<p class="p11"><span class="s1">NotificationCenter</span><span class="s3">.register(</span><span class="s1">this</span><span class="s3">,</span><span class="s2">\didRecord</span><span class="s3">,</span><span class="s2">\thingOne</span><span class="s3">, { </span>"this will get overwritten by the next registration"<span class="s3">.postln; });</span></p>
-<p class="p4"><span class="s1">NotificationCenter</span>.register(<span class="s1">this</span>,<span class="s2">\didRecord</span>,<span class="s2">\thingOne</span>, { <span class="s4">"do this"</span>.postln; });</p>
-<p class="p4"><span class="s1">NotificationCenter</span>.register(<span class="s1">this</span>,<span class="s2">\didRecord</span>,<span class="s2">\thingTwo</span>, { <span class="s4">"do this also"</span>.postln; });</p>
-<p class="p6"><br></p>
-<p class="p5">NotificationCenter<span class="s3">.notify(</span>this<span class="s3">,</span><span class="s2">\didRecord</span><span class="s3">);</span></p>
-<p class="p6"><br></p>
-<p class="p4">do this</p>
-<p class="p4">do this also</p>
-<p class="p4">)</p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p4">(</p>
-<p class="p4"><span class="s1">NotificationCenter</span>.register(<span class="s1">this</span>,<span class="s2">\didRecord</span>,<span class="s2">this</span>, { arg path,comments; <span class="s4">path</span>.postln; comments.postln; });</p>
-<p class="p6"><br></p>
-<p class="p4">// after the addressing, an array of arguments can be supplied to be passed into the function</p>
-<p class="p10"><span class="s1">NotificationCenter</span><span class="s3">.notify(</span><span class="s1">this</span><span class="s3">,</span>\didRecord,[":SoundFiles:blurb.aiff",'yo mama']<span class="s3">);</span></p>
-<p class="p4">:SoundFiles:blurb.aiff</p>
-<p class="p4">yo mama</p>
-<p class="p6"><br></p>
-<p class="p4">)</p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p4">You can also remove the Notification registration by getting the layout to remove you</p>
-<p class="p4">when the window closes:</p>
-<p class="p6"><br></p>
-<p class="p4">guiBody { <span class="s1">arg</span> layout;</p>
-<p class="p4"><span class="Apple-tab-span"> </span>layout.removeOnClose(</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="s1">NotificationCenter</span>.register(model,<span class="s2">\didRecord</span>,<span class="s1">this</span>, {</p>
-<p class="p9"><span class="s3"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span></span>// do things</p>
-<p class="p4"><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>});</p>
-<p class="p4"><span class="Apple-tab-span"> </span>);</p>
-<p class="p4">}</p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
-<p class="p6"><br></p>
+<p class="p6"><span class="Apple-tab-span"> </span></p>
 </body>
 </html>


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
_______________________________________________
sc-dev mailing list
sc-dev@...
http://lists.create.ucsb.edu/mailman/listinfo/sc-dev
LightInTheBox - Buy quality products at wholesale price