« Return to Thread: NotificationCenter, Server, Buffer,

Re: NotificationCenter, Server, Buffer,

by Dan Stowell :: Rate this Message:

Reply to Author | View in Thread

I haven't got time to look into NotificationCenter but in general this
sounds OK...

Dan

2008/4/15, James Harkins <jamshark70@...>:

>
> No objection here. NotificationCenter is really nice, I use it quite a bit.
>
> I do use the serverAdded notification but wouldn't mind changing it.
>
> hjh
>
> On Apr 15, 2008, at 1:49 PM, felix wrote:
>
>
> I'd like to propose moving NotificationCenter into common and using that for
> Server to announce that it has created new allocators or if it has died.
> This means that Buffer can register for these notifications (which are rare)
> rather than respond to every server.changed (which happens ever 0.4 secs).
>
> This also means that Buffer.clearServerCaches can be cleanly removed from
> Server
>
> It also means that other classes can cleanly subscribe (I wrote a
> BusReleasePool that needs to know)
>
> Server.changed(\serverAdded) could also be changed to a notification.  not
> sure who is using this
>
> it works, its more light weight.  cool ?
>
> the diff:
>
>
> Index:
> /Users/crucial/sc/SCClassLibrary/Common/Control/Server.sc
> ===================================================================
> ---
> /Users/crucial/sc/SCClassLibrary/Common/Control/Server.sc
> (revision 7495)
> +++
> /Users/crucial/sc/SCClassLibrary/Common/Control/Server.sc
> (working copy)
> @@ -37,7 +37,7 @@
>
>   *initClass {
>   default =
> this.new.blockAllocClass_(ContiguousBlockAllocator);
> -// default =
> this.new.blockAllocClass_(PowerOfTwoAllocator);
> + //default =
> this.new.blockAllocClass_(PowerOfTwoAllocator);
>   }
>
>   *new {
> @@ -134,7 +134,7 @@
>  Server : Model {
>   classvar <>local, <>internal, <>default, <>named, <>set, <>program;
>
> - var <name, <addr, <clientID=0;
> + var <name, <>addr, <clientID=0;
>   var <isLocal, <inProcess;
>   var <serverRunning = false, <serverBooting=false, bootNotifyFirst=false;
>   var <>options,<>latency = 0.2,<dumpMode=0, <notified=true;
> @@ -188,6 +188,7 @@
>   audioBusAllocator =
> options.blockAllocClass.new(options.numAudioBusChannels,
>   options.firstPrivateBus);
>   bufferAllocator =
> options.blockAllocClass.new(options.numBuffers);
> + NotificationCenter.notify(this,\newAllocators);
>   }
>   nextNodeID {
>   ^nodeAllocator.alloc
> @@ -201,6 +202,7 @@
>
>   *initClass {
>   Class.initClassTree(ServerOptions);
> + Class.initClassTree(NotificationCenter);
>   named = IdentityDictionary.new;
>   set = Set.new;
>   internal = Server.new(\internal, NetAddr.new);
> @@ -299,7 +301,17 @@
>   } {
>   if (val != serverRunning) {
>   serverRunning = val;
> - if (serverRunning.not) { recordNode = nil };
> + if (serverRunning.not) {
> + AppClock.sched(5.0, {
> + // still down after 5 seconds, assume server is really dead
> + // if you explicitly shut down the server then newAllocators
> + // and the \newAllocators notification will happen immediately
> + if(serverRunning.not) {
> + NotificationCenter.notify(this,\didQuit);
> + };
> + recordNode = nil;
> + })
> + };
>   { this.changed(\serverRunning); }.defer;
>   }
>   };
> @@ -409,7 +421,7 @@
>
>   resetBufferAutoInfo {
>   this.deprecated(thisMethod,
> Meta_Buffer.findRespondingMethodFor(\clearServerCaches));
> - Buffer.clearServerCaches(this);
> + //Buffer.clearServerCaches(this);
>   }
>
>   cachedBuffersDo { |func| Buffer.cachedBuffersDo(this, func) }
> @@ -460,7 +472,7 @@
>   serverBooting = true;
>   if(startAliveThread, { this.startAliveThread });
>   this.newAllocators;
> - Buffer.clearServerCaches(this);
> + //Buffer.clearServerCaches(this);
>   bootNotifyFirst = true;
>   this.doWhenBooted({
>   if(notified, {
> @@ -546,7 +558,7 @@
>   volume.free
>   });
>   this.newAllocators;
> - Buffer.clearServerCaches(this);
> + //Buffer.clearServerCaches(this);
>   }
>
>   *quitAll {
>
>
>
> Index:
> /Users/crucial/sc/SCClassLibrary/Common/Control/Buffer.sc
> ===================================================================
> ---
> /Users/crucial/sc/SCClassLibrary/Common/Control/Buffer.sc
> (revision 7495)
> +++
> /Users/crucial/sc/SCClassLibrary/Common/Control/Buffer.sc
> (working copy)
> @@ -525,9 +525,13 @@
>   }
>   uncache {
>   serverCaches[server].removeAt(bufnum);
> - // the 2 items would be the responder and server quit updater
> - // thus if the size == 2, there are no cached buffers
> - if(serverCaches[server].size == 2) {
> + // the 1 item would be the responder
> + // if there is more than 1 item then the rest are cached buffers
> + // else we can remove.
> + // cx: tho i don't see why its important. it will just have to be added
> + // back when the next buffer is added and the responder is removed when
> + // the server reboots
> + if(serverCaches[server].size == 1) {
>   Buffer.clearServerCaches(server);
>    }
>   }
> @@ -543,7 +547,13 @@
>   buffer.queryDone;
>   };
>   }).add;
> - serverCaches[server][\serverQuitUpdater] =
> Updater(server, { |svr, what|
> + NotificationCenter.register(server,\newAllocators,this,{
> + this.clearServerCaches(server);
> + });
> + // listening for server death may not be so important
> + // the most important thing was newAllocators
> + // which happens when you quit or boot the server
> + /*serverCaches[server][\serverQuitUpdater] =
> Updater(server, { |svr, what|
>   if(what == \serverRunning and: { svr.serverRunning.not }) {
>   AppClock.sched(5.0, {
>   // still down after 5 seconds, assume server is really dead
> @@ -552,13 +562,13 @@
>   };
>   })
>   };
> - });
> + });*/
>   }
>   }
>   *clearServerCaches { |server|
>   if(serverCaches[server].notNil) {
>   serverCaches[server][\responder].remove;
> - serverCaches[server][\serverQuitUpdater].remove;
> + //serverCaches[server][\serverQuitUpdater].remove;
>   serverCaches.removeAt(server);
>   }
>   }
>
>
>
>
>
> : H. James Harkins
>
> : jamshark70@...
>
> : http://www.dewdrop-world.net
>
> .::!:.:.......:.::........:..!.::.::...:..:...:.:.:.:..:
>
>
>
>
> "Come said the Muse,
>
> Sing me a song no poet has yet chanted,
>
> Sing me the universal."  -- Whitman
>
> _______________________________________________
>  Sc-devel mailing list
>  Sc-devel@...
>  http://lists.create.ucsb.edu/mailman/listinfo/sc-devel
>
>


--
http://www.mcld.co.uk
_______________________________________________
Sc-devel mailing list
Sc-devel@...
http://lists.create.ucsb.edu/mailman/listinfo/sc-devel

 « Return to Thread: NotificationCenter, Server, Buffer,

LightInTheBox - Buy quality products at wholesale price