diff --git a/INSTALL.md b/INSTALL.md index a1f8a066438d9a286dcd00c927d7af66daefd7d5..f937d922f309cce5a875af8856fd19e5ced71e9d 100644 --- a/INSTALL.md +++ b/INSTALL.md @@ -177,9 +177,9 @@ Other Linux Flavors =================== Installation on other Linux flavors might be similar. On other deb-based system, the -exact same instructions might apply (Ubuntu, Raspbian, Linux Mint, etc.). On rpm-based, -setting up the systemd services might work the same, but installing software packages -is one with a different command. +exact same instructions might apply (Ubuntu, Raspbian, Linux Mint, etc.). On rpm-based +systems, setting up the systemd services might work the same, but installing software +packages is done with a different command. macOS / Windows @@ -194,6 +194,7 @@ install: * osc * slip + Firewall ======== diff --git a/protocol_specification.txt b/protocol_specification.txt index 477fce862bfb140f61475ff5ebc62b6d3ffa161f..8e34e8953e79d828f1708ef09e764abf3407720f 100644 --- a/protocol_specification.txt +++ b/protocol_specification.txt @@ -58,7 +58,7 @@ protocol version mismatch. Once the procol version is agreed upon, the client registers its given name, which can be any string configured by the user: -C: /s/tpf/register/name ZHdK +C: /s/tpf/register/client <room> <nick> S: /s/tpf/register/done If the server responds with: diff --git a/tpf-server.pd b/tpf-server.pd index d0b6dc1be531121d754c0ebbe9addd676c5c0795..1b5bd3cd5f8dfef530a08fec6adce4c0fcd7baf8 100644 --- a/tpf-server.pd +++ b/tpf-server.pd @@ -1,18 +1,18 @@ -#N canvas 719 165 350 402 10; +#N canvas 48 112 392 417 10; #X declare -path netpd-server/includes; #X declare -path osc; -#N canvas 719 374 558 410 tpf.communication 0; +#N canvas 519 214 830 401 tpf.communication 0; #X obj 7 8 r SERVER; #X obj 7 74 s \$0.from; -#X obj 122 11 r SERVER; -#X obj 122 32 route socket; -#X obj 122 54 s \$0.client; +#X obj 488 14 r SERVER; +#X obj 488 35 route socket; +#X obj 488 84 s \$0.client; #X obj 8 113 r \$0.to; #X obj 8 287 list trim; #X obj 8 308 s SERVER; #X obj 8 264 list prepend; #X msg 88 202 list to send \$1; -#N canvas 318 263 213 161 tcp.prepare 0; +#N canvas 308 288 213 161 tcp.prepare 0; #X obj 20 28 t b a; #X obj 20 98 list append; #X obj 52 55 s to.tcp.prepare; @@ -33,10 +33,10 @@ #X obj 7 28 route server; #X obj 8 221 packOSC; #X obj 8 200 list trim; -#X obj 201 104 r \$0.broadcast; -#X obj 201 276 list trim; -#X obj 201 297 s SERVER; -#N canvas 318 263 213 161 tcp.prepare 0; +#X obj 396 137 r \$0.broadcast; +#X obj 396 309 list trim; +#X obj 396 330 s SERVER; +#N canvas 278 363 213 161 tcp.prepare 0; #X obj 20 28 t b a; #X obj 20 98 list append; #X obj 52 55 s to.tcp.prepare; @@ -48,16 +48,62 @@ #X connect 1 0 5 0; #X connect 3 0 1 1; #X connect 4 0 0 0; -#X restore 201 230 pd tcp.prepare; -#X obj 201 126 list split 1; -#X obj 201 169 list append; -#X msg 201 149 symbol /s/tpf\$1; -#X obj 201 210 packOSC; -#X obj 201 189 list trim; -#X obj 201 253 list prepend to broadcast; -#X connect 0 0 16 0; +#X restore 396 263 pd tcp.prepare; +#X obj 396 159 list split 1; +#X obj 396 202 list append; +#X msg 396 182 symbol /s/tpf\$1; +#X obj 396 243 packOSC; +#X obj 396 222 list trim; +#X obj 396 286 list prepend to broadcast; +#X obj 566 93 text search \$0.clients 1; +#X obj 623 165 text get \$0.clients; +#X msg 623 143 \$1 0 1; +#X obj 623 187 s \$0.room; +#X obj 566 116 sel -1, f 10; +#X obj 213 123 r \$0.to.room.members; +#N canvas 0 106 406 346 find.room.members 0; +#X obj 9 11 inlet; +#X obj 9 65 text size \$0.clients; +#X obj 9 111 until; +#X obj 9 134 f; +#X obj 9 157 t a a; +#X obj 51 150 + 1; +#X msg 48 112 0; +#X obj 9 251 route dummy; +#X obj 9 204 text get \$0.clients 0 2; +#X obj 9 34 b; +#X obj 9 274 outlet; +#X obj 9 227 list trim; +#X obj 94 252 r \$0.room; +#X obj 9 88 t a b, f 7; +#X connect 0 0 9 0; +#X connect 1 0 13 0; #X connect 2 0 3 0; #X connect 3 0 4 0; +#X connect 4 0 8 0; +#X connect 4 1 5 0; +#X connect 5 0 3 1; +#X connect 6 0 3 1; +#X connect 7 0 10 0; +#X connect 8 0 11 0; +#X connect 9 0 1 0; +#X connect 11 0 7 0; +#X connect 12 0 7 1; +#X connect 13 0 2 0; +#X connect 13 1 6 0; +#X restore 213 209 pd find.room.members; +#X obj 213 146 t b a; +#X obj 213 232 list append; +#X obj 213 255 t a a, f 7; +#X msg 252 277 \$1; +#X obj 252 301 s \$0.to.client; +#X obj 116 159 r \$0.to.client; +#X obj 213 325 list split 1; +#X obj 247 350 s \$0.to; +#X obj 488 58 t a a; +#X connect 0 0 16 0; +#X connect 2 0 3 0; +#X connect 3 0 44 0; #X connect 5 0 12 0; #X connect 6 0 7 0; #X connect 8 0 6 0; @@ -82,114 +128,184 @@ #X connect 26 0 22 0; #X connect 27 0 26 0; #X connect 28 0 20 0; -#X restore 13 132 pd tpf.communication; -#N canvas 902 132 375 575 register/name 0; -#X obj 130 391 s \$0.to; +#X connect 29 0 33 0; +#X connect 30 0 32 0; +#X connect 31 0 30 0; +#X connect 33 1 31 0; +#X connect 34 0 36 0; +#X connect 35 0 37 0; +#X connect 36 0 35 0; +#X connect 36 1 37 1; +#X connect 37 0 38 0; +#X connect 38 0 42 0; +#X connect 38 1 39 0; +#X connect 39 0 40 0; +#X connect 41 0 9 0; +#X connect 42 1 43 0; +#X connect 44 0 4 0; +#X connect 44 1 29 0; +#X restore 13 112 pd tpf.communication; +#N canvas 662 138 664 550 register/name 0; +#X obj 147 425 s \$0.to; #X obj 7 11 r \$0.from; -#X obj 7 31 routeOSC /register/name; -#X msg 49 370 /register/done; -#X obj 7 52 list prepend; -#X obj 87 52 r \$0.client; -#N canvas 0 50 333 404 prevent_duplicates 0; -#X obj 80 81 text search \$0.clients 1; -#X obj 80 101 == -1; -#X obj 23 62 unpack f s; -#X obj 23 174 == -1; -#X obj 23 154 text search \$0.clients 0; -#X obj 23 214 &&; -#X obj 23 234 sel 1; -#X text 66 233 bang if neither id nor name is found; -#X obj 23 194 t a a; -#X obj 91 255 sel 0; -#X msg 91 275 id already in use; -#X obj 80 124 t a a; -#X msg 176 201 name already in use; -#X obj 176 183 sel 0; -#X obj 23 14 inlet; -#X obj 23 359 outlet; -#X obj 91 307 outlet; -#X connect 0 0 1 0; -#X connect 1 0 11 0; -#X connect 2 0 4 0; -#X connect 2 1 0 0; -#X connect 3 0 8 0; -#X connect 4 0 3 0; -#X connect 5 0 6 0; -#X connect 6 0 15 0; +#X msg 147 403 /register/done; +#X obj 7 112 list prepend; +#X obj 87 112 r \$0.client; +#X obj 270 334 loadbang; +#X obj 233 377 text set \$0.clients; +#X msg 270 354 1e+06; +#X msg 120 453 /updated/clients; +#X obj 120 383 t b b; +#X obj 296 239 r SERVER; +#X obj 296 259 route ip; +#X obj 233 305 list append; +#X msg 296 279 symbol \$1.\$2.\$3.\$4; +#X obj 7 31 routeOSC /register/client; +#X msg 7 135 list \$2 \$1 \$3; +#X text 313 308 <room> <id> <nick> <ip>; +#X text 102 137 <room> <id> <nick>; +#X text 158 112 <id>; +#N canvas 771 446 251 224 first.in.room 0; +#X obj 10 11 inlet; +#X obj 10 180 outlet; +#X obj 73 107 sel -1; +#X msg 73 132 1; +#X msg 106 133 0; +#X obj 73 84 text search \$0.clients 0; +#X obj 10 156 list append; +#X obj 10 34 t a a; +#X msg 73 57 symbol \$1; +#X connect 0 0 7 0; +#X connect 2 0 3 0; +#X connect 2 1 4 0; +#X connect 3 0 6 1; +#X connect 4 0 6 1; +#X connect 5 0 2 0; +#X connect 6 0 1 0; +#X connect 7 0 6 0; +#X connect 7 1 8 0; #X connect 8 0 5 0; -#X connect 8 1 9 0; +#X restore 233 214 pd first.in.room; +#X obj 120 478 s \$0.to.room.members; +#X obj 7 160 t a b a a, f 57; +#X msg 346 187 symbol \$1; +#X obj 346 210 s \$0.room; +#X text 410 207 tell room upon new client connection; +#N canvas 737 204 510 321 sanitize_room 0; +#X obj 37 7 inlet; +#X obj 37 244 outlet; +#X obj 37 30 t a a; +#X obj 154 93 list; +#X msg 154 117 symbol \$1; +#X obj 37 221 spigot 0; +#X obj 228 129 loadbang; +#X msg 228 152 symbol; +#X obj 154 148 sel bla; +#X obj 154 173 t b b; +#X msg 154 196 0; +#X msg 193 199 1; +#X obj 181 261 s \$0.to; +#X msg 181 239 /register/error empty\ room\ name\ is\ not\ allowed +; +#X connect 0 0 2 0; +#X connect 2 0 5 0; +#X connect 2 1 3 0; +#X connect 3 0 4 0; +#X connect 4 0 8 0; +#X connect 5 0 1 0; +#X connect 6 0 7 0; +#X connect 7 0 8 1; +#X connect 8 0 9 0; +#X connect 8 1 11 0; #X connect 9 0 10 0; -#X connect 10 0 16 0; +#X connect 9 1 13 0; +#X connect 10 0 5 1; #X connect 11 0 5 1; -#X connect 11 1 13 0; -#X connect 12 0 16 0; #X connect 13 0 12 0; -#X connect 14 0 2 0; -#X restore 7 123 pd prevent_duplicates; -#X obj 130 148 list prepend /register/error; -#X obj 130 168 list trim; -#X obj 7 96 t a a; -#X obj 7 143 list append; -#X obj 91 291 loadbang; -#X obj 54 332 text set \$0.clients; -#X msg 91 311 1e+06; -#X obj 7 513 s \$0.add.connection; -#X obj 7 492 f; -#X msg 22 473 \$1; -#X obj 7 163 t b b a a b; -#X obj 54 252 list append; -#X obj 70 188 text size \$0.clients; -#X obj 70 208 == 0; -#X msg 45 429 /updated/clients; -#X obj 45 449 s \$0.broadcast; -#X obj 22 350 t b b; -#X obj 139 217 r SERVER; -#X obj 139 237 route ip; -#X obj 54 272 list append; -#X msg 139 257 symbol \$1.\$2.\$3.\$4; -#X connect 1 0 2 0; -#X connect 2 0 4 0; -#X connect 3 0 0 0; -#X connect 4 0 9 0; -#X connect 5 0 4 1; -#X connect 6 0 10 0; -#X connect 6 1 7 0; -#X connect 7 0 8 0; -#X connect 8 0 0 0; -#X connect 9 0 6 0; -#X connect 9 1 10 1; -#X connect 10 0 17 0; +#X restore 7 54 pd sanitize_room; +#N canvas 682 218 562 388 sanitize_nick 0; +#X obj 37 7 inlet; +#X obj 37 260 outlet; +#X obj 154 43 list; +#X obj 228 62 loadbang; +#X msg 228 85 symbol; +#X obj 154 118 sel bla; +#X obj 154 153 t b b; +#X msg 154 206 0; +#X msg 373 83 1; +#X obj 37 30 t a a; +#X obj 37 233 spigot 0; +#X msg 154 67 symbol \$2; +#X obj 181 338 s \$0.to; +#X obj 373 31 text search \$0.clients 2; +#X obj 373 60 sel -1; +#X obj 406 141 t b b; +#X obj 373 6 t a a; +#X obj 433 164 symbol; +#X msg 181 236 symbol empty\ name\ is\ not\ allowed; +#X msg 181 316 /register/error \$1; +#X msg 304 260 symbol name\\\ '\$1'\\\ is\\\ already\\\ used; +#X connect 0 0 9 0; +#X connect 2 0 11 0; +#X connect 3 0 4 0; +#X connect 4 0 5 1; +#X connect 5 0 6 0; +#X connect 5 1 16 0; +#X connect 6 0 7 0; +#X connect 6 1 18 0; +#X connect 7 0 10 1; +#X connect 8 0 10 1; +#X connect 9 0 10 0; +#X connect 9 1 2 0; +#X connect 10 0 1 0; +#X connect 11 0 5 0; +#X connect 13 0 14 0; +#X connect 14 0 8 0; +#X connect 14 1 15 0; +#X connect 15 0 7 0; +#X connect 15 1 17 0; +#X connect 16 0 13 0; +#X connect 16 1 17 1; +#X connect 17 0 20 0; +#X connect 18 0 19 0; +#X connect 19 0 12 0; +#X connect 20 0 19 0; +#X restore 7 80 pd sanitize_nick; +#X text 166 30 <room> <nick>; +#X connect 1 0 14 0; +#X connect 2 0 0 0; +#X connect 3 0 15 0; +#X connect 4 0 3 1; +#X connect 5 0 7 0; +#X connect 7 0 6 1; +#X connect 8 0 20 0; +#X connect 9 0 8 0; +#X connect 9 1 2 0; +#X connect 10 0 11 0; #X connect 11 0 13 0; +#X connect 12 0 6 0; #X connect 13 0 12 1; -#X connect 15 0 14 0; -#X connect 16 0 15 1; -#X connect 17 0 15 0; -#X connect 17 1 23 0; -#X connect 17 2 16 0; -#X connect 17 3 18 0; -#X connect 17 4 19 0; -#X connect 18 0 26 0; -#X connect 19 0 20 0; -#X connect 20 0 18 1; -#X connect 21 0 22 0; -#X connect 23 0 21 0; -#X connect 23 1 3 0; -#X connect 24 0 25 0; -#X connect 25 0 27 0; -#X connect 26 0 12 0; -#X connect 27 0 26 1; -#X restore 13 172 pd register/name; -#N canvas 595 213 337 132 protol/version 0; +#X connect 14 0 25 0; +#X connect 15 0 21 0; +#X connect 19 0 12 0; +#X connect 21 1 9 0; +#X connect 21 2 19 0; +#X connect 21 3 22 0; +#X connect 22 0 23 0; +#X connect 25 0 26 0; +#X connect 26 0 3 0; +#X restore 13 154 pd register/name; +#N canvas 575 494 337 132 protol/version 0; #X obj 17 15 r \$0.from; #X obj 17 75 s \$0.to; #X obj 17 35 routeOSC /protocol/version; -#X msg 17 55 /protocol/version 1 0; +#X msg 17 55 /protocol/version 1 1; #X connect 0 0 2 0; #X connect 2 0 3 0; #X connect 3 0 1 0; -#X restore 13 152 pd protol/version; +#X restore 13 133 pd protol/version; #X obj 13 50 text define \$0.clients; -#N canvas 699 381 494 446 unregister/name 0; +#N canvas 506 230 494 528 unregister/name 0; #X text 11 9 We want disconnceting clients to automatically unregister by IP and port.; #X obj 14 50 r SERVER; @@ -198,197 +314,66 @@ by IP and port.; #X obj 15 135 sel -1; #X text 68 136 <- detects a disconnecting client; #X obj 15 163 list append; -#X obj 99 272 text delete \$0.clients; -#X obj 15 228 sel -1; +#X obj 183 300 text delete \$0.clients; +#X obj 15 248 sel -1; #X obj 14 71 route num_of_clients socket; -#X obj 15 202 text search \$0.clients 0; -#X obj 15 183 t a a; -#X obj 48 401 f; -#X obj 48 422 s \$0.del.connection; -#X obj 82 335 text set \$0.clients; -#X obj 119 293 loadbang; -#X msg 119 313 0; -#X msg 156 313 2; -#X msg 82 313 1; -#X msg 65 360 /updated/clients; -#X obj 65 380 s \$0.broadcast; -#X obj 48 253 t b b b a; +#X msg 93 387 /updated/clients; +#X obj 15 222 text search \$0.clients 1; +#N canvas 257 106 450 233 reassign.leader 0; +#X obj 10 11 inlet; +#X obj 10 88 text search \$0.clients 0; +#X obj 10 111 sel -1; +#X obj 43 182 text set \$0.clients 0 3; +#X obj 43 135 t b a; +#X msg 43 158 1; +#X connect 0 0 1 0; +#X connect 1 0 2 0; +#X connect 2 1 4 0; +#X connect 4 0 5 0; +#X connect 4 1 3 1; +#X connect 5 0 3 0; +#X restore 138 359 pd reassign.leader; +#X obj 138 332 symbol; +#X obj 93 412 s \$0.to.room.members; +#X obj 193 332 r \$0.room; +#X obj 48 273 t b b b a, f 23; #X connect 1 0 9 0; #X connect 2 0 3 1; #X connect 2 1 3 0; #X connect 3 0 4 0; #X connect 4 0 6 0; #X connect 6 0 11 0; -#X connect 8 1 21 0; +#X connect 8 1 16 0; #X connect 9 0 2 0; #X connect 9 1 6 1; -#X connect 10 0 8 0; -#X connect 11 0 10 0; -#X connect 11 1 12 1; -#X connect 12 0 13 0; -#X connect 15 0 16 0; -#X connect 15 0 17 0; -#X connect 16 0 14 1; -#X connect 17 0 14 2; -#X connect 18 0 14 0; -#X connect 19 0 20 0; -#X connect 21 0 12 0; -#X connect 21 1 19 0; -#X connect 21 2 18 0; -#X connect 21 3 7 0; -#X restore 13 191 pd unregister/name; -#X obj 13 71 text define \$0.connections; -#N canvas 764 216 666 598 manage.connections 0; -#X obj 25 21 r \$0.add.connection; -#X obj 52 273 text get \$0.clients; -#X obj 89 212 loadbang; -#X obj 89 232 t b b; -#X msg 89 252 0; -#X msg 118 252 1; -#X obj 52 85 text size \$0.clients; -#X obj 52 61 t b a; -#X obj 52 105 - 1; -#X obj 52 125 t a b; -#X obj 52 145 until; -#X obj 52 165 f; -#X obj 52 185 t a a; -#X obj 95 176 + 1; -#X msg 92 147 0; -#X obj 52 298 pack f f; -#X obj 170 175 t a; -#X obj 52 428 text set \$0.connections; -#X obj 97 387 loadbang; -#X msg 97 407 8e+06; -#X obj 311 65 t b a; -#X obj 311 128 until; -#X obj 311 148 f; -#X obj 311 215 text get \$0.connections; -#X msg 311 257 \$1; -#X msg 343 257 \$2; -#X obj 311 291 sel; -#X obj 343 291 sel; -#X obj 311 189 t a a a; -#X obj 311 332 f; -#X obj 382 292 t a; -#X obj 457 197 t a; -#X obj 311 356 text delete \$0.connections; -#X obj 311 108 t a a; -#X obj 311 168 - 1; -#X obj 311 88 text size \$0.connections; -#X obj 311 235 t a a; -#N canvas 764 541 286 245 find.free.port 0; -#X obj 40 26 inlet; -#X obj 40 46 t b b; -#X obj 40 66 until; -#X obj 40 86 f; -#X msg 81 65 0; -#X obj 40 127 text search \$0.connections 2; -#X obj 40 147 sel -1; -#X obj 96 97 + 1; -#X obj 40 106 t a a a; -#X obj 40 167 t b b; -#X obj 40 187 f; -#X obj 150 96 t b; -#X obj 40 207 outlet; -#X connect 0 0 1 0; -#X connect 1 0 2 0; -#X connect 1 1 4 0; -#X connect 2 0 3 0; -#X connect 3 0 8 0; -#X connect 4 0 3 1; -#X connect 5 0 6 0; -#X connect 6 0 9 0; -#X connect 7 0 3 1; -#X connect 8 0 5 0; -#X connect 8 1 10 1; -#X connect 8 2 7 0; -#X connect 9 0 10 0; -#X connect 9 1 11 0; -#X connect 10 0 12 0; -#X connect 11 0 2 1; -#X restore 115 343 pd find.free.port; -#X obj 52 318 t a b; -#X obj 52 363 list append; -#X obj 284 25 r \$0.del.connection; -#X obj 284 426 b; -#X obj 25 41 t b a; -#X obj 284 45 t b a; -#X msg 25 510 /updated/mylinks; -#X obj 25 530 s \$0.broadcast; -#X connect 0 0 42 0; -#X connect 1 0 15 0; -#X connect 2 0 3 0; -#X connect 3 0 4 0; -#X connect 3 1 5 0; -#X connect 4 0 1 1; -#X connect 5 0 1 2; -#X connect 6 0 8 0; -#X connect 7 0 6 0; -#X connect 7 1 16 0; -#X connect 8 0 9 0; -#X connect 9 0 10 0; -#X connect 9 1 14 0; -#X connect 10 0 11 0; -#X connect 11 0 12 0; -#X connect 12 0 1 0; -#X connect 12 1 13 0; -#X connect 13 0 11 1; -#X connect 14 0 11 1; -#X connect 15 0 38 0; -#X connect 16 0 15 1; -#X connect 18 0 19 0; -#X connect 19 0 17 1; -#X connect 20 0 35 0; -#X connect 20 1 31 0; -#X connect 21 0 22 0; -#X connect 22 0 34 0; -#X connect 23 0 36 0; -#X connect 24 0 26 0; -#X connect 25 0 27 0; -#X connect 26 0 29 0; -#X connect 27 0 29 0; -#X connect 28 0 23 0; -#X connect 28 1 30 0; -#X connect 28 2 22 1; -#X connect 29 0 32 0; -#X connect 30 0 29 1; -#X connect 31 0 27 1; -#X connect 31 0 26 1; -#X connect 33 0 21 0; -#X connect 33 1 22 1; -#X connect 34 0 28 0; -#X connect 35 0 33 0; -#X connect 36 0 24 0; -#X connect 36 1 25 0; -#X connect 37 0 39 1; -#X connect 38 0 39 0; -#X connect 38 1 37 0; -#X connect 39 0 17 0; -#X connect 40 0 43 0; -#X connect 41 0 44 0; -#X connect 42 0 44 0; -#X connect 42 1 7 0; -#X connect 43 0 41 0; -#X connect 43 1 20 0; -#X connect 44 0 45 0; -#X restore 13 210 pd manage.connections; -#N canvas 520 75 483 394 client.list 0; -#X obj 12 33 r \$0.from; -#X obj 12 53 routeOSC /refresh/clients; -#X obj 31 103 text size \$0.clients; -#X obj 31 143 until; -#X obj 31 163 f; -#X obj 31 183 t a a; -#X obj 74 177 + 1; -#X msg 74 147 0; -#X obj 31 206 text get \$0.clients; -#X obj 12 73 t b b b; -#X obj 31 249 list trim; -#X obj 12 296 s \$0.to; -#X obj 31 229 list prepend /clients; -#X msg 12 270 /clients/end; -#X msg 114 268 /clients/begin; -#X obj 31 123 t a b; +#X connect 10 0 14 0; +#X connect 11 0 8 0; +#X connect 13 0 12 0; +#X connect 15 0 13 1; +#X connect 16 1 10 0; +#X connect 16 2 13 0; +#X connect 16 3 7 0; +#X restore 13 175 pd unregister/name; +#N canvas 470 106 395 439 client.list 0; +#X obj 12 22 r \$0.from; +#X obj 12 47 routeOSC /refresh/clients; +#X obj 64 95 text size \$0.clients; +#X obj 64 140 until; +#X obj 64 162 f; +#X obj 64 183 t a a; +#X obj 107 177 + 1; +#X msg 105 140 0; +#X obj 64 206 text get \$0.clients; +#X obj 12 73 t b b b, f 18; +#X obj 64 324 list trim; +#X obj 12 396 s \$0.to; +#X obj 64 299 list prepend /clients; +#X msg 12 358 /clients/end; +#X msg 117 358 /clients/begin; +#X obj 64 117 t a b; +#X obj 64 239 list trim; +#X obj 64 270 route dummy; +#X obj 127 238 r \$0.room; #X connect 0 0 1 0; #X connect 1 0 9 0; #X connect 2 0 15 0; @@ -398,7 +383,7 @@ by IP and port.; #X connect 5 1 6 0; #X connect 6 0 4 1; #X connect 7 0 4 1; -#X connect 8 0 12 0; +#X connect 8 0 16 0; #X connect 9 0 13 0; #X connect 9 1 2 0; #X connect 9 2 14 0; @@ -408,75 +393,34 @@ by IP and port.; #X connect 14 0 11 0; #X connect 15 0 3 0; #X connect 15 1 7 0; -#X restore 13 229 pd client.list; -#N canvas 520 75 432 493 mylink.list 0; -#X obj 12 13 r \$0.from; -#X obj 31 123 until; -#X obj 31 143 f; -#X obj 31 163 t a a; -#X obj 74 157 + 1; -#X msg 74 127 0; -#X obj 12 53 t b b b; -#X obj 31 379 list trim; -#X obj 12 426 s \$0.to; -#X obj 12 33 routeOSC /refresh/mylinks; -#X obj 31 83 text size \$0.connections; -#X obj 31 186 text get \$0.connections; -#X obj 31 359 list prepend /mylinks; -#X msg 12 398 /mylinks/end; -#X msg 114 398 /mylinks/begin; -#X obj 214 251 r \$0.client; -#X obj 31 206 t a a a; -#X msg 31 231 \$1 \$2; -#X obj 31 251 unpack f f; -#X obj 31 281 sel; -#X obj 31 301 f; -#X obj 97 251 unpack f f; -#X obj 97 281 sel; -#X obj 97 301 f; -#X msg 97 231 \$2 \$1; -#X msg 321 248 \$3; -#X obj 31 328 pack f f, f 48; -#X obj 31 103 t a b; -#X connect 0 0 9 0; -#X connect 1 0 2 0; -#X connect 2 0 3 0; -#X connect 3 0 11 0; -#X connect 3 1 4 0; -#X connect 4 0 2 1; -#X connect 5 0 2 1; -#X connect 6 0 13 0; -#X connect 6 1 10 0; -#X connect 6 2 14 0; -#X connect 7 0 8 0; -#X connect 9 0 6 0; -#X connect 10 0 27 0; -#X connect 11 0 16 0; -#X connect 12 0 7 0; -#X connect 13 0 8 0; -#X connect 14 0 8 0; -#X connect 15 0 22 1; -#X connect 15 0 19 1; #X connect 16 0 17 0; -#X connect 16 1 24 0; -#X connect 16 2 25 0; -#X connect 17 0 18 0; -#X connect 18 0 19 0; -#X connect 18 1 20 1; -#X connect 19 0 20 0; -#X connect 20 0 26 0; -#X connect 21 0 22 0; -#X connect 21 1 23 1; -#X connect 22 0 23 0; -#X connect 23 0 26 0; -#X connect 24 0 21 0; -#X connect 25 0 26 1; -#X connect 26 0 12 0; -#X connect 27 0 1 0; -#X connect 27 1 5 0; -#X restore 13 248 pd mylink.list; -#X obj 13 91 text define \$0.params; -#N canvas 101 124 599 378 params 0; +#X connect 17 0 12 0; +#X connect 18 0 17 1; +#X restore 13 197 pd client.list; +#X obj 13 71 text define \$0.params; +#N canvas 918 595 355 291 reset/all 0; +#X obj 29 21 r \$0.from; +#X obj 83 134 text delete \$0.clients; +#X obj 56 190 text delete \$0.params; +#X obj 29 61 t b b; +#X msg 56 81 -1; +#X msg 29 226 /register/again; +#X obj 29 246 s \$0.broadcast; +#X obj 29 41 routeOSC /reset/clients; +#X obj 56 101 t a a; +#X connect 0 0 7 0; +#X connect 3 0 5 0; +#X connect 3 1 4 0; +#X connect 4 0 8 0; +#X connect 5 0 6 0; +#X connect 7 0 3 0; +#X connect 8 0 2 0; +#X connect 8 1 1 0; +#X restore 13 239 pd reset/all; +#X obj 13 341 netpd-server/netpd-server; +#X obj 13 363 declare -path netpd-server/includes; +#X obj 13 13 declare -path osc; +#N canvas 0 106 690 442 param.list 0; #X obj 12 13 r \$0.from; #X obj 12 33 routeOSC /params; #X obj 12 53 routeOSC /end /begin; @@ -484,7 +428,6 @@ by IP and port.; #X msg 39 93 0; #X obj 12 73 t b b; #X obj 129 129 spigot; -#X obj 12 239 s \$0.broadcast; #X msg 12 214 /updated/params; #X obj 351 18 r \$0.from; #X obj 351 40 routeOSC /refresh/params; @@ -496,47 +439,55 @@ by IP and port.; #X obj 370 165 f; #X msg 410 145 0; #X obj 370 215 text get \$0.params; -#X obj 370 239 list prepend /params; -#X obj 370 259 list trim; -#X msg 389 296 /params/begin; -#X msg 351 320 /params/end; -#X obj 351 353 s \$0.to; +#X obj 370 306 list prepend /params; +#X obj 370 326 list trim; +#X msg 389 351 /params/begin; +#X msg 351 375 /params/end; #X obj 370 185 t a a; #X obj 421 178 + 1; -#N canvas 173 124 359 338 update.params 0; -#X obj 17 287 text set \$0.params; -#X obj 17 264 list; -#X obj 52 242 loadbang; -#X msg 52 262 8e+06; +#N canvas 173 289 359 441 update.params 0; +#X obj 17 327 text set \$0.params; +#X obj 17 304 list; +#X obj 52 282 loadbang; +#X msg 52 302 8e+06; #X obj 17 17 inlet; -#X obj 17 100 text search \$0.params 0; -#X obj 17 58 t a a; +#X obj 17 88 t a a; #X obj 17 37 list; -#X obj 17 80 list split 1; -#X obj 17 121 sel -1; -#X obj 50 222 text set \$0.params; -#X obj 120 181 loadbang; -#X msg 120 201 1; -#X obj 50 144 t b a; -#X obj 50 164 list append; +#X obj 17 161 sel -1; +#X obj 50 262 text set \$0.params; +#X obj 120 221 loadbang; +#X obj 50 184 t b a; +#X obj 50 204 list append; +#X obj 17 61 list prepend; +#X obj 86 35 r \$0.room; +#X obj 17 110 list split 2; +#X obj 17 140 text search \$0.params 0 1; +#X msg 120 241 2; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 0 1; -#X connect 4 0 7 0; -#X connect 5 0 9 0; -#X connect 6 0 8 0; -#X connect 6 1 1 1; -#X connect 7 0 6 0; -#X connect 8 0 5 0; -#X connect 8 1 14 1; -#X connect 9 0 1 0; -#X connect 9 1 13 0; -#X connect 11 0 12 0; -#X connect 12 0 10 2; -#X connect 13 0 14 0; -#X connect 13 1 10 1; -#X connect 14 0 10 0; +#X connect 4 0 6 0; +#X connect 5 0 14 0; +#X connect 5 1 1 1; +#X connect 6 0 12 0; +#X connect 7 0 1 0; +#X connect 7 1 10 0; +#X connect 9 0 16 0; +#X connect 10 0 11 0; +#X connect 10 1 8 1; +#X connect 11 0 8 0; +#X connect 12 0 5 0; +#X connect 13 0 12 1; +#X connect 14 0 15 0; +#X connect 14 1 11 1; +#X connect 15 0 7 0; +#X connect 16 0 8 2; #X restore 129 172 pd update.params; +#X obj 370 284 route dummy; +#X obj 370 262 list trim; +#X obj 351 408 s \$0.to; +#X obj 12 238 s \$0.to.room.members; +#X obj 433 259 r \$0.room; #X connect 0 0 1 0; #X connect 1 0 2 0; #X connect 2 0 5 0; @@ -544,51 +495,59 @@ by IP and port.; #X connect 2 2 6 0; #X connect 3 0 6 1; #X connect 4 0 6 1; -#X connect 5 0 8 0; +#X connect 5 0 7 0; #X connect 5 1 4 0; -#X connect 6 0 26 0; -#X connect 8 0 7 0; +#X connect 6 0 24 0; +#X connect 7 0 28 0; +#X connect 8 0 9 0; #X connect 9 0 10 0; #X connect 10 0 11 0; #X connect 11 0 12 0; -#X connect 12 0 13 0; -#X connect 13 0 22 0; -#X connect 13 1 14 0; -#X connect 13 2 21 0; +#X connect 12 0 21 0; +#X connect 12 1 13 0; +#X connect 12 2 20 0; +#X connect 13 0 14 0; +#X connect 13 1 16 0; #X connect 14 0 15 0; -#X connect 14 1 17 0; -#X connect 15 0 16 0; -#X connect 16 0 24 0; -#X connect 17 0 16 1; +#X connect 15 0 22 0; +#X connect 16 0 15 1; +#X connect 17 0 26 0; #X connect 18 0 19 0; -#X connect 19 0 20 0; -#X connect 20 0 23 0; -#X connect 21 0 23 0; -#X connect 22 0 23 0; -#X connect 24 0 18 0; -#X connect 24 1 25 0; -#X connect 25 0 16 1; -#X restore 13 267 pd params; -#N canvas 938 512 355 291 reset/all 0; -#X obj 29 21 r \$0.from; -#X obj 95 164 text delete \$0.clients; -#X obj 75 182 text delete \$0.connections; -#X obj 56 200 text delete \$0.params; -#X obj 29 61 t b b; -#X msg 56 81 -1; -#X obj 56 101 t a a a; -#X msg 29 226 /register/again; -#X obj 29 246 s \$0.broadcast; -#X obj 29 41 routeOSC /reset/clients; -#X connect 0 0 9 0; -#X connect 4 0 7 0; -#X connect 4 1 5 0; -#X connect 5 0 6 0; -#X connect 6 1 2 0; -#X connect 6 2 1 0; -#X connect 7 0 8 0; -#X connect 9 0 4 0; -#X restore 13 285 pd reset/all; -#X obj 13 341 netpd-server/netpd-server; -#X obj 13 363 declare -path netpd-server/includes; -#X obj 12 13 declare -path osc; +#X connect 19 0 27 0; +#X connect 20 0 27 0; +#X connect 21 0 27 0; +#X connect 22 0 17 0; +#X connect 22 1 23 0; +#X connect 23 0 15 1; +#X connect 25 0 18 0; +#X connect 26 0 25 0; +#X connect 29 0 25 1; +#X restore 13 218 pd param.list; +#N canvas 0 106 429 282 DEBUG 0; +#X obj 17 15 r \$0.from; +#X obj 17 91 print FROM; +#X obj 23 124 r \$0.to; +#X obj 89 45 r \$0.client; +#X obj 17 68 list prepend; +#X obj 92 155 r \$0.client; +#X obj 23 178 list prepend; +#X obj 23 203 print TO__; +#X obj 17 38 spigot 0; +#X obj 23 147 spigot 0; +#X obj 204 13 inlet; +#X obj 170 155 r \$0.to.client; +#X connect 0 0 8 0; +#X connect 2 0 9 0; +#X connect 3 0 4 1; +#X connect 4 0 1 0; +#X connect 5 0 6 1; +#X connect 6 0 7 0; +#X connect 8 0 4 0; +#X connect 9 0 6 0; +#X connect 10 0 9 1; +#X connect 10 0 8 1; +#X connect 11 0 6 1; +#X restore 275 285 pd DEBUG; +#X obj 275 258 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0 +1; +#X connect 13 0 12 0;