« Return to Thread: NotificationCenter, Server, Buffer,

Re: NotificationCenter, Server, Buffer,

by LFSaw :: Rate this Message:

Reply to Author | View in Thread

looks nice (from relatively far away, though; no time to look in more  
detail on it, yet)

till

On 16.04.2008, at 10:51, Dan Stowell wrote:

> 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

_______________________________________________
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