# HG changeset patch # User aaa # Date 1256126448 -32400 # Node ID 9f9d51b6006263e7faac5bb6d4daef7728680204 # Parent 129979e7d5c775b86235c93582a27d654498d7fb complex lindaapi diff -r 129979e7d5c7 -r 9f9d51b60062 TaskManager/Test/test_render/Application/dynamic_create.cc --- a/TaskManager/Test/test_render/Application/dynamic_create.cc Wed Oct 21 19:03:46 2009 +0900 +++ b/TaskManager/Test/test_render/Application/dynamic_create.cc Wed Oct 21 21:00:48 2009 +0900 @@ -7,6 +7,9 @@ #include #include #include "SceneGraphRoot.h" +#include "lindaapi/lindaapi.h" + +#define PORT 10000 /* typedef struct { @@ -15,6 +18,12 @@ } st_mmap_t; */ +typedef struct { + int tid; + int read_id; + SceneGraphPtr node; +} callback_arg; + int fix_byte(int size,int fix_byte_size) { @@ -93,10 +102,11 @@ node->stack_xyz[1] = -node->stack_xyz[1]; } - Pad *pad = sgroot->getController(); + //Pad *pad = sgroot->getController(); + /* if (pad->right.isPush()) { - SceneGraphPtr earth; + SceneGraphPtr earth; st_mmap_t m = my_mmap("xml_file/universe.xml"); @@ -106,17 +116,55 @@ earth->set_move_collision(moon_move, moon_collision); node->addChild(earth); } + */ + + psx_sync_n(); +} + +void +create_sg(SceneGraphPtr node, unsigned char *data, int len) +{ + SceneGraphPtr earth; + + //sgroot->createFromXMLmemory(sgroot->tmanager, "xml_file/universe.xml"); + const char *objname = sgroot->createFromXMLmemory(sgroot->tmanager, (char *)data, len); + earth = sgroot->createSceneGraph(objname); + earth->set_move_collision(moon_move, moon_collision); + node->addChild(earth); + } -/* +static void +callbacker(unsigned char *tuple, void *arg) { + int len; + unsigned char *data; + callback_arg *carg = (callback_arg *)arg; + + len = psx_get_datalength(tuple); + // 最初の4byteデータは使わない + data = tuple+LINDA_HEADER_SIZE; + + // ここで create + create_sg(carg->node, data, len); + + /* dataは'\0'で終わっている事を期待 (writerで保証する) */ + //printf("get data[%d]: `%s'\n", len, data); + free(tuple); + + psx_callback_wait_rd(carg->tid, carg->read_id, callbacker, arg); +} + + void -linda_init() +linda_init(TaskManager *manager, SceneGraphPtr node) { init_linda(); - tspace = open_linda_java("localhost", PORT); - printf("open"); + callback_arg *carg = (callback_arg *)manager->allocate(sizeof(callback_arg)); + carg->tid = open_linda_java("cycas.cr.ie.u-ryukyu.ac.jp", PORT); + carg->read_id = 10; + carg->node = node; + psx_callback_wait_rd(carg->tid, carg->read_id, callbacker, carg); } -*/ void dynamic_init(TaskManager *manager) @@ -124,10 +172,8 @@ SceneGraphPtr earth; sgroot->tmanager = manager; - - #if 0 - // テスト用に mmap したデータを第2引数に渡す + // テスト用に mmap したデータを第2引数に渡す予定でした sgroot->createFromXMLmemory(manager, "xml_file/universe.xml"); // sglist に登録されている name から sgid を引き、sg_src[sgid] からコピーして返す @@ -137,6 +183,8 @@ parent = sgroot->createSceneGraph(); parent->set_move_collision(earth_move, earth_collision); #endif + + linda_init(manager, parent); // SceneGraphRoot に、使用する SceneGraph を設定する // このとき、ユーザーが記述した SceneGraph の root を渡す。 diff -r 129979e7d5c7 -r 9f9d51b60062 TaskManager/Test/test_render/Makefile.def --- a/TaskManager/Test/test_render/Makefile.def Wed Oct 21 19:03:46 2009 +0900 +++ b/TaskManager/Test/test_render/Makefile.def Wed Oct 21 21:00:48 2009 +0900 @@ -6,4 +6,4 @@ CFLAGS = -O9 -g -Wall -DUSE_MEMLIST=1 -DUSE_MEMHASH=1 # -DDEBUG INCLUDE = -I$(CERIUM)/include/TaskManager -I. -LIBS = -L$(CERIUM)/TaskManager +LIBS = -L$(CERIUM)/TaskManager -Llindaapi diff -r 129979e7d5c7 -r 9f9d51b60062 TaskManager/Test/test_render/Makefile.macosx --- a/TaskManager/Test/test_render/Makefile.macosx Wed Oct 21 19:03:46 2009 +0900 +++ b/TaskManager/Test/test_render/Makefile.macosx Wed Oct 21 21:00:48 2009 +0900 @@ -12,6 +12,7 @@ TASK_OBJS = $(TASK_SRCS:.cc=.o) LIBS += -lFifoManager +LIBS += -llindaapi CFLAGS += `sdl-config --cflags` `xml2-config --cflags` LIBS += `sdl-config --libs` `xml2-config --libs` -lSDL_image -Wl,-framework,OpenGL diff -r 129979e7d5c7 -r 9f9d51b60062 TaskManager/Test/test_render/SceneGraphRoot.cc --- a/TaskManager/Test/test_render/SceneGraphRoot.cc Wed Oct 21 19:03:46 2009 +0900 +++ b/TaskManager/Test/test_render/SceneGraphRoot.cc Wed Oct 21 21:00:48 2009 +0900 @@ -171,9 +171,10 @@ __FUNCTION__, __LINE__, sg->name); } -void +const char * //SceneGraphRoot::createFromXMLmemory(TaskManager *manager, const char *xmlfile) -SceneGraphRoot::createFromXMLmemory(TaskManager *manager, st_mmap_t mmap_t) +//SceneGraphRoot::createFromXMLmemory(TaskManager *manager, st_mmap_t mmap_t) +SceneGraphRoot::createFromXMLmemory(TaskManager *manager, char *data, int len) { xmlDocPtr doc; xmlNodePtr cur; @@ -182,9 +183,11 @@ // size は取れるはず、テスト用に mmap したデータを使う /* パース DOM生成 */ //doc = xmlParseFile(xmlfile); - int size = (int)mmap_t.size; - char *xmldata = (char *)mmap_t.file_mmap; - doc = xmlParseMemory(xmldata, size); + //int size = (int)mmap_t.size; + //char *xmldata = (char *)mmap_t.file_mmap; + //doc = xmlParseMemory(xmldata, size); + + doc = xmlParseMemory(data, len); cur = xmlDocGetRootElement(doc); /* ?? */ @@ -206,6 +209,10 @@ } xmlFreeDoc(doc); + + // 1つの xml file に object は1つだと想定しているので、だめだこりゃ + + return tmp->name; } /* 生成された SceneGraph のを sglist に登録 */ @@ -218,7 +225,7 @@ } SceneGraphPtr -SceneGraphRoot::createSceneGraph(char *name) +SceneGraphRoot::createSceneGraph(const char *name) { SceneGraphPtr src; SceneGraphPtr p; diff -r 129979e7d5c7 -r 9f9d51b60062 TaskManager/Test/test_render/SceneGraphRoot.h --- a/TaskManager/Test/test_render/SceneGraphRoot.h Wed Oct 21 19:03:46 2009 +0900 +++ b/TaskManager/Test/test_render/SceneGraphRoot.h Wed Oct 21 21:00:48 2009 +0900 @@ -63,10 +63,11 @@ /* User API */ void createFromXMLfile(TaskManager *manager, const char *); //void createFromXMLmemory(TaskManager *manager, const char *xml); - void createFromXMLmemory(TaskManager *manager, st_mmap_t mmap_t); + //void createFromXMLmemory(TaskManager *manager, st_mmap_t mmap_t); + const char *createFromXMLmemory(TaskManager *manager, char *data, int len); SceneGraphPtr createSceneGraph(int id); SceneGraphPtr createSceneGraph(void); - SceneGraphPtr createSceneGraph(char *name); + SceneGraphPtr createSceneGraph(const char *name); void setSceneData(SceneGraphPtr sg); Pad *getController(void); SceneGraphIteratorPtr getIterator(void); diff -r 129979e7d5c7 -r 9f9d51b60062 TaskManager/Test/test_render/lindaapi.cc --- a/TaskManager/Test/test_render/lindaapi.cc Wed Oct 21 19:03:46 2009 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,627 +0,0 @@ -// $Id: lindaapi.c,v 1.9 2006/04/03 08:17:11 kono Exp $ -// - -/*---------------------------------------------------------------------- - インクルードファイル読み込み -----------------------------------------------------------------------*/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "lindaapi.h" - -#define TIMEDELTA 10 -#if 0 -#define PSX_Debug(deb) (putchar(PS_DEB)),\ - (printf deb ),\ - (putchar(PS_DEB)) -#define DEB(a) -#else -#define PSX_Debug(deb) -#define DEB(a) /* a */ -#endif - -COMMAND *q_top, *q_end; -REPLY *reply, *r_end; - -int qsize, ps; -unsigned short seq; - -#ifdef COUNT_PACKET -// print packet count message per PRINT_INTERVAL sec -#define PRINT_INTERVAL 4 - -/*-------------------------------------------------------------------/ - void - count_packet (char type): - パケットの送受信カウントする - - 引き数: - type - 送信、受信 (char型: s,r) -/-------------------------------------------------------------------*/ -void count_packet(char type) -{ - static int send_packet=-1,receive_packet=0; - static struct timeval start,now,previous; - - if (out_packet == -1) { - gettimeofday(&start,NULL); - gettimeofday(&previous,NULL); - send_packet = 0; - printf("packet\tout\tread\t\ttime\n"); - } - - if (type == 's') { - send_packet++; - } else if (type == 'r') { - receive_packet++; - } else { - fprintf(stderr,"No type in count_packet function\n"); - return; - } - - gettimeofday(&now,NULL); - if ((now.tv_sec-previous.tv_sec) > PRINT_INTERVAL) { - printf("log\t%d\t%d\t%ld\n", - send_packet,receive_packet,now.tv_sec-start.tv_sec); - fflush(stdout); - - previous.tv_sec = now.tv_sec; - send_packet = receive_packet = 0; - } -} -#endif - - -#define unix_open open -#define unix_read_w read -/*-------------------------------------------------------------------/ - int - unix_read (int fd, char *buf, unsigned int size): - サーバからTUPLEを読みこむ。 - 現在は使われていない。 - - 引き数: - fd - サーバのファイルディスクリプタ - buf - 受け取るデータの格納場所(TUPLEヘッダ含む) - size - bufのbyte数 - 返り値: - 読みこんだbyte数 -/-------------------------------------------------------------------*/ -int -unix_read(int fd,char *buf,unsigned int size) { - int len,a,i; - if(read(fd,buf,INT_SIZE)!=INT_SIZE) { // INT_SIZE is sizeof(int) - fprintf(stderr, "read error! on fd:%d len=%d %s\n", fd, - *(unsigned int*)&buf[0], - strerror(errno)); - exit(1); - } - len = ntohl(*(unsigned int*)&buf[0]); - if((unsigned int)len>size) len=(int)size; - for(a=0;ah_addr))->s_addr; - if (serv_addr.sin_family == AF_INET) { - int tmp = 1; - setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, - (char *) &tmp, sizeof (int)); - } - fprintf(stdout,"connecting ... %d\n", ntohs(serv_addr.sin_port)); - if (connect(fd, (struct sockaddr *)&serv_addr,sizeof(serv_addr)) == FAIL){ - fprintf(stderr,"connection error! errno :%d %s\n", errno, - strerror(errno)); - close(fd); - return(-1); - } - } - - ps = fd; - fprintf(stdout," connect middle server %d\n", fd); - q_end = q_top = NULL; - r_end = reply = NULL; - qsize = seq = 0; - seq = 120; - return ps; -} - -/*-------------------------------------------------------------------/ - int - psx_out (unsigned int id, unsigned char *data, unsigned int size): - outコマンドをCOMMANDキューへ溜める。 - - 引き数: - id - TUPLE SpaceのID - data - 送信するデータ - size - dataのサイズ - 返り値: - シーケンス番号 -/-------------------------------------------------------------------*/ -int -psx_out(unsigned int id, unsigned char *data, unsigned int size){ - if (psx_queue(id, size, data, 'o', NULL, NULL) == FAIL){ - return(FAIL); - } - DEB( fprintf(stdout, "psx_out: size = %d, command = %s\n", - q_end->size, q_end->command+LINDA_HEADER_SIZE)); - return(seq); -} - -/*-------------------------------------------------------------------/ - int - psx_ld (unsigned int id, char mode, void(*callback)(char*,void*), - void * obj): - in,read,waitなどの受信コマンドをCOMMANDキューへ溜める。 - psx_in,psx_rd,psx_wait_rdなどに置き換えられている。 - - 引き数: - id - TUPLE SpaceのID - mode - i,r,w の文字を取り、各々in,read,waitを表している。 - callback - コールバックを使用する場合の関数へのポインタ。 - 使用しない場合はNULLをいれる。 - obj - コールバックで用いる関数の引き数。 - 返り値: - psx_queue内でmallocされたREPLY構造体へのポインタ -/-------------------------------------------------------------------*/ -int -psx_ld(unsigned int id, char mode,void(*callback)(char *,void *),void * obj){ - int r; - if ((r=psx_queue(id, 0, NULL, mode, callback, obj)) == FAIL){ - return(FAIL); - } - return(r); -} - -/*-------------------------------------------------------------------/ - unsigned char * - psx_reply (int seq): - サーバから答えが来たデータを返す。 - - 引き数: - seq - psx_ld()が返した値。 - 返り値: - seqに対応したデータを返す。データをまだ受信していない場合は - NULLを返す。 -/-------------------------------------------------------------------*/ -unsigned char * -psx_reply(int seq){ - REPLY *p, *q; - char *ans; - - DEB(fprintf(stdout, "psx_reply: search of seq = %d\n", seq)); - PSX_Debug(("psx_reply: seq %d", seq)); - for(q = NULL,p = reply;p;q = p,p = p->next){ - if (p->seq == (unsigned)seq){ - DEB(fprintf(stdout, "psx_reply: match of seq = %d\n", seq)); - if (p->mode == '!'){ - ans = (char *)p->answer; - if (q == NULL){ - reply = p->next; - if(p==r_end) { - r_end = p->next; - } - } else { - q->next = p->next; - if(p==r_end) { - r_end = q; - } - } - PSX_Debug(("psx_reply: reply %x r_end %x p %x q %x",reply,r_end,p,q)); - free(p); - DEB( for(p=reply;p;p=p->next) { PSX_Debug(("psx_queue dump: seq %d mode %c %x %x",p->seq,p->mode,p,p->next))}); - DEB( fprintf(stdout, "psx_reply: returned answer = %s\n", ans)); - PSX_Debug(("psx_reply: answer %s",ans)); - return((unsigned char *)ans); - } else { - if (p->mode == '?'){ - DEB(fprintf(stdout, "psx_reply: don't accept anser\n")); - return(NULL); - } - } - } - - } - PSX_Debug(("psx_reply: no match seq %d",seq)); - DEB(fprintf(stdout, "psx_reply: no match of seq\n")); - return(NULL); -} - -/*-------------------------------------------------------------------/ - void - psx_sync_n (): - サーバとデータの送受信をする。COMMANDキューに溜まったデータを - 送信し、サーバから送られて来たデータを対応するREPLYへいれる。 -/-------------------------------------------------------------------*/ -void -psx_sync_n(){ - int acount; - COMMAND *c, *t; - - fd_set tmp, fds; - struct timeval timeout; - timeout.tv_sec=0; - timeout.tv_usec=TIMEDELTA * 1000; - - acount = 0; - while (q_top != NULL){ - c = q_top; - unix_write_w(ps, c->command, c->size); - free(c->command); - t = c->next; - free(c); - q_top = c = t;qsize--; - } - FD_ZERO(&fds); - FD_SET(ps, &fds); - tmp = fds; - while(select(32, &tmp, NULL, NULL, &timeout) > 0) { - if(FD_ISSET(ps, &tmp)) { - unix_chkserv(); - } - } -} - -/*-------------------------------------------------------------------/ - int - psx_queue (unsigned int id, unsigned int size, unsigned char *data, - char mode, void(*callback)(char*,void*), void * obj): - out,in,read,waitなどのコマンドをCOMMANDキューに溜める。データを - 受信するコマンド(in,read,wait)のときは受け取ったときにデータを - 格納するREPLY構造体を作る。 - - 引き数: - id - アクセスするTUPLE SpaceのID - size - dataのサイズ - data - 送信するデータ。受信時はNULL。 - mode - コマンドのモード(out,in,read,wait は各々char型: o,i,r,w) - callback - コールバックを使用する場合の関数へのポインタ。 - 使用しない場合はNULL。 - obj - コールバックで用いる関数に引き渡すデータ。 - 返り値: - 成功した場合 - mallocしたREPLY構造体へのポインタ。outの場合は - 0が返る。 - 失敗した場合 - FAIL(-1)が返る。 -/-------------------------------------------------------------------*/ -int -psx_queue(unsigned int id, unsigned int size, unsigned char *data, char mode, - void(*callback)(char *,void *), void * obj){ - REPLY *p; - COMMAND *c; - - seq++; - if (qsize >= MAX_QUEUE){ -// PSX_Debug(("max queue: qsize=%d",qsize)); - psx_sync_n(); - } - - for(p=reply;p;p=p->next){ - if(p->seq == seq){ - printf("same seq number: %d\n",seq); - } - } - - if (q_top == NULL){ - if ((q_top = (COMMAND *) malloc (sizeof(COMMAND))) == NULL){ - return(FAIL); - } - c = q_end = q_top; - } else { - if ((q_end->next = (COMMAND *) malloc (sizeof(COMMAND))) == NULL){ - return(FAIL); - } - c = q_end; - q_end = q_end->next; - } - - // size は DATASIZE - if ((q_end->command = (unsigned char *) malloc(size+LINDA_HEADER_SIZE)) == NULL){ - free(q_end); - c->next = NULL; - return(FAIL); - } - - if (mode != 'o'){ - if (reply == NULL){ - if ((reply = (REPLY *) malloc (sizeof(REPLY))) == NULL){ - return(FAIL); - } - p = r_end = reply; p->next = NULL; - } else { - if ((r_end->next = (REPLY *) malloc (sizeof(REPLY))) == NULL){ - return(FAIL); - } - p = r_end->next; r_end = p; p->next = NULL; - } - p->mode = '?'; - p->seq = (int)p; // 構造体のアドレスで識別 - p->callback = callback; - p->obj = obj; - PSX_Debug(("psx_queue: seq %d reply %x p %x r_end %x",seq,reply,p,r_end)); - }else{ - p=0; - } - q_end->command[LINDA_MODE_OFFSET] = mode; - - q_end->command[LINDA_ID_OFFSET] = id >> 8; - q_end->command[LINDA_ID_OFFSET+1] = id & 0xff; - - q_end->command[LINDA_SEQ_OFFSET] = ((int)p>>24) & 0xff; - q_end->command[LINDA_SEQ_OFFSET+1] = ((int)p>>16) & 0xff; - q_end->command[LINDA_SEQ_OFFSET+2] = ((int)p>>8) & 0xff; - q_end->command[LINDA_SEQ_OFFSET+3] = ((int)p) & 0xff; - - q_end->command[LINDA_DATA_LENGTH_OFFSET] = (size>>24) & 0xff; - q_end->command[LINDA_DATA_LENGTH_OFFSET+1] = (size>>16) & 0xff; - q_end->command[LINDA_DATA_LENGTH_OFFSET+2] = (size>>8) & 0xff; - q_end->command[LINDA_DATA_LENGTH_OFFSET+3] = (size) & 0xff; - - q_end->size = size+LINDA_HEADER_SIZE; /* command size */ - q_end->next = NULL; qsize++; - if (data && size>0) memcpy(q_end->command+LINDA_HEADER_SIZE, data, size); - return((int)p); -} - -/*-------------------------------------------------------------------/ - void - unix_chkserv (): - サーバからデータ(TUPLE)を受け取る。REPLY構造体にコールバック関数 - が指定されていればその関数を実行し、REPLY構造体をキューから取り - 除く。コールバック関数が指定されていなければREPLY構造体にデータ - を引き渡す。 -/-------------------------------------------------------------------*/ -void -unix_chkserv(){ - int i,k,pkt,npkt; - REPLY *r,*prev; - int a; - unsigned char * tuple = 0; - - if((i=read(ps,&npkt,INT_SIZE))<0) { - fprintf(stderr, "size read error! on fd:%d %s\n", ps, - strerror(errno)); - exit(1); - } - pkt = ntohl(npkt); - DEB(printf("pkt: %d\n",pkt)); - DEB(fprintf(stdout, "psx_chkserv: queue number: %d , size = %d\n", i, pkt)); - if((tuple = (unsigned char *)malloc(pkt))==NULL){ - fprintf(stderr,"allocate error! errno :%d %s",errno,strerror(errno)); - exit(1); - } - for(a=0;anext) { - PSX_Debug(printf("psx_queue dump: seq %d mode %c %x %x",p->seq,p->mode,p,p->next)); - }) - - for(prev = NULL,r = reply; r; prev = r,r = r->next){ - DEB(fprintf(stdout,"seq: %d\n",r->seq);) - if (r->seq == (unsigned int)k){ - if(r->callback){ // call callback function - (*r->callback)((char *)tuple,r->obj); - if (prev == NULL){ - reply = r->next; - if(r == r_end) { - r_end = r->next; - } - } else { - prev->next = r->next; - if(r == r_end) { - r_end = prev; - } - } - free(r); - }else{ // normal reply - PSX_Debug(("psx_chkserv: copy answer r %x seq %d",r,k)); - r->answer = tuple; - r->mode = '!'; - } - break; - } - } - tuple = 0; - if (!r){ - DEB(fprintf(stdout, "unix_chkserv: accepted seq %d does not match. \n",k)); - } -} - -void psx_free(char * tuple) -{ -// free(tuple - LINDA_HEADER_SIZE); - free(tuple); -} - -/*-------------------------------------------------------------------/ - int - get_int(unsigned char * tuple, int offset): - TUPLEのヘッダに格納された int型 のデータを得るための関数 - psx_get_datalength() と psx_get_seq() から呼ばれる。 - - 引き数: - tuple - ヘッダ情報も含んだTUPLE。psx_reply()で得たものでもいい。 - offset - 取りだすデータのオフセット。LINDA_DATA_LENGTH_OFFSET - か LINDA_SEQ_OFFSET。 - - 返り値: - 指定したオフセットに格納されていた数値(int型) -/-------------------------------------------------------------------*/ -static -int get_int(unsigned char * tuple, int offset){ - int i; - i = (tuple[offset] <<24) + - (tuple[offset+1]<<16) + - (tuple[offset+2]<<8) + - (tuple[offset+3]); - return i; -} - -int psx_get_datalength(unsigned char * tuple){ - return get_int(tuple,LINDA_DATA_LENGTH_OFFSET); -} - -unsigned char *psx_get_data(unsigned char * tuple){ - return tuple+LINDA_HEADER_SIZE; -} - -int psx_get_seq(unsigned char * tuple){ - return get_int(tuple,LINDA_SEQ_OFFSET); -} - -short psx_get_id(unsigned char * tuple){ - short s; - s = tuple[LINDA_ID_OFFSET] * 256 + - tuple[LINDA_ID_OFFSET+1]; - return s; -} - -char psx_get_mode(unsigned char * tuple){ - return tuple[LINDA_MODE_OFFSET]; -} - - -/* end */ diff -r 129979e7d5c7 -r 9f9d51b60062 TaskManager/Test/test_render/lindaapi.h --- a/TaskManager/Test/test_render/lindaapi.h Wed Oct 21 19:03:46 2009 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -// $Id: lindaapi.h,v 1.8 2005/12/21 07:29:38 yasumura Exp $ -// - -/*---------------------------------------------------------------------- - ޥ -----------------------------------------------------------------------*/ - -#define FAIL (-1) - -#define PS_DEB 0xf8 - -#define MAX_QUEUE 1024 - -#define INT_SIZE 4 // Byte = sizeof(int) - -/*---------------------------------------------------------------------- - ѥåȥեޥå - char short int int - Mode + ID + Seq + Data_len + Padding + Data - 0 1 3 7 11 12 -----------------------------------------------------------------------*/ - -#define LINDA_MODE_OFFSET 0 -#define LINDA_ID_OFFSET 1 -#define LINDA_SEQ_OFFSET 3 -#define LINDA_DATA_LENGTH_OFFSET 7 -#define LINDA_TID_OFFSET 11 -#define LINDA_HEADER_SIZE 12 - -/*---------------------------------------------------------------------- - ¤ -----------------------------------------------------------------------*/ -typedef struct psx_reply{ - unsigned char *answer; - unsigned int seq; - struct psx_reply *next; - char mode; - void(*callback)(char * tuple, void * obj); - void * obj; -} REPLY, *REPLY_PTR; - -typedef struct command_queue{ - unsigned char *command; - struct command_queue *next; - unsigned int size; -} COMMAND, *COMMAND_PTR; - -/*---------------------------------------------------------------------- - Ūؿƥץ졼 -----------------------------------------------------------------------*/ - -int start_linda(char *hostname); -void unix_chkserv(); -extern void psx_free(char *tuple); - -int psx_out(unsigned int id, unsigned char *data, unsigned int size); -int psx_ld(unsigned int id, char mode, void(*callback)(char *,void *),void * obj); - -#define psx_in(id) psx_ld(id, 'i', NULL, NULL) -#define psx_rd(id) psx_ld(id, 'r', NULL, NULL) -#define psx_ck(id) psx_ld(id, 'c', NULL, NULL) -#define psx_wait_rd(id) psx_ld(id, 'w', NULL, NULL) - -#define psx_callback_in(id,callback,obj) psx_ld(id, 'i', callback, obj) -#define psx_callback_rd(id,callback,obj) psx_ld(id, 'r', callback, obj) -#define psx_callback_ck(id,callback,obj) psx_ld(id, 'c', callback, obj) -#define psx_callback_wait_rd(id,callback,obj) psx_ld(id, 'w', callback, obj) - -unsigned char *psx_reply(int seq); -void psx_sync_n(); -//void psx_free(unsigned char *); -int psx_queue(unsigned int id, unsigned int size, unsigned char *data, char mode, - void(*callback)(char *,void *),void * obj); -int psx_get_datalength(unsigned char *); -unsigned char *psx_get_data(unsigned char *); -int psx_get_seq(unsigned char *); -short psx_get_id(unsigned char *); -char psx_get_mode(unsigned char *); - -int unix_open(); /* UNIX ̿ߤ */ -int unix_read(int,char *,unsigned int); /* UNIX ɤ߹ */ -int unix_read_w(int,char *,int); /* UNIX ɤ߹(non wait) */ -int unix_write(int,unsigned char *,unsigned int);/* UNIX ؽ񤭹 */ -int unix_write_w(int,unsigned char *,unsigned int);/* UNIX ؽ񤭹(non wait) */ -int send_able(); /* ɤ߽񤭤Ǥѥåȿ */ - diff -r 129979e7d5c7 -r 9f9d51b60062 TaskManager/Test/test_render/lindaapi/Makefile --- a/TaskManager/Test/test_render/lindaapi/Makefile Wed Oct 21 19:03:46 2009 +0900 +++ b/TaskManager/Test/test_render/lindaapi/Makefile Wed Oct 21 21:00:48 2009 +0900 @@ -1,4 +1,4 @@ -CC=gcc +CC=g++ AR=ar CFLAGS=-g -O2 -Wall #FLAGS=-Wall -DDEBUG @@ -12,7 +12,7 @@ ldserv : $(LINDADIR)/ldserv.c $(CC) $(FLAGS) -g -o ldserv $(LINDADIR)/ldserv.c -.c.o: +.cc.o: $(CC) $(CFLAGS) -c $^ -o $@ liblindaapi.a : lindaapi.o diff -r 129979e7d5c7 -r 9f9d51b60062 TaskManager/Test/test_render/lindaapi/lindaapi.h --- a/TaskManager/Test/test_render/lindaapi/lindaapi.h Wed Oct 21 19:03:46 2009 +0900 +++ b/TaskManager/Test/test_render/lindaapi/lindaapi.h Wed Oct 21 21:00:48 2009 +0900 @@ -54,7 +54,7 @@ extern void init_linda(void); extern int open_linda(char *hostname, int port); extern int close_linda(int tspace_id); - +extern int open_linda_java(char * hostname, int port); extern void psx_free(void*); extern unsigned char *psx_reply(int seq);