diff --git a/Fltk/Socket.cpp b/Fltk/Socket.cpp index f5d95ecdef03481a021c33734398db24e4766a51..b1ab0b913c5e02d9af62c0f21d0769ee4fe49c94 100644 --- a/Fltk/Socket.cpp +++ b/Fltk/Socket.cpp @@ -1,4 +1,4 @@ -/* $Id: Socket.cpp,v 1.4 2001-05-03 01:04:07 geuzaine Exp $ */ +/* $Id: Socket.cpp,v 1.5 2001-05-04 11:53:01 geuzaine Exp $ */ #include <stdio.h> #include <stdlib.h> @@ -150,12 +150,28 @@ int Socket_StopProgram(char *progname, char *sockname, int sock){ return 0; } +long Socket_GetTime(){ + struct timeval tp; + gettimeofday(&tp, (struct timezone *)0); + return (long)tp.tv_sec * 1000000 + (long)tp.tv_usec; +} + +void Socket_Idle(double delay){ + long t1 = Socket_GetTime(); + while(1){ + if(Socket_GetTime() - t1 > 1.e6*delay) break; + } +} int Socket_Connect(char *sockname){ struct sockaddr_un addr; int len, sock; int tries; + /* slight delay to be sure that the socket gets created by the + server before we attempt to connect to it... */ + Socket_Idle(0.1); + /* create socket */ sock = socket(PF_UNIX, SOCK_STREAM, 0); if (sock<0){ @@ -169,7 +185,7 @@ int Socket_Connect(char *sockname){ len = strlen(addr.sun_path)+sizeof(addr.sun_family); for (tries=0;tries<5;tries++) { if (connect(sock, (struct sockaddr *)&addr, len) < 0) { - Msg(GERROR, "Socket connect failed"); + Msg(WARNING, "Socket connect failed on '%s'", sockname); } else { return sock; diff --git a/Fltk/Solvers.cpp b/Fltk/Solvers.cpp index ff83bedc8eda68225c2bc053dae663098b93764e..bec18c3e50fb27cbe962dfe555ff1055bb2169e8 100644 --- a/Fltk/Solvers.cpp +++ b/Fltk/Solvers.cpp @@ -1,4 +1,4 @@ -// $Id: Solvers.cpp,v 1.1 2001-05-03 00:09:42 geuzaine Exp $ +// $Id: Solvers.cpp,v 1.2 2001-05-04 11:53:01 geuzaine Exp $ #include "Gmsh.h" @@ -43,11 +43,11 @@ extern GUI *WID; _GetDP_Info GetDP_Info ; int GetDP(char *args){ - int sock, i, n ; + int sock, type, i, n ; char progname[1000], sockname[1000], str[1000]; GET_PATH(sockname); - strcat(sockname, ".gmsh-socket-GetDP"); + strcat(sockname, ".gmshsock"); sprintf(progname, "getdp %s", args); sock = Socket_StartProgram(progname, sockname); @@ -56,37 +56,40 @@ int GetDP(char *args){ return 0; } + Msg(INFO, "GetDP start (%s)", progname); + GetDP_Info.nbres = 0; GetDP_Info.nbpostop = 0; while(1){ - Socket_ReceiveInt(sock, &i); + Socket_ReceiveInt(sock, &type); - if(i<0){ - Msg(INFO, "Finished '%s'", progname); - break; - } + if(type == GETDP_END) break; Socket_ReceiveString(sock, str); - switch(i){ - case 10 : // status + switch(type){ + case GETDP_PROGRESS : Msg(STATUS3N, "GetDP %s", str); break ; - case 101 : // available resolution + case GETDP_RESOLUTION_NAME : strcpy(GetDP_Info.res[GetDP_Info.nbres++],str); break ; - case 102 : // available postoperations + case GETDP_POSTOPERATION_NAME : strcpy(GetDP_Info.postop[GetDP_Info.nbpostop++],str); break ; - case 200 : // load postprocessing file + case GETDP_LOAD_VIEW : n = List_Nbr(Post_ViewList); MergeProblem(str); Draw(); if(n != List_Nbr(Post_ViewList)) WID->set_context(menu_post, 0); break ; + case GETDP_INFO : + Msg(DIRECT, "GetDP > %s", str); + break; default : + Msg(WARNING, "Unknown type of message received from GetDP"); Msg(DIRECT, "GetDP > %s", str); break ; } @@ -107,9 +110,12 @@ int GetDP(char *args){ WID->getdp_choice[1]->value(0); } + Msg(STATUS3N, ""); Socket_StopProgram(progname, sockname, sock); + Msg(INFO, "GetDP stop (%s)", progname); + return 1; } diff --git a/Fltk/Solvers.h b/Fltk/Solvers.h index 3ce22bd07517247c86dcb2bf247e833817546675..c76c494ab0add4b5dce1b84a1be617d18f2523bf 100644 --- a/Fltk/Solvers.h +++ b/Fltk/Solvers.h @@ -1,6 +1,14 @@ #ifndef _SOLVERS_H_ #define _SOLVERS_H_ +// Message protocol for GetDP + +#define GETDP_END -1 +#define GETDP_INFO 1 +#define GETDP_PROGRESS 2 +#define GETDP_RESOLUTION_NAME 3 +#define GETDP_POSTOPERATION_NAME 4 +#define GETDP_LOAD_VIEW 5 typedef struct{ int nbres, nbpostop;