Skip to content
Snippets Groups Projects
Commit 6058752d authored by Christophe Geuzaine's avatar Christophe Geuzaine
Browse files

Better sockets

parent 56cf8279
No related branches found
No related tags found
No related merge requests found
/* $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;
......
// $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;
}
......
#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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment