diff options
author | tomsmeding <hallo@tomsmeding.nl> | 2015-06-23 20:28:29 +0200 |
---|---|---|
committer | tomsmeding <hallo@tomsmeding.nl> | 2015-06-23 20:28:29 +0200 |
commit | 51b3ea69321fb76427027529c198a668941ede01 (patch) | |
tree | a29a5687a375a55b01cf2fe8924400c78026af3a | |
parent | d0554a4fbbd238203835664eb60a556e95329d7b (diff) |
Friendlier interface through optional command-line arguments
-rw-r--r-- | timerserver.cpp | 63 |
1 files changed, 38 insertions, 25 deletions
diff --git a/timerserver.cpp b/timerserver.cpp index df5389a..881af9a 100644 --- a/timerserver.cpp +++ b/timerserver.cpp @@ -94,9 +94,32 @@ void sendwaypoints(unsigned int sock,vector<pair<time_t,string>> &waypoints){ sendall(sock,s.c_str(),len); } -void act_server(void){ +unsigned int getclientsock(void){ + unsigned int s; + struct sockaddr_un remote; + s=socket(AF_UNIX,SOCK_STREAM,0); + if(s==(unsigned int)-1){ + perror("socket"); + exit(1); + } + remote.sun_family=AF_UNIX; + strcpy(remote.sun_path,SOCKET_PATH); + if(connect(s,(struct sockaddr*)&remote,strlen(SOCKET_PATH)+1+sizeof(remote.sun_family))==-1){ + perror("connect"); + exit(1); + } + return s; +} + +void act_server(int numargs,char **args){ //args == argv+1, numargs == argc-1 vector<pair<time_t,string>> waypoints; - addwaypoint(waypoints,"Start"); + if(numargs){ + stringstream ss; + for(int i=0;i<numargs;i++)ss<<(i?" ":"")<<args[i]; + string line=ss.str(); + cout<<"Timer description: "<<line<<endl; + addwaypoint(waypoints,line.c_str()); + } else addwaypoint(waypoints,"Start"); pid_t pid=fork(); if(pid==-1){ perror("fork"); @@ -116,7 +139,7 @@ void act_server(void){ atexit(unlink_socketpath); unsigned int s,s2; s=socket(AF_UNIX,SOCK_STREAM,0); - if(s==-1){ + if(s==(unsigned int)-1){ perror("socket"); exit(1); } @@ -167,23 +190,6 @@ void act_server(void){ } } -unsigned int getclientsock(void){ - unsigned int s; - struct sockaddr_un remote; - s=socket(AF_UNIX,SOCK_STREAM,0); - if(s==-1){ - perror("socket"); - exit(1); - } - remote.sun_family=AF_UNIX; - strcpy(remote.sun_path,SOCKET_PATH); - if(connect(s,(struct sockaddr*)&remote,strlen(SOCKET_PATH)+1+sizeof(remote.sun_family))==-1){ - perror("connect"); - exit(1); - } - return s; -} - void act_client_timerstop(void){ unsigned int s=getclientsock(); char buf[5]; @@ -233,11 +239,18 @@ void act_client_timerstatus(void){ cout<<ctime(&tim)<<flush; } -void act_client_timerwaypoint(void){ +void act_client_timerwaypoint(int numargs,char **args){ unsigned int s=getclientsock(); - cout<<"Enter the description for this waypoint: "<<flush; string line; - getline(cin,line); + if(numargs){ + stringstream ss; + for(int i=0;i<numargs;i++)ss<<(i?" ":"")<<args[i]; + line=ss.str(); + cout<<"Waypoint description: "<<line<<endl; + } else { + cout<<"Enter the description for this waypoint: "<<flush; + getline(cin,line); + } const int buflen=4+1+line.size(); char buf[buflen]; buf[0]=0; @@ -260,11 +273,11 @@ int main(int argc,char **argv){ if(strendequ(argv[0],"timerstop")){ act_client_timerstop(); } else if(strendequ(argv[0],"timerwaypoint")||strendequ(argv[0],"timerwp")){ - act_client_timerwaypoint(); + act_client_timerwaypoint(argc-1,argv+1); } else if(strendequ(argv[0],"timerstatus")){ act_client_timerstatus(); } else if(strendequ(argv[0],"timer")||strendequ(argv[0],"timerserver")){ - act_server(); + act_server(argc-1,argv+1); } else { cerr<<"Unknown calling name \""<<argv[0]<<"\"!"<<endl; return 1; |