Update of /cvsroot/pure-data/externals/mrpeach/net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28120
Modified Files: tcpserver.c tcpserver-help.pd Log Message: Added disconnectclient and disconnectsocket methods so server can close connections too.
Index: tcpserver-help.pd =================================================================== RCS file: /cvsroot/pure-data/externals/mrpeach/net/tcpserver-help.pd,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tcpserver-help.pd 20 Jun 2007 21:10:31 -0000 1.3 --- tcpserver-help.pd 2 Aug 2007 15:56:10 -0000 1.4 *************** *** 1,61 **** ! #N canvas 74 160 1119 648 12; ! #X msg 18 -6 print; ! #X obj 136 109 tcpserver 9997; ! #X floatatom 171 237 5 0 0 0 - - -; ! #X floatatom 286 191 5 0 0 0 - - -; ! #X obj 324 138 unpack 0 0 0 0; ! #X floatatom 324 161 3 0 0 0 - - -; ! #X floatatom 359 161 3 0 0 0 - - -; ! #X floatatom 395 161 3 0 0 0 - - -; ! #X floatatom 431 161 3 0 0 0 - - -; ! #X text 281 160 from; ! #X text 224 236 connections; ! #X obj 43 161 print received; ! #X msg 118 45 client 1 1 2 3; ! #X msg 86 20 broadcast 1 2 3; ! #X text 69 -6 list of connections; ! #X text 226 19 send to all clients; ! #X text 249 45 send to client 1; ! #X text 199 191 on socket; ! #X msg 140 71 send 504 1 2 3; ! #X text 273 71 send to client on socket 504; ! #X msg 564 -365 client 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; ! #X msg 563 -340 client 1 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39; ! #X msg 563 -297 client 1 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59; ! #X msg 563 -255 client 1 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79; ! #X msg 561 -213 client 1 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99; ! #X msg 560 -170 client 1 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119; ! #X msg 559 -127 client 1 120 121 122 123 124 125 126 127 138 139 140 141 142 143 144 145 146 147 148 149; ! #X msg 559 -84 client 1 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169; ! #X msg 559 -39 client 1 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189; ! #X msg 558 5 client 1 190 191 192 193 194 195 196 197 198 199 200 201 ! 202 203 204 205 206 207 208 209; ! #X msg 558 47 client 1 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229; ! #X msg 558 89 client 1 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249; ! #X msg 558 134 client 1 250 251 252 253 254 255; ! #X obj 91 -216 openpanel; ! #X obj 91 -235 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 -241291 -1; ! #X text 391 -262 send a file; ! #X text 173 -217 ...any file; ! #X msg 58 -261 client 1 ../doc/5.reference/test.txt; ! #X msg 91 -192 client 1 $1; ! #X msg 160 -89 10 1 2 43; ! #X text 252 -88 'send' prefix is optional; ! #X text 167 -68 (the first number is socket number); ! #X text 347 254 2007/06/20 Martin Peach; #X connect 0 0 1 0; ! #X connect 1 0 11 0; #X connect 1 1 2 0; #X connect 1 2 3 0; --- 1,82 ---- ! #N canvas 54 184 1138 623 12; ! #X msg 173 7 print; ! #X obj 136 144 tcpserver 9997; ! #X floatatom 176 236 5 0 0 0 - - -; ! #X floatatom 216 171 5 0 0 0 - - -; ! #X obj 257 190 unpack 0 0 0 0; ! #X floatatom 257 213 3 0 0 0 - - -; ! #X floatatom 297 213 3 0 0 0 - - -; ! #X floatatom 337 213 3 0 0 0 - - -; ! #X floatatom 378 213 3 0 0 0 - - -; ! #X text 214 212 from; ! #X text 229 235 connections; ! #X obj 29 240 print received; ! #X msg 173 61 client 1 1 2 3; ! #X msg 173 34 broadcast 1 2 3; ! #X text 225 8 list of connections; ! #X text 315 34 send to all clients; ! #X text 306 61 send to client 1; ! #X text 129 171 on socket; ! #X msg 173 88 send 504 1 2 3; ! #X text 306 88 send to client on socket 504; ! #X msg 589 -278 client 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19; ! #X msg 589 -255 client 1 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39; ! #X msg 589 -217 client 1 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59; ! #X msg 589 -179 client 1 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79; ! #X msg 589 -141 client 1 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99; ! #X msg 589 -103 client 1 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119; ! #X msg 589 -65 client 1 120 121 122 123 124 125 126 127 138 139 140 141 142 143 144 145 146 147 148 149; ! #X msg 589 -27 client 1 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169; ! #X msg 589 11 client 1 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189; ! #X msg 589 49 client 1 190 191 192 193 194 195 196 197 198 199 200 ! 201 202 203 204 205 206 207 208 209; ! #X msg 589 87 client 1 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229; ! #X msg 589 125 client 1 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249; ! #X msg 589 163 client 1 250 251 252 253 254 255; ! #X obj 24 -245 openpanel; ! #X obj 24 -264 bng 15 250 50 0 empty empty empty 17 7 0 10 -24198 -241291 -1; ! #X text 324 -291 send a file; ! #X text 106 -246 ...any file; ! #X msg -9 -290 client 1 ../doc/5.reference/test.txt; ! #X msg 24 -221 client 1 $1; ! #X msg 166 -54 10 1 2 43; ! #X text 256 -53 'send' prefix is optional; ! #X text 187 -32 (the first number is socket number); ! #X msg 194 -115 disconnectsocket $1; ! #X msg 91 -88 disconnectclient $1; ! #X obj 589 188 s toserver; ! #X obj 157 121 r toserver; ! #X floatatom 113 -156 5 0 0 0 - - -; ! #X obj 91 -137 f; ! #X obj 91 -156 bng 15 250 50 0 empty empty empty 17 7 0 10 -258699 ! -241291 -1; ! #X floatatom 216 -156 5 0 0 0 - - -; ! #X obj 194 -137 f; ! #X obj 194 -156 bng 15 250 50 0 empty empty empty 17 7 0 10 -258699 ! -241291 -1; ! #X text 62 -175 disconnect by socket or client number; ! #X text 589 -303 tcpserver sends and receives bytes on [0...255]; ! #X text 610 246 2007/08/02 Martin Peach; ! #X text 269 143 argument is port number; ! #X text 27 263 Received messages are output as lists of bytes; ! #X text 26 281 ***WARNING*** Attempting to print long messages can ! hang pd!; ! #X obj 29 218 spigot; ! #X obj 78 198 tgl 15 0 empty empty enable_print 17 7 0 10 -24198 -258699 ! -258699 1 1; #X connect 0 0 1 0; ! #X connect 1 0 58 0; #X connect 1 1 2 0; #X connect 1 2 3 0; *************** *** 68,84 **** #X connect 13 0 1 0; #X connect 18 0 1 0; ! #X connect 20 0 1 0; ! #X connect 21 0 1 0; ! #X connect 22 0 1 0; ! #X connect 23 0 1 0; ! #X connect 24 0 1 0; ! #X connect 25 0 1 0; ! #X connect 26 0 1 0; ! #X connect 27 0 1 0; ! #X connect 28 0 1 0; ! #X connect 29 0 1 0; ! #X connect 30 0 1 0; ! #X connect 31 0 1 0; ! #X connect 32 0 1 0; #X connect 33 0 38 0; #X connect 34 0 33 0; --- 89,105 ---- #X connect 13 0 1 0; #X connect 18 0 1 0; ! #X connect 20 0 44 0; ! #X connect 21 0 44 0; ! #X connect 22 0 44 0; ! #X connect 23 0 44 0; ! #X connect 24 0 44 0; ! #X connect 25 0 44 0; ! #X connect 26 0 44 0; ! #X connect 27 0 44 0; ! #X connect 28 0 44 0; ! #X connect 29 0 44 0; ! #X connect 30 0 44 0; ! #X connect 31 0 44 0; ! #X connect 32 0 44 0; #X connect 33 0 38 0; #X connect 34 0 33 0; *************** *** 86,87 **** --- 107,119 ---- #X connect 38 0 1 0; #X connect 39 0 1 0; + #X connect 42 0 1 0; + #X connect 43 0 1 0; + #X connect 45 0 1 0; + #X connect 46 0 47 1; + #X connect 47 0 43 0; + #X connect 48 0 47 0; + #X connect 49 0 50 1; + #X connect 50 0 42 0; + #X connect 51 0 50 0; + #X connect 58 0 11 0; + #X connect 59 0 58 1;
Index: tcpserver.c =================================================================== RCS file: /cvsroot/pure-data/externals/mrpeach/net/tcpserver.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** tcpserver.c 23 Jul 2007 16:48:29 -0000 1.6 --- tcpserver.c 2 Aug 2007 15:56:10 -0000 1.7 *************** *** 105,108 **** --- 105,110 ---- static void tcp_server_send_bytes(int sockfd, t_tcpserver *x, int argc, t_atom *argv); static void tcpserver_client_send(t_tcpserver *x, t_symbol *s, int argc, t_atom *argv); + static void tcpserver_client_disconnect(t_tcpserver *x, t_floatarg fclient); + static void tcpserver_socket_disconnect(t_tcpserver *x, t_floatarg fsocket); static void tcpserver_broadcast(t_tcpserver *x, t_symbol *s, int argc, t_atom *argv); static void tcpserver_notify(t_tcpserver *x); *************** *** 405,408 **** --- 407,446 ---- }
+ /* disconnect a client by socket */ + static void tcpserver_socket_disconnect(t_tcpserver *x, t_floatarg fsocket) + { + int sock = (int)fsocket; + + if(x->x_nconnections < 0) + { + post("%s: no clients connected", objName); + return; + } + x->x_sock_fd = sock; + tcpserver_notify(x); + } + + + /* disconnect a client by number */ + static void tcpserver_client_disconnect(t_tcpserver *x, t_floatarg fclient) + { + int client = (int)fclient; + + if(x->x_nconnections < 0) + { + post("%s: no clients connected", objName); + return; + } + if (!((client > 0) && (client < MAX_CONNECT))) + { + post("%s: client %d out of range [1..%d]", objName, client, MAX_CONNECT); + return; + } + --client;/* zero based index*/ + x->x_sock_fd = x->x_fd[client]; + tcpserver_notify(x); + } + + /* send message to client using client number note that the client numbers might change in case a client disconnects! */ *************** *** 638,641 **** --- 676,681 ---- class_addmethod(tcpserver_class, (t_method)tcpserver_send, gensym("send"), A_GIMME, 0); class_addmethod(tcpserver_class, (t_method)tcpserver_client_send, gensym("client"), A_GIMME, 0); + class_addmethod(tcpserver_class, (t_method)tcpserver_client_disconnect, gensym("disconnectclient"), A_DEFFLOAT, 0); + class_addmethod(tcpserver_class, (t_method)tcpserver_socket_disconnect, gensym("disconnectsocket"), A_DEFFLOAT, 0); class_addmethod(tcpserver_class, (t_method)tcpserver_broadcast, gensym("broadcast"), A_GIMME, 0); class_addlist(tcpserver_class, (t_method)tcpserver_send);