class library: quit internal server on class library compilation
[supercollider.git] / HelpSource / Tutorials / JITLib / jitlib_networking.schelp
blob9f4c86a23c8bb08fc7e445e7c2467fa445fad3c1
1 title:: jitlib_networking
2 summary:: networked programming
3 categories:: Libraries>JITLib>Tutorials
4 related:: Overviews/JITLib
6 emphasis::please note any problems, I'll try to add solutions here.::
8 section::1) using ProxySpace with more than one client, with separate bus spaces
10 note::
11 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.
14 subsection::before you start
16 remember to synchronize your system clocks. This can be done by:
17 definitionList::
18 ## in OS X || SystemPreferences>Date&Time: set emphasis::"Set Date & Time automatically":: to true.
19 ## in linux || set the ntp clock
21 a local time server is better than the apple time server. if you cannot sync the time, you can set the server latency to code::nil::. This will break the pattern's functionality though.
23 subsection::a) boot the (remote) server and create a local model
25 (you cannot directly boot a remote server instance)
27 code::
28 s = Server("serverName", NetAddr(hostname, port), clientID);
30 definitionList::
31 ## serverName || can be any name
32 ## hostname || is an ip address, or if you have a name resolution, a network name
33 ## port || the port on which the server is listening. default is 57110
34 ## clientID || for each client (each sc-lang) emphasis::a different integer number has to be given::
36 see link::Classes/Server::
38 subsection::b) from each client, initialize the default node and set notify to true:
40 code::
41 s.boot; // this will initialize the tree and start notification
43 // if needed, a server window can be created:
44 s.makeWindow;
47 subsection::c) preallocate a range of busses in each client.
49 If there is conflicts, increase the number of busses in the server options before booting:
51 code::
52 s.options.numAudioBusChannels = 1024;   //optional
55 code::
57 var numberOfParticipants, n;
58 numberOfParticipants = 4;
61 n = s.options.numAudioBusChannels / numberOfParticipants;
62 n = n.floor.asInteger * s.clientID;
63 s.audioBusAllocator.alloc(n);
66 n = s.options.numControlBusChannels / numberOfParticipants;
67 n = n.floor.asInteger * s.clientID;
68 s.controlBusAllocator.alloc(n);
72 subsection::d) now create a ProxySpace from the server:
74 code::
75 p = ProxySpace.push(s);
78 section::2) using ProxySpace with more than one client, with a partly shared bus space
80 step a, b like in link::#1)_using_proxyspace_with_more_than_one_client,_with_separate_bus_spaces#(1)::, skip (d)
82 subsection::c) before allocating a number of busses for each client, create shared busses:
84 code::
85 p = ProxySpace.push(s);
86 ~shared1.ar(2);
87 ~shared2.ar(2);
88 ~sharedkr.kr(1); // or other names.
91 then do (c) like in link::#1)_using_proxyspace_with_more_than_one_client,_with_separate_bus_spaces#(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.
93 section::3) writing a chat
95 see example in link::Classes/Client:: in the strong::JITLibExtensions:: quark.
97 see also link::Classes/Public:: in the strong::JITLibExtensions:: quark.