networked programming
please note any problems, I'll try to add solutions here.
1) using ProxySpace with more than one client, with separate bus spaces
Note: if only one client is using a remote server, only step (a) and step (d) are relevant.
The clientID argument can be left out then.
before you start:
remember to synchronize your system clocks. This can be done by:
in OS X: SystemPreferences>Date&Time: set "Set Date & Time automatically" to true.
in linux: set the ntp clock
a local time server is better than the apple time server.
if you cannot sync the time, you can set the server latency to nil.
This will break the pattern's functionality though.
a) boot the (remote) server and create a local model
(you cannot directly boot a remote server instance)
s = Server("serverName", NetAddr(hostname, port), clientID);
serverName can be any name
hostname is an ip address, or if you have a name resolution, a network name
port the port on which the server is listening. default is 57110
clientID for each client (each sc-lang) a different integer number has to be given
see Server
b) from each client, initialize the default node and set notify to true:
s.boot; // this will initialize the tree and start notification
// if needed, a server window can be created:
s.makeWindow;
c) preallocate a range of busses in each client.
If there is conflicts, increase the number of busses in the server options before booting: (s.options.numAudioBusChannels = 1024;)
(
var numberOfParticipants, n;
numberOfParticipants = 4;
n = s.options.numAudioBusChannels / numberOfParticipants;
n = n.floor.asInteger * s.clientID;
s.audioBusAllocator.alloc(n);
n = s.options.numControlBusChannels / numberOfParticipants;
n = n.floor.asInteger * s.clientID;
s.controlBusAllocator.alloc(n);
)
d) now create a ProxySpace from the server:
p = ProxySpace.push(s);
2) using ProxySpace with more than one client, with a partly shared bus space
step a, b like in (1), skip (d)
c) before allocating a number of busses for each client, create shared busses:
p = ProxySpace.push(s);
~shared1.ar(2);
~shared2.ar(2);
~sharedkr.kr(1); // or other names.
then do (c) like in (1), just take care that the shared busses are taking number space
already, so the easiest is to increase the numberOfParticipants by one, so no overrun
happens.
3) writing a chat
see example in Client
see also Public