> 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