comparison TaskManager/Test/test_render/lindaapi.cc @ 532:cd2985cd3461

add .hgignore modify test_render/Makefile.linux
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Wed, 21 Oct 2009 11:55:16 +0900
parents bc5b3d327083
children
comparison
equal deleted inserted replaced
531:fab6f20021c9 532:cd2985cd3461
1 // $Id: lindaapi.c,v 1.9 2006/04/03 08:17:11 kono Exp $ 1 // $Id: lindaapi.c,v 1.9 2006/04/03 08:17:11 kono Exp $
2 // 2 //
3 3
4 /*---------------------------------------------------------------------- 4 /*----------------------------------------------------------------------
5 インクルードファイル読み込み 5 ゃ潟若<ゃ茯粋昭
6 ----------------------------------------------------------------------*/ 6 ----------------------------------------------------------------------*/
7 #include <sys/file.h> 7 #include <sys/file.h>
8 #include <stdio.h> 8 #include <stdio.h>
9 #include <stdlib.h> 9 #include <stdlib.h>
10 #include <string.h> 10 #include <string.h>
49 #define PRINT_INTERVAL 4 49 #define PRINT_INTERVAL 4
50 50
51 /*-------------------------------------------------------------------/ 51 /*-------------------------------------------------------------------/
52 void 52 void
53 count_packet (char type): 53 count_packet (char type):
54 パケットの送受信カウントする 54 宴篆<潟
55 55
56 引き数: 56 綣:
57 type - 送信、受信 (char型: s,r) 57 type - 篆<篆 (char: s,r)
58 /-------------------------------------------------------------------*/ 58 /-------------------------------------------------------------------*/
59 void count_packet(char type) 59 void count_packet(char type)
60 { 60 {
61 static int send_packet=-1,receive_packet=0; 61 static int send_packet=-1,receive_packet=0;
62 static struct timeval start,now,previous; 62 static struct timeval start,now,previous;
93 #define unix_open open 93 #define unix_open open
94 #define unix_read_w read 94 #define unix_read_w read
95 /*-------------------------------------------------------------------/ 95 /*-------------------------------------------------------------------/
96 int 96 int
97 unix_read (int fd, char *buf, unsigned int size): 97 unix_read (int fd, char *buf, unsigned int size):
98 サーバからTUPLEを読みこむ。 98 泣若TUPLE茯帥
99 現在は使われていない。 99 憜篏帥
100 100
101 引き数: 101 綣:
102 fd - サーバのファイルディスクリプタ 102 fd - 泣若<ゃc鴻
103 buf - 受け取るデータの格納場所(TUPLEヘッダ含む) 103 buf - 若帥主贋(TUPLE)
104 size - bufのbyte数 104 size - bufbyte
105 返り値: 105 菴:
106 読みこんだbyte数 106 茯帥byte
107 /-------------------------------------------------------------------*/ 107 /-------------------------------------------------------------------*/
108 int 108 int
109 unix_read(int fd,char *buf,unsigned int size) { 109 unix_read(int fd,char *buf,unsigned int size) {
110 int len,a,i; 110 int len,a,i;
111 if(read(fd,buf,INT_SIZE)!=INT_SIZE) { // INT_SIZE is sizeof(int) 111 if(read(fd,buf,INT_SIZE)!=INT_SIZE) { // INT_SIZE is sizeof(int)
127 } 127 }
128 128
129 /*-------------------------------------------------------------------/ 129 /*-------------------------------------------------------------------/
130 int 130 int
131 unix_write (int fd, unsigned char *buf, unsigned int size): 131 unix_write (int fd, unsigned char *buf, unsigned int size):
132 サーバへTUPLEを送る。 132 泣若TUPLE
133 133
134 引き数: 134 綣:
135 fd - サーバのファイルディスクリプタ 135 fd - 泣若<ゃc鴻
136 buf - サーバへ送るデータ(TUPLEヘッダ含む) 136 buf - 泣若檎若(TUPLE)
137 size - bufのbyte数 137 size - bufbyte
138 返り値: 138 菴:
139 送った(書きこんだ)データのbyte数 139 c(吾)若帥byte
140 /-------------------------------------------------------------------*/ 140 /-------------------------------------------------------------------*/
141 int 141 int
142 unix_write(int fd,unsigned char *buf,unsigned int size) { 142 unix_write(int fd,unsigned char *buf,unsigned int size) {
143 int i,nsize; 143 int i,nsize;
144 nsize = htonl(size); 144 nsize = htonl(size);
165 165
166 166
167 /*-------------------------------------------------------------------/ 167 /*-------------------------------------------------------------------/
168 int 168 int
169 start_linda (char * hostname): 169 start_linda (char * hostname):
170 サーバとのコネクションを確立し、COMMANDキューとREPLYキューの 170 泣若潟激с潟腆榊COMMANDャ若REPLYャ若
171 初期化を行なう。 171
172 172
173 引き数: 173 綣:
174 hostname - サーバのホスト名 174 hostname - 泣若鴻
175 返り値: 175 菴:
176 コネクション確立が成功するとそのファイルディスクリプタを返す。 176 潟激с括∈腴<ゃc鴻帥菴
177 失敗すると -1 を返す。 177 紊掩 -1 菴
178 /-------------------------------------------------------------------*/ 178 /-------------------------------------------------------------------*/
179 int 179 int
180 start_linda(char * hostname){ 180 start_linda(char * hostname){
181 char *p; 181 char *p;
182 const char *hostname0 = "/tmp/ldserv"; 182 const char *hostname0 = "/tmp/ldserv";
253 } 253 }
254 254
255 /*-------------------------------------------------------------------/ 255 /*-------------------------------------------------------------------/
256 int 256 int
257 psx_out (unsigned int id, unsigned char *data, unsigned int size): 257 psx_out (unsigned int id, unsigned char *data, unsigned int size):
258 outコマンドをCOMMANDキューへ溜める。 258 out潟潟COMMANDャ若御
259 259
260 引き数: 260 綣:
261 id - TUPLE SpaceのID 261 id - TUPLE SpaceID
262 data - 送信するデータ 262 data - 篆<若
263 size - dataのサイズ 263 size - data泣ゃ
264 返り値: 264 菴:
265 シーケンス番号 265 激若宴潟合
266 /-------------------------------------------------------------------*/ 266 /-------------------------------------------------------------------*/
267 int 267 int
268 psx_out(unsigned int id, unsigned char *data, unsigned int size){ 268 psx_out(unsigned int id, unsigned char *data, unsigned int size){
269 if (psx_queue(id, size, data, 'o', NULL, NULL) == FAIL){ 269 if (psx_queue(id, size, data, 'o', NULL, NULL) == FAIL){
270 return(FAIL); 270 return(FAIL);
276 276
277 /*-------------------------------------------------------------------/ 277 /*-------------------------------------------------------------------/
278 int 278 int
279 psx_ld (unsigned int id, char mode, void(*callback)(char*,void*), 279 psx_ld (unsigned int id, char mode, void(*callback)(char*,void*),
280 void * obj): 280 void * obj):
281 in,read,waitなどの受信コマンドをCOMMANDキューへ溜める。 281 in,read,wait篆<潟潟COMMANDャ若御
282 psx_in,psx_rd,psx_wait_rdなどに置き換えられている。 282 psx_in,psx_rd,psx_wait_rd臀
283 283
284 引き数: 284 綣:
285 id - TUPLE SpaceのID 285 id - TUPLE SpaceID
286 mode - i,r,w の文字を取り、各々in,read,waitを表している。 286 mode - i,r,w 絖in,read,wait茵
287 callback - コールバックを使用する場合の関数へのポインタ。 287 callback - 潟若篏睡翫∽違吾ゃ潟帥
288 使用しない場合はNULLをいれる。 288 篏睡翫NULL
289 obj - コールバックで用いる関数の引き数。 289 obj - 潟若х∽違綣違
290 返り値: 290 菴:
291 psx_queue内でmallocされたREPLY構造体へのポインタ 291 psx_queuemallocREPLY罕篏吾ゃ潟
292 /-------------------------------------------------------------------*/ 292 /-------------------------------------------------------------------*/
293 int 293 int
294 psx_ld(unsigned int id, char mode,void(*callback)(char *,void *),void * obj){ 294 psx_ld(unsigned int id, char mode,void(*callback)(char *,void *),void * obj){
295 int r; 295 int r;
296 if ((r=psx_queue(id, 0, NULL, mode, callback, obj)) == FAIL){ 296 if ((r=psx_queue(id, 0, NULL, mode, callback, obj)) == FAIL){
300 } 300 }
301 301
302 /*-------------------------------------------------------------------/ 302 /*-------------------------------------------------------------------/
303 unsigned char * 303 unsigned char *
304 psx_reply (int seq): 304 psx_reply (int seq):
305 サーバから答えが来たデータを返す。 305 泣若膈ャ若帥菴
306 306
307 引き数: 307 綣:
308 seq - psx_ld()が返した値。 308 seq - psx_ld()菴ゃ
309 返り値: 309 菴:
310 seqに対応したデータを返す。データをまだ受信していない場合は 310 seq絲上若帥菴若帥障篆<翫
311 NULLを返す。 311 NULL菴
312 /-------------------------------------------------------------------*/ 312 /-------------------------------------------------------------------*/
313 unsigned char * 313 unsigned char *
314 psx_reply(int seq){ 314 psx_reply(int seq){
315 REPLY *p, *q; 315 REPLY *p, *q;
316 char *ans; 316 char *ans;
354 } 354 }
355 355
356 /*-------------------------------------------------------------------/ 356 /*-------------------------------------------------------------------/
357 void 357 void
358 psx_sync_n (): 358 psx_sync_n ():
359 サーバとデータの送受信をする。COMMANDキューに溜まったデータを 359 泣若若帥篆<COMMANDャ若羣障c若帥
360 送信し、サーバから送られて来たデータを対応するREPLYへいれる。 360 篆<泣若ャ若帥絲上REPLY吾
361 /-------------------------------------------------------------------*/ 361 /-------------------------------------------------------------------*/
362 void 362 void
363 psx_sync_n(){ 363 psx_sync_n(){
364 int acount; 364 int acount;
365 COMMAND *c, *t; 365 COMMAND *c, *t;
390 390
391 /*-------------------------------------------------------------------/ 391 /*-------------------------------------------------------------------/
392 int 392 int
393 psx_queue (unsigned int id, unsigned int size, unsigned char *data, 393 psx_queue (unsigned int id, unsigned int size, unsigned char *data,
394 char mode, void(*callback)(char*,void*), void * obj): 394 char mode, void(*callback)(char*,void*), void * obj):
395 out,in,read,waitなどのコマンドをCOMMANDキューに溜める。データを 395 out,in,read,wait潟潟COMMANDャ若羣若帥
396 受信するコマンド(in,read,wait)のときは受け取ったときにデータを 396 篆<潟潟(in,read,wait)c若帥
397 格納するREPLY構造体を作る。 397 主REPLY罕篏篏
398 398
399 引き数: 399 綣:
400 id - アクセスするTUPLE SpaceのID 400 id - ≪祉鴻TUPLE SpaceID
401 size - dataのサイズ 401 size - data泣ゃ
402 data - 送信するデータ。受信時はNULL。 402 data - 篆<若帥篆≧NULL
403 mode - コマンドのモード(out,in,read,wait は各々char型: o,i,r,w) 403 mode - 潟潟≪若(out,in,read,wait char: o,i,r,w)
404 callback - コールバックを使用する場合の関数へのポインタ。 404 callback - 潟若篏睡翫∽違吾ゃ潟帥
405 使用しない場合はNULL。 405 篏睡翫NULL
406 obj - コールバックで用いる関数に引き渡すデータ。 406 obj - 潟若х∽違綣羝<若帥
407 返り値: 407 菴:
408 成功した場合 - mallocしたREPLY構造体へのポインタ。outの場合は 408 翫 - mallocREPLY罕篏吾ゃ潟帥out翫
409 0が返る。 409 0菴
410 失敗した場合 - FAIL(-1)が返る。 410 紊掩翫 - FAIL(-1)菴
411 /-------------------------------------------------------------------*/ 411 /-------------------------------------------------------------------*/
412 int 412 int
413 psx_queue(unsigned int id, unsigned int size, unsigned char *data, char mode, 413 psx_queue(unsigned int id, unsigned int size, unsigned char *data, char mode,
414 void(*callback)(char *,void *), void * obj){ 414 void(*callback)(char *,void *), void * obj){
415 REPLY *p; 415 REPLY *p;
438 } 438 }
439 c = q_end; 439 c = q_end;
440 q_end = q_end->next; 440 q_end = q_end->next;
441 } 441 }
442 442
443 // size は DATASIZE 443 // size DATASIZE
444 if ((q_end->command = (unsigned char *) malloc(size+LINDA_HEADER_SIZE)) == NULL){ 444 if ((q_end->command = (unsigned char *) malloc(size+LINDA_HEADER_SIZE)) == NULL){
445 free(q_end); 445 free(q_end);
446 c->next = NULL; 446 c->next = NULL;
447 return(FAIL); 447 return(FAIL);
448 } 448 }
458 return(FAIL); 458 return(FAIL);
459 } 459 }
460 p = r_end->next; r_end = p; p->next = NULL; 460 p = r_end->next; r_end = p; p->next = NULL;
461 } 461 }
462 p->mode = '?'; 462 p->mode = '?';
463 p->seq = (int)p; // 構造体のアドレスで識別 463 p->seq = (int)p; // 罕篏≪鴻ц
464 p->callback = callback; 464 p->callback = callback;
465 p->obj = obj; 465 p->obj = obj;
466 PSX_Debug(("psx_queue: seq %d reply %x p %x r_end %x",seq,reply,p,r_end)); 466 PSX_Debug(("psx_queue: seq %d reply %x p %x r_end %x",seq,reply,p,r_end));
467 }else{ 467 }else{
468 p=0; 468 p=0;
489 } 489 }
490 490
491 /*-------------------------------------------------------------------/ 491 /*-------------------------------------------------------------------/
492 void 492 void
493 unix_chkserv (): 493 unix_chkserv ():
494 サーバからデータ(TUPLE)を受け取る。REPLY構造体にコールバック関数 494 泣若若(TUPLE)REPLY罕篏潟若∽
495 が指定されていればその関数を実行し、REPLY構造体をキューから取り 495 絎違∽違絎茵REPLY罕篏ャ若
496 除く。コールバック関数が指定されていなければREPLY構造体にデータ 496 ゃ潟若∽違絎REPLY罕篏若
497 を引き渡す。 497 綣羝<
498 /-------------------------------------------------------------------*/ 498 /-------------------------------------------------------------------*/
499 void 499 void
500 unix_chkserv(){ 500 unix_chkserv(){
501 int i,k,pkt,npkt; 501 int i,k,pkt,npkt;
502 REPLY *r,*prev; 502 REPLY *r,*prev;
577 } 577 }
578 578
579 /*-------------------------------------------------------------------/ 579 /*-------------------------------------------------------------------/
580 int 580 int
581 get_int(unsigned char * tuple, int offset): 581 get_int(unsigned char * tuple, int offset):
582 TUPLEのヘッダに格納された int型 のデータを得るための関数 582 TUPLE主 int 若帥緇∽
583 psx_get_datalength() と psx_get_seq() から呼ばれる。 583 psx_get_datalength() psx_get_seq() 若違
584 584
585 引き数: 585 綣:
586 tuple - ヘッダ情報も含んだTUPLE。psx_reply()で得たものでもいい。 586 tuple - 宴TUPLEpsx_reply()ус
587 offset - 取りだすデータのオフセット。LINDA_DATA_LENGTH_OFFSET 587 offset - 若帥祉LINDA_DATA_LENGTH_OFFSET
588 か LINDA_SEQ_OFFSET。 588 LINDA_SEQ_OFFSET
589 589
590 返り値: 590 菴:
591 指定したオフセットに格納されていた数値(int型) 591 絎祉主医(int)
592 /-------------------------------------------------------------------*/ 592 /-------------------------------------------------------------------*/
593 static 593 static
594 int get_int(unsigned char * tuple, int offset){ 594 int get_int(unsigned char * tuple, int offset){
595 int i; 595 int i;
596 i = (tuple[offset] <<24) + 596 i = (tuple[offset] <<24) +