예제
본 장에서는 C 언어용 클라이언트, 서버와 JAVA 언어용 클라이언트 예제를 설명한다.
1. 클라이언트
각 함수를 모두 사용하는 예제이다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <usrinc/tmaxapi.h>
void tperror(char *msg)
{
printf("%s error, [%d:%s]\n", msg, tperrno, tpstrerror(tperrno));
exit(1);
}
void tgerror(char *msg)
{
printf("%s error, [%d:%s]\n", msg, tgerrno, tgstrerror(tgerrno));
exit(1);
}
int my_callback_func(char *key, int keylen, int event_type, void *args)
{
if (event_type & TG_EVENT_DELETE_CHILD)
printf("callback key(%*s) received TG_EVENT_DELETE_CHILD event\n",keylen, key, event_type);
if (event_type & TG_EVENT_DELETE_SELF)
printf("callback key(%*s) received TG_EVENT_DELETE_SELF event\n",keylen, key, event_type);
if (event_type & TG_EVENT_CREATE_CHILD)
printf("callback key(%*s) received TG_EVENT_CREATE_CHILD event\n",keylen, key, event_type);
if (event_type & TG_EVENT_SET_SELF)
printf("callback key(%*s) received TG_EVENT_SET_SELF event\n",keylen, key, event_type,(char*)args);
if (event_type & TG_EVENT_GET_SELF)
printf("callback key(%*s) received TG_EVENT_GET_SELF event\n",keylen, key, event_type);
if (event_type & TG_EVENT_LOCK)
printf("callback key(%*s) received TG_EVENT_LOCK event\n",keylen, key, event_type);
if (event_type & TG_EVENT_RECOVERED)
printf("callback key(%*s) received TG_EVENT_RECOVERED event\n",keylen, key, event_type);
return 0;
}
int main(int argc, char *argv[])
{
TG_WATHCER_CALLBACK callback;
TPSTART_T *start;
char *sndbuf, *rcvbuf, sndbuf2[1024], rcvbuf2[1024];
int sndlen, rcvlen;
char *key, *key1,*lock_key, *queue_key, *parent_key;
int keylen,keylen1, lock_keylen, queue_keylen, parent_keylen;
int nth, count, timeout;
TG_KEYLIST_T keylist;
TG_KEYINFO_T keyinfo;
tg_bulk_handler_t *lptr;
tg_key_browser_t *browser;
int type;
if (tmaxreadenv("tmax.env", "TMAX") < 0)
tperror("tmaxreadenv");
start = (TPSTART_T*)tpalloc("TPSTART", NULL, 0);
if (start == NULL)
tperror("tpalloc");
if (tpstart(start) < 0)
tperror("tpstart");
key = "/keytest/mee";
key1 = "/key1/message";
keylen = strlen(key);
keylen1 = strlen(key1);
lock_key = "/key/lock";
lock_keylen = strlen(lock_key);
queue_key = "/data01";
queue_keylen = strlen(queue_key);
parent_key = "/key/message";
//parent_key = "/key11";
parent_keylen = strlen(parent_key);
/* tmax_grid_create */
if (tmax_grid_create(key, keylen, TG_TEMPORARY) < 0)
tgerror("tmax_grid_create");
if (tmax_grid_create(key1, keylen1, TG_TEMPORARY) < 0)
tgerror("tmax_grid_create");
#if _CASE1
/* tmax_grid_is_exist */
if (tmax_grid_is_exist(key, keylen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_is_exist");
printf("tmax_grid_is_exis(%s) exist\n",key);
if (tmax_grid_is_exist(key1, keylen1, TG_NOFLAGS) < 0)
tgerror("tmax_grid_is_exist");
printf("tmax_grid_is_exis(%s) exist\n",key1);
/* tmax_grid_set_watcher */
callback = my_callback_func;
if (tmax_grid_set_watcher(key, keylen, callback, NULL, (TG_WATCHER_PERSISTENT |
TG_EVENT_SET_SELF)) < 0)
tgerror("tmax_grid_set_watcher");
printf("tmax_grid_set_watcher(%s) ok!\n",key);
#endif
#if _CASE2
/* tmax_grid_set */
if ((sndbuf = tpalloc("STRING", NULL, 1024)) == NULL)
tperror("tpalloc sndbuf");
sndlen = sprintf(sndbuf, "get pid(%d) data(%s)", getpid(),argv[0]);
if (tmax_grid_set(key, keylen, 0, sndbuf, sndlen, TG_NOFLAGS) < 0){
tgerror("tmax_grid_set key");
tpfree(sndbuf);
}
/* tmax_grid_get */
if ((rcvbuf =tpalloc("STRING", NULL, 1024)) == NULL)
tperror("tpalloc rcvbuf");
if(tmax_grid_get(key, keylen, &type , &rcvbuf, &rcvlen, TG_GET_PEEK) < 0){
tgerror("tmax_grid_get");
tpfree(rcvbuf);
tpfree(sndbuf);
exit(1);
}
printf("recv data = [%s] len= [%d]\n", rcvbuf,rcvlen);
tpfree(sndbuf);
tpfree(rcvbuf);
#endif
#if _CASE3
/* tmax_grid_set */
sndlen = sprintf(sndbuf2, "get2 pid(%d) data(%s)", getpid(),argv[0]);
if (tmax_grid_set(key1, keylen1,TMAX_GRID_STRING , (void *)sndbuf2, sndlen, TG_NOFLAGS) < 0){
tgerror("tmax_grid_set key1");
}
/* tmax_grid_get2 */
type = TMAX_GRID_STRING;
if (tmax_grid_get2(key1, keylen1, &type, &rcvbuf2, &rcvlen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_get2");
printf("recv data = [%s] len= [%d]\n", rcvbuf2,rcvlen);
#endif
#if _CASE4
if (tmax_grid_create(lock_key, lock_keylen, TG_LOCK) < 0)
tgerror("tmax_grid_create");
/* grid lock set */
printf("lock exist\n");
if (tmax_grid_is_exist(lock_key, lock_keylen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_is_exist");
printf("tmax_grid_lock\n");
/* tmax_grid_lock */
if (tmax_grid_lock(lock_key, lock_keylen, timeout, TG_SHARED_LOCK) < 0)
tgerror("tmax_grid_lock");
printf("tmax_grid_lock ok key[%s]!!\n",lock_key);
/*if (tmax_grid_lock(lock_key, lock_keylen, timeout, TG_EXCLUSIVE_LOCK) < 0)
tgerror("tmax_grid_lock");
printf("tmax_grid_lock ok key[%s]!!\n",lock_key);
*/
system("echo tgli |tmadmin");
/* tmax_grid_unlock */
if (tmax_grid_unlock(lock_key, lock_keylen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_unlock");
printf("tmax_grid_unlock ok key[%s]!!\n",lock_key);
sleep(1);
system("echo tgli |tmadmin");
if (tmax_grid_lock(lock_key, lock_keylen, timeout, TG_EXCLUSIVE_LOCK) < 0)
tgerror("tmax_grid_lock");
printf("tmax_grid_lock ok key[%s]!!\n",lock_key);
system("echo tgli |tmadmin");
/* tmax_grid_unlock */
if (tmax_grid_unlock(lock_key, lock_keylen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_unlock");
printf("tmax_grid_unlock ok key[%s]!!\n",lock_key);
sleep(1);
system("echo tgli |tmadmin");
#endif
#if CASE5
if (tmax_grid_create(queue_key, queue_keylen, TG_QUEUE) < 0)
tgerror("tmax_grid_create");
/* tmax_grid_dequeue */
if ((sndbuf = (char *)tpalloc("STRING", NULL, 1024)) == NULL)
tperror("tpalloc sndbuf");
sndlen = sprintf(sndbuf, "pid(%d) date()", getpid());
type = TMAX_GRID_STRING;
if (tmax_grid_enqueue(queue_key, queue_keylen,0, sndbuf, sndlen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_enqueue");
if ((rcvbuf = (char *)tpalloc("STRING", NULL, 1024)) == NULL)
tperror("tpalloc rcvbuf");
type=TMAX_GRID_STRING;
if (tmax_grid_dequeue(queue_key, queue_keylen, &type, &rcvbuf, &rcvlen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_dequeue");
printf("tmax_grid_dequeue recv data = [%s]\n", rcvbuf);
tpfree(sndbuf);
tpfree(rcvbuf);
/* tmax_grid_dequeue2*/
sndlen = sprintf(sndbuf2, "get2 pid(%d) ", getpid());
if (tmax_grid_enqueue(queue_key, queue_keylen,TMAX_GRID_STRING, (void *)sndbuf2, sndlen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_enqueue");
type=TMAX_GRID_STRING;
if (tmax_grid_dequeue2(queue_key, queue_keylen, &type, &rcvbuf2, &rcvlen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_dequeue");
printf("tmax_grid_dequeue2 recv data = [%s]\n", rcvbuf2);
#endif
#if _CASE6
if (tmax_grid_create(parent_key, parent_keylen, TG_PERSISTENT) < 0)
tgerror("tmax_grid_create");
/* tmax_grid_get_children */
keylist = tmax_grid_get_children(parent_key, parent_keylen, &count);
if (keylist == NULL)
tgerror("tmax_grid_get_children");
for (nth = 0; nth < count; nth++) {
if (tmax_grid_get_child_with_index(keylist, nth, &keyinfo) == -1)
break;
printf("nth(%d) key(%*s) datalen(%d)\n", nth, keyinfo.keylen,
keyinfo.key, keyinfo.datalen);
}
tmax_grid_keylist_free(keylist);
printf("keylist_free = [%s]\n",parent_key);
system("echo tgi|tmadmin");
printf("destroy children [%s]\n\n",parent_key);
if (tmax_grid_destroy(parent_key, parent_keylen, TG_CHILDREN) < 0)
tgerror("tmax_grid_destroy");
sleep(1);
system("echo tgi|tmadmin");
#endif
#if _CASE7
printf("tg_bulk_handler_t\n");
lptr=(tg_bulk_handler_t *)malloc(sizeof(tg_bulk_handler_t));
printf("tg_bulk_handler init\n");
if(tmax_grid_init_bulk_handle(lptr)<0)
tgerror("tmax_grid_init_bulk_handle");
if ((sndbuf = (char *)tpalloc("STRING", NULL, 1024)) == NULL)
tperror("tpalloc sndbuf");
sndlen = sprintf(sndbuf, "(%d) date()", getpid());
printf("grig_set_bulk_handle\n");
if(tmax_grid_set_bulk_handle(lptr,key,strlen(key), -1,0,sndbuf,sndlen)<0)
tgerror("tmax_grid_set_bulk_handle");
sndlen = sprintf(sndbuf2, "13(%d) ", getpid());
type=TMAX_GRID_STRING;
printf("grig_set_bulk_handle\n");
if(tmax_grid_set_bulk_handle(lptr,key1,strlen(key1),type,0,(void *)sndbuf2,sndlen)<0)
tgerror("tmax_grid_set_bulk_handle");
printf(" bulk count = %d \n",lptr->count);
printf("grig_set_bulk\n");
if(tmax_grid_bulk_set(lptr,0)<0)
tgerror("tmax_grid_bulk_set");
if(tmax_grid_bulk_get(lptr,0)<0)
tgerror("tmax_grid_bulk_get");
printf("get bulk data = %s , key = %s \n",lptr->tail->data, lptr->tail->key);
system("\necho tgi | tmadmin");
#endif
#if _CASE8
browser=(tg_key_browser_t *)malloc(sizeof(tg_key_browser_t));
tmax_grid_init_key_browser(browser,key,strlen(key));
rcvlen=tmax_grid_get_next(browser,0);
printf("browser keylen = %d \n",rcvlen);
printf("start_key = %s , start_key_len =%d\n", browser->start_key,browser->start_key_len);
printf("next_key = %s , next_key_len =%d\n", browser->next_key,browser->next_key_len);
count=tmax_grid_count(0);
printf("tmax_grid conut = %d \n",count);
system("\necho tgi | tmadmin");
#endif
tpend();
return 0;
}
2. 서버
TmaxGridTEST란 서비스가 호출되면 각 TmaxGrid API를 호출해 보는 예제이다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <usrinc/tmaxapi.h>
void tperror(char *msg)
{
printf("%s error, [%d:%s]\n", msg, tperrno, tpstrerror(tperrno));
tpreturn(TPFAIL, tperrno, NULL, 0, TPNOFLAGS);
}
void tgerror(char *msg)
{
printf("%s error, [%d:%s]\n", msg, tgerrno, tgstrerror(tgerrno));
tpreturn(TPFAIL, tgerrno, NULL, 0, TPNOFLAGS);
}
int my_callback_func(char *key, int keylen, int event_type, void *args)
{
if (event_type & TG_EVENT_DELETE_CHILD)
printf("callback key(%.*s) received TG_EVENT_DELETE_CHILD event\n",
keylen, key, event_type);
if (event_type & TG_EVENT_DELETE_SELF)
printf("callback key(%.*s) received TG_EVENT_DELETE_SELF event\n",
keylen, key, event_type);
if (event_type & TG_EVENT_CREATE_CHILD)
printf("callback key(%.*s) received TG_EVENT_CREATE_CHILD event\n",
keylen, key, event_type);
if (event_type & TG_EVENT_SET_SELF)
printf("callback key(%.*s) received TG_EVENT_SET_SELF event\n",
keylen, key, event_type);
if (event_type & TG_EVENT_GET_SELF)
printf("callback key(%.*s) received TG_EVENT_GET_SELF event\n",
keylen, key, event_type);
if (event_type & TG_EVENT_LOCK)
printf("callback key(%.*s) received TG_EVENT_LOCK event\n",
keylen, key, event_type);
if (event_type & TG_EVENT_RECOVERED)
printf("callback key(%.*s) received TG_EVENT_RECOVERED event\n",
keylen, key, event_type);
return 0;
}
TmaxGridTEST(TPSVCINFO *msg)
{
T TG_WATHCER_CALLBACK callback;
TPSTART_T *start;
char *sndbuf, *rcvbuf, sndbuf2[1024], rcvbuf2[1024];
int sndlen, rcvlen;
char *key, *key1,*lock_key, *queue_key, *parent_key;
int keylen,keylen1, lock_keylen, queue_keylen, parent_keylen;
int nth, count, timeout;
TG_KEYLIST_T keylist;
TG_KEYINFO_T keyinfo;
tg_bulk_handler_t *lptr;
tg_key_browser_t *browser;
int type;
if (tmaxreadenv("tmax.env", "TMAX") < 0)
tperror("tmaxreadenv");
start = (TPSTART_T*)tpalloc("TPSTART", NULL, 0);
if (start == NULL)
tperror("tpalloc");
if (tpstart(start) < 0)
tperror("tpstart");
key = "/keytest/mee";
key1 = "/key1/message";
keylen = strlen(key);
keylen1 = strlen(key1);
lock_key = "/key/lock";
lock_keylen = strlen(lock_key);
queue_key = "/data01";
queue_keylen = strlen(queue_key);
parent_key = "/key/message";
//parent_key = "/key11";
parent_keylen = strlen(parent_key);
/* tmax_grid_create */
if (tmax_grid_create(key, keylen, TG_TEMPORARY) < 0)
tgerror("tmax_grid_create");
if (tmax_grid_create(key1, keylen1, TG_TEMPORARY) < 0)
tgerror("tmax_grid_create");
#if _CASE1
/* tmax_grid_is_exist */
if (tmax_grid_is_exist(key, keylen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_is_exist");
printf("tmax_grid_is_exis(%s) exist\n",key);
if (tmax_grid_is_exist(key1, keylen1, TG_NOFLAGS) < 0)
tgerror("tmax_grid_is_exist");
printf("tmax_grid_is_exis(%s) exist\n",key1);
/* tmax_grid_set_watcher */
callback = my_callback_func;
if (tmax_grid_set_watcher(key, keylen, callback, NULL, (TG_WATCHER_PERSISTENT |
TG_EVENT_SET_SELF)) < 0)
tgerror("tmax_grid_set_watcher");
printf("tmax_grid_set_watcher(%s) ok!\n",key);
#endif
#if _CASE2
/* tmax_grid_set */
if ((sndbuf = tpalloc("STRING", NULL, 1024)) == NULL)
tperror("tpalloc sndbuf");
sndlen = sprintf(sndbuf, "get pid(%d) data(%s)", getpid(),argv[0]);
if (tmax_grid_set(key, keylen, 0, sndbuf, sndlen, TG_NOFLAGS) < 0){
tgerror("tmax_grid_set key");
tpfree(sndbuf);
}
/* tmax_grid_get */
if ((rcvbuf =tpalloc("STRING", NULL, 1024)) == NULL)
tperror("tpalloc rcvbuf");
if(tmax_grid_get(key, keylen, &type , &rcvbuf, &rcvlen, TG_GET_PEEK) < 0){
tgerror("tmax_grid_get");
tpfree(rcvbuf);
tpfree(sndbuf);
exit(1);
}
printf("recv data = [%s] len= [%d]\n", rcvbuf,rcvlen);
tpfree(sndbuf);
tpfree(rcvbuf);
#endif
#if _CASE3
/* tmax_grid_set */
sndlen = sprintf(sndbuf2, "get2 pid(%d) data(%s)", getpid(),argv[0]);
if (tmax_grid_set(key1, keylen1,TMAX_GRID_STRING , (void *)sndbuf2, sndlen, TG_NOFLAGS) < 0){
tgerror("tmax_grid_set key1");
}
/* tmax_grid_get2 */
type = TMAX_GRID_STRING;
if (tmax_grid_get2(key1, keylen1, &type, &rcvbuf2, &rcvlen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_get2");
printf("recv data = [%s] len= [%d]\n", rcvbuf2,rcvlen);
#endif
#if _CASE4
if (tmax_grid_create(lock_key, lock_keylen, TG_LOCK) < 0)
tgerror("tmax_grid_create");
/* grid lock set */
printf("lock exist\n");
if (tmax_grid_is_exist(lock_key, lock_keylen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_is_exist");
printf("tmax_grid_lock\n");
/* tmax_grid_lock */
if (tmax_grid_lock(lock_key, lock_keylen, timeout, TG_SHARED_LOCK) < 0)
tgerror("tmax_grid_lock");
printf("tmax_grid_lock ok key[%s]!!\n",lock_key);
/*if (tmax_grid_lock(lock_key, lock_keylen, timeout, TG_EXCLUSIVE_LOCK) < 0)
tgerror("tmax_grid_lock");
printf("tmax_grid_lock ok key[%s]!!\n",lock_key);
*/
system("echo tgli |tmadmin");
/* tmax_grid_unlock */
if (tmax_grid_unlock(lock_key, lock_keylen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_unlock");
printf("tmax_grid_unlock ok key[%s]!!\n",lock_key);
sleep(1);
system("echo tgli |tmadmin");
if (tmax_grid_lock(lock_key, lock_keylen, timeout, TG_EXCLUSIVE_LOCK) < 0)
tgerror("tmax_grid_lock");
printf("tmax_grid_lock ok key[%s]!!\n",lock_key);
system("echo tgli |tmadmin");
/* tmax_grid_unlock */
if (tmax_grid_unlock(lock_key, lock_keylen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_unlock");
printf("tmax_grid_unlock ok key[%s]!!\n",lock_key);
sleep(1);
system("echo tgli |tmadmin");
#endif
#if CASE5
if (tmax_grid_create(queue_key, queue_keylen, TG_QUEUE) < 0)
tgerror("tmax_grid_create");
/* tmax_grid_dequeue */
if ((sndbuf = (char *)tpalloc("STRING", NULL, 1024)) == NULL)
tperror("tpalloc sndbuf");
sndlen = sprintf(sndbuf, "pid(%d) date()", getpid());
type = TMAX_GRID_STRING;
if (tmax_grid_enqueue(queue_key, queue_keylen,0, sndbuf, sndlen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_enqueue");
if ((rcvbuf = (char *)tpalloc("STRING", NULL, 1024)) == NULL)
tperror("tpalloc rcvbuf");
type=TMAX_GRID_STRING;
if (tmax_grid_dequeue(queue_key, queue_keylen, &type, &rcvbuf, &rcvlen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_dequeue");
printf("tmax_grid_dequeue recv data = [%s]\n", rcvbuf);
tpfree(sndbuf);
tpfree(rcvbuf);
/* tmax_grid_dequeue2*/
sndlen = sprintf(sndbuf2, "get2 pid(%d) ", getpid());
if (tmax_grid_enqueue(queue_key, queue_keylen,TMAX_GRID_STRING, (void *)sndbuf2, sndlen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_enqueue");
type=TMAX_GRID_STRING;
if (tmax_grid_dequeue2(queue_key, queue_keylen, &type, &rcvbuf2, &rcvlen, TG_NOFLAGS) < 0)
tgerror("tmax_grid_dequeue");
printf("tmax_grid_dequeue2 recv data = [%s]\n", rcvbuf2);
#endif
#if _CASE6
if (tmax_grid_create(parent_key, parent_keylen, TG_PERSISTENT) < 0)
tgerror("tmax_grid_create");
/* tmax_grid_get_children */
keylist = tmax_grid_get_children(parent_key, parent_keylen, &count);
if (keylist == NULL)
tgerror("tmax_grid_get_children");
for (nth = 0; nth < count; nth++) {
if (tmax_grid_get_child_with_index(keylist, nth, &keyinfo) == -1)
break;
printf("nth(%d) key(%*s) datalen(%d)\n", nth, keyinfo.keylen,
keyinfo.key, keyinfo.datalen);
}
tmax_grid_keylist_free(keylist);
printf("keylist_free = [%s]\n",parent_key);
system("echo tgi|tmadmin");
printf("destroy children [%s]\n\n",parent_key);
if (tmax_grid_destroy(parent_key, parent_keylen, TG_CHILDREN) < 0)
tgerror("tmax_grid_destroy");
sleep(1);
system("echo tgi|tmadmin");
#endif
#if _CASE7
printf("tg_bulk_handler_t\n");
lptr=(tg_bulk_handler_t *)malloc(sizeof(tg_bulk_handler_t));
printf("tg_bulk_handler init\n");
if(tmax_grid_init_bulk_handle(lptr)<0)
tgerror("tmax_grid_init_bulk_handle");
if ((sndbuf = (char *)tpalloc("STRING", NULL, 1024)) == NULL)
tperror("tpalloc sndbuf");
sndlen = sprintf(sndbuf, "(%d) date()", getpid());
printf("grig_set_bulk_handle\n");
if(tmax_grid_set_bulk_handle(lptr,key,strlen(key), -1,0,sndbuf,sndlen)<0)
tgerror("tmax_grid_set_bulk_handle");
sndlen = sprintf(sndbuf2, "13(%d) ", getpid());
type=TMAX_GRID_STRING;
printf("grig_set_bulk_handle\n");
if(tmax_grid_set_bulk_handle(lptr,key1,strlen(key1),type,0,(void *)sndbuf2,sndlen)<0)
tgerror("tmax_grid_set_bulk_handle");
printf(" bulk count = %d \n",lptr->count);
printf("grig_set_bulk\n");
if(tmax_grid_bulk_set(lptr,0)<0)
tgerror("tmax_grid_bulk_set");
if(tmax_grid_bulk_get(lptr,0)<0)
tgerror("tmax_grid_bulk_get");
printf("get bulk data = %s , key = %s \n",lptr->tail->data, lptr->tail->key);
system("\necho tgi | tmadmin");
#endif
#if _CASE8
browser=(tg_key_browser_t *)malloc(sizeof(tg_key_browser_t));
tmax_grid_init_key_browser(browser,key,strlen(key));
rcvlen=tmax_grid_get_next(browser,0);
printf("browser keylen = %d \n",rcvlen);
printf("start_key = %s , start_key_len =%d\n", browser->start_key,browser->start_key_len);
printf("next_key = %s , next_key_len =%d\n", browser->next_key,browser->next_key_len);
count=tmax_grid_count(0);
printf("tmax_grid conut = %d \n",count);
system("\necho tgi | tmadmin");
#endif
tpreturn(TPSUCCESS, 0, NULL, 0, TPNOFLAGS);
}
3. Java Client
WebtRemoteService로부터 GQ2에 해당하는 API를 호출하는 구조이다.
gq2Set 예제
import tmax.webt.WebtBuffer;
import tmax.webt.WebtConnection;
import tmax.webt.WebtException;
import tmax.webt.WebtRemoteService;
import tmax.webt.WebtServiceFailException;
public class TestGQ2 {
public static void main(String[] argv) {
WebtConnection connection = new WebtConnection("192.168.1.83", 8888, false);
connection.setHeaderType("extendedV4");
connection.connect();
WebtRemoteService service = new WebtRemoteService("GQ2", connection);
WebtBuffer buffer = service.createStringBuffer();
buffer.setString("TG_Test");
try {
int oi = service.gq2Count();
System.out.println("oi = " + oi);
service.gq2Set("/Webt12345", buffer, null);
} catch (WebtServiceFailException se) {
se.printStackTrace();
} catch (WebtException e) {
e.printStackTrace();
} finally {
connection.close();
}
}
}
gq2Get 예제
import tmax.webt.WebtBuffer;
import tmax.webt.WebtConnection;
import tmax.webt.WebtException;
import tmax.webt.WebtRemoteService;
import tmax.webt.WebtServiceFailException;
public class TestGQ2 {
public static void main(String[] argv) {
WebtConnection connection = new WebtConnection("192.168.1.83", 8888, false);
connection.setHeaderType("extendedV4");
connection.connect();
WebtRemoteService service = new WebtRemoteService("GQ2", connection);
try {
int oi = service.gq2Count();
System.out.println("oi = " + oi);
WebtBuffer buffer = service.gq2Get("/Webt12345", null);
System.out.println(buffer);
} catch (WebtServiceFailException se) {
se.printStackTrace();
} catch (WebtException e) {
e.printStackTrace();
} finally {
connection.close();
}
}
}
gq2Lock 예제
import java.io.IOException;
import tmax.webt.GQ2KeyList;
import tmax.webt.WebtBuffer;
import tmax.webt.WebtEventConnection;
import tmax.webt.WebtException;
import tmax.webt.WebtGQ2Attribute;
import tmax.webt.WebtGQ2Handler;
import tmax.webt.WebtRemoteService;
import tmax.webt.WebtServiceFailException;
public class TestGQ2 {
public static void main(String[] argv) {
WebtEventConnection connection = new WebtEventConnection("192.168.1.83", 8122,
false);
connection.setHeaderType("extendedV4");
connection.connect();
WebtRemoteService service = new WebtRemoteService("GQ2", connection);
WebtBuffer buffer = service.createStringBuffer();
buffer.setString("TG_Test222");
WebtGQ2Attribute attr = new WebtGQ2Attribute(WebtGQ2Attribute.TG_LOCK);
WebtGQ2Handler handler = null;
String key = new String("/WebtLock");
try {
int timeout = 6000000;
service.gq2Lock(key, timeout, attr);
System.out.println("LOCK");
/* business coding */
service.gq2Unlock(key, attr);
System.out.println("UNLOCK");
} catch (WebtServiceFailException se) {
se.printStackTrace();
} catch (WebtException e) {
e.printStackTrace();
} finally {
connection.close();
}
}
}
gq2SetWatcher 예제
package test;
import java.io.IOException;
import tmax.webt.Gq;
import tmax.webt.WebtAttribute;
import tmax.webt.WebtBuffer;
import tmax.webt.WebtEventConnection;
import tmax.webt.WebtEventHandler;
import tmax.webt.WebtException;
import tmax.webt.WebtGQ2Attribute;
import tmax.webt.WebtGQ2Handler;
import tmax.webt.WebtIOException;
import tmax.webt.WebtRemoteService;
public class GQ2EventSample implements {
public void handleEvent(String key, int eventType) {
System.out.println("event received. key = " + key + ", eventType = " +
eventType);
}
public static void main(String[] argv) throws IOException {
WebtEventConnection connection = new WebtEventConnection("192.168.33.216",
12080, false);
connection.setHeaderType("extendedV4");
connection.connect();
WebtRemoteService service = new WebtRemoteService("GQ2", connection);
WebtBuffer buffer = service.createStringBuffer();
buffer.setString("EVENT_TEST");
WebtGQ2Attribute attr =
new WebtGQ2Attribute(WebtGQ2Attribute.TG_WATCHER_PERSISTENT+
WebtGQ2Attribute.TG_EVENT_SET_SELF);
GQ2EventSample eventSample = new GQ2EventSample();
String key = new String("/Webt12345");
service.gq2SetWatcher(key, attr, eventSample);
System.in.read();
}
}