version 1.2, 2006/09/26 05:50:31 |
version 1.3, 2006/09/29 09:02:49 |
|
|
/* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf_win_mini.c,v 1.1 2006/09/26 05:35:26 noro Exp $ */ |
/* $OpenXM: OpenXM_contrib2/asir2000/io/tcpf_win_mini.c,v 1.2 2006/09/26 05:50:31 noro Exp $ */ |
|
|
#include "ca.h" |
#include "ca.h" |
#include "parse.h" |
#include "parse.h" |
|
|
static int control_port,server_port; |
static int control_port,server_port; |
int win_ox_launch(); |
int win_ox_launch(); |
void win_spawn_server(char *control_port_str,char *server_port_str); |
void win_spawn_server(char *control_port_str,char *server_port_str); |
void win_get_rootdir(rootdir); |
void win_get_rootdir(); |
char *win_pop_string(); |
int win_pop_string(Obj *); |
static int launched=0; |
void free_obj(Obj obj); |
extern int terminate; |
extern int terminate; |
|
static char rootdir[BUFSIZ]; |
|
|
int win_ox_launch() |
int win_ox_launch() |
{ |
{ |
int cs,ss,cn,sn; |
int cs,ss,cn,sn; |
char control_port_str[BUFSIZ]; |
char control_port_str[BUFSIZ]; |
char server_port_str[BUFSIZ]; |
char server_port_str[BUFSIZ]; |
|
static int launched=0; |
|
|
if ( launched ) return 0; |
if ( launched ) return 0; |
|
|
Line 58 int win_ox_launch() |
|
Line 60 int win_ox_launch() |
|
return 0; |
return 0; |
} |
} |
|
|
void win_get_rootdir(char *dir); |
void win_get_rootdir(); |
|
|
void win_spawn_server(char *control_port_str,char *server_port_str) |
void win_spawn_server(char *control_port_str,char *server_port_str) |
{ |
{ |
char AsirExe[BUFSIZ]; |
char AsirExe[BUFSIZ]; |
char AsirExePath[BUFSIZ]; |
char AsirExePath[BUFSIZ]; |
char rootdir[BUFSIZ]; |
|
char *av[BUFSIZ]; |
char *av[BUFSIZ]; |
|
|
win_get_rootdir(rootdir); |
|
// strcpy(rootdir,"c:\\program files\\asir"); |
// strcpy(rootdir,"c:\\program files\\asir"); |
sprintf(AsirExe,"%s\\bin\\engine.exe",rootdir); |
// sprintf(AsirExe,"%s\\bin\\engine.exe",rootdir); |
|
sprintf(AsirExe,"c:\\Program Files\\asir\\bin\\engine.exe",rootdir); |
sprintf(AsirExePath,"\"%s\"",AsirExe); |
sprintf(AsirExePath,"\"%s\"",AsirExe); |
av[0] = "ox_launch"; |
av[0] = "ox_launch"; |
av[1] = "127.0.0.1"; |
av[1] = "127.0.0.1"; |
Line 84 void win_spawn_server(char *control_port_str,char *ser |
|
Line 85 void win_spawn_server(char *control_port_str,char *ser |
|
_spawnv(_P_NOWAIT,AsirExe,av); |
_spawnv(_P_NOWAIT,AsirExe,av); |
} |
} |
|
|
void win_get_rootdir(char *dir) |
void win_get_rootdir() |
{ |
{ |
char *slash; |
char *slash; |
|
|
GetCurrentDirectory(BUFSIZ,dir); |
GetCurrentDirectory(BUFSIZ,rootdir); |
slash = strrchr(dir,'\\'); |
slash = strrchr(rootdir,'\\'); |
if ( slash ) *slash = 0; |
if ( slash ) *slash = 0; |
} |
} |
|
|
char *win_pop_string() |
// ret=1 : data, ret=0 : void, ret=-1 : terminate |
|
|
|
int win_pop_string(Obj *obj) |
{ |
{ |
Obj obj; |
|
int id,serial; |
int id,serial; |
|
|
if ( !launched ) return ""; |
serial = ox_recv(server_port,&id,obj); |
serial = ox_recv(server_port,&id,&obj); |
if ( serial < 0 ) return -1; |
if ( serial < 0 ) return 0; |
|
|
|
|
if ( id == OX_DATA ) |
|
return 1; |
|
else { |
|
if ( id == OX_SYNC_BALL ) { |
|
ox_send_sync(server_port); |
|
ox_flush_stream_force(server_port); |
|
} |
|
*obj = 0; |
|
return 0; |
|
} |
|
} |
|
|
|
/* ret=1 => data, ret=0 => void, ret=-1 => terminated */ |
|
|
|
int win_pop_one(Obj *obj) |
|
{ |
|
int id,serial; |
|
|
|
serial = ox_recv(server_port,&id,obj); |
|
if ( serial < 0 ) return -1; |
|
|
if ( id == OX_DATA ) { |
if ( id == OX_DATA ) { |
if ( obj && OID(obj) == O_STR ) return BDY((STRING)obj); |
return 1; |
else return ""; |
|
} else if ( id == OX_SYNC_BALL ) { |
} else if ( id == OX_SYNC_BALL ) { |
ox_send_sync(server_port); |
ox_send_sync(server_port); |
ox_flush_stream_force(server_port); |
ox_flush_stream_force(server_port); |
return ""; |
return 0; |
} else return ""; |
} else return 0; |
} |
} |
|
|
void win_execute_string(char *cmd) |
void win_execute_string(char *cmd) |
{ |
{ |
struct oSTRING str; |
struct oSTRING str; |
|
|
if ( !launched ) return; |
|
OID(&str) = O_STR; |
OID(&str) = O_STR; |
BDY(&str) = cmd; |
BDY(&str) = cmd; |
ox_send_data(server_port,&str); |
ox_send_data(server_port,&str); |
|
|
int id; |
int id; |
Obj obj; |
Obj obj; |
|
|
if ( !launched ) return; |
|
ox_send_cmd(control_port,SM_control_reset_connection); |
ox_send_cmd(control_port,SM_control_reset_connection); |
ox_flush_stream_force(control_port); |
ox_flush_stream_force(control_port); |
ox_recv(control_port,&id,&obj); t = (USINT)obj; |
ox_recv(control_port,&id,&obj); t = (USINT)obj; |
|
|
|
|
void ox_shutdown() |
void ox_shutdown() |
{ |
{ |
if ( !launched ) return; |
|
terminate = 1; |
terminate = 1; |
ox_send_cmd(server_port,SM_shutdown); |
ox_send_cmd(server_port,SM_shutdown); |
Sleep(100); |
Sleep(100); |
ox_send_cmd(control_port,SM_shutdown); |
ox_send_cmd(control_port,SM_shutdown); |
|
} |
|
|
|
void free_obj(Obj obj) |
|
{ |
|
NODE n,n1; |
|
|
|
if ( !obj ) return; |
|
switch ( OID(obj) ) { |
|
case O_USINT: |
|
break; |
|
case O_STR: |
|
free(BDY((STRING)obj)); |
|
break; |
|
case O_LIST: |
|
n = BDY((LIST)obj); |
|
while ( n ) { |
|
free_obj(BDY(n)); |
|
n1 = NEXT(n); |
|
free(n); |
|
n = n1; |
|
} |
|
break; |
|
case O_ERR: |
|
free_obj(BDY((LIST)obj)); |
|
break; |
|
default: |
|
break; |
|
} |
|
free(obj); |
} |
} |
|
|