summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortomsmeding <hallo@tomsmeding.nl>2015-06-23 20:28:29 +0200
committertomsmeding <hallo@tomsmeding.nl>2015-06-23 20:28:29 +0200
commit51b3ea69321fb76427027529c198a668941ede01 (patch)
treea29a5687a375a55b01cf2fe8924400c78026af3a
parentd0554a4fbbd238203835664eb60a556e95329d7b (diff)
Friendlier interface through optional command-line arguments
-rw-r--r--timerserver.cpp63
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;