sharedmem: command line done, fixing to do

This commit is contained in:
maliakal_d 2018-06-25 19:14:41 +02:00
parent 69c71e48f6
commit a97b725f43
2 changed files with 109 additions and 77 deletions

View File

@ -16,82 +16,114 @@ int dummyCallback(detectorData* d, int p,void*) {
class multiSlsDetectorClient { class multiSlsDetectorClient {
public: public:
multiSlsDetectorClient(int argc, char *argv[], int action, multiSlsDetector *myDetector=NULL) { \ multiSlsDetectorClient(int argc, char *argv[], int action, multiSlsDetector *myDetector=NULL) { \
string answer; \ string answer; \
multiSlsDetectorCommand *myCmd; \ multiSlsDetectorCommand *myCmd; \
int id=-1, iv=0, pos=-1; \ int id = -1, pos = -1, iv = 0; \
int del=0; \ bool verify = true, update = true; \
char cmd[100]; \ int del = 0; \
if (action==slsDetectorDefs::READOUT_ACTION) { \ char cmd[100] = ""; \
if (argc!=0) { // multi id scanned
iv=sscanf(argv[0],"%d-%s",&id,cmd); \ iv=sscanf(argv[0],"%d-%s",&id, cmd); \
if (iv>0 && id>=0 && strchr(argv[0],'-')) { if (iv != 2 || id < 0) \
cout << "id " << id << endl; \ id = 0; \
if (iv>1) if (iv == 2 && id >= 0) { \
argv[0]=cmd; argv[0] = cmd; \
} cout << id << "-" ; \
iv=sscanf(argv[0],"%d:",&pos); \ } \
if (iv>0 && pos>=0 && strchr(argv[0],':'))
cout << "pos " << pos << "is not allowed!" << endl; \
}
if (id<0)
id=0;
if (myDetector==NULL) { \ // sls pos scanned
myDetector=new multiSlsDetector(id); \ iv=sscanf(argv[0],"%d:%s", &pos, cmd); \
//myDetector->registerDataCallback(&dummyCallback, NULL); if (iv != 2 ) \
del=1; \ pos = 0; \
}; if (iv == 2 && pos >= 0) { \
// cout << "noid" <<endl; argv[0] = cmd; \
myCmd=new multiSlsDetectorCommand(myDetector); \ cout << pos << ":" ; \
answer=myCmd->executeLine(argc, argv, action); \ } \
cout << answer<< endl; \
delete myCmd; \
if (del) delete myDetector; \
return; \
}; \
if (action==slsDetectorDefs::PUT_ACTION && argc<2) { \
cout << "Wrong usage - should be: "<< argv[0] << \
"[id-][pos:]channel arg" << endl; \
cout << endl; \
return; \
if (del) delete myDetector; \
};
if (action==slsDetectorDefs::GET_ACTION && argc<1) { \
cout << "Wrong usage - should be: "<< argv[0] << \
"[id-][pos:]channel arg" << endl; \
cout << endl; \
if (del) delete myDetector; \
return; \
}; \
if (myDetector==NULL) { \
iv=sscanf(argv[0],"%d-%s",&id, cmd); \
if (iv==2 && id>=0) { \
myDetector=new multiSlsDetector(id); \
argv[0]=cmd; \
cout << id << "-" ; \
} else { \
myDetector=new multiSlsDetector(); \
}; \
del=1; \
} \
iv=sscanf(argv[0],"%d:%s",&pos, cmd); \
if (iv==2 && pos>=0) { \
argv[0]=cmd; \
cout << pos << ":" ; \
} ; \
myCmd=new multiSlsDetectorCommand(myDetector); \
answer=myCmd->executeLine(argc, argv, action, pos); \
cout << argv[0] << " " ; \
cout << answer<< endl; \
delete myCmd; \
if (del) delete myDetector; \
};
// readout
if (action==slsDetectorDefs::READOUT_ACTION) { \
if (pos != -1) { \
cout << "pos " << pos << "is not allowed for readout!" << endl; \
} \
// create multiSlsDetector class if required
if (myDetector==NULL) { \
try { \
myDetector = new multiSlsDetector(id, verify, update); \
} catch (const SharedMemoryException & e) { \
cout << e.GetMessage() << endl; \
return; \
} catch (...) { \
cout << " caught exception" << endl; \
return; \
} \
//myDetector->registerDataCallback(&dummyCallback, NULL);
del=1; \
} \
myCmd=new multiSlsDetectorCommand(myDetector); \
answer=myCmd->executeLine(argc, argv, action); \
cout << answer<< endl; \
delete myCmd; \
if (del) delete myDetector; \
return; \
}; \
if (action==slsDetectorDefs::PUT_ACTION && argc<2) { \
cout << "Wrong usage - should be: "<< argv[0] << \
"[id-][pos:]channel arg" << endl; \
cout << endl; \
return; \
if (del) delete myDetector; \
};
if (action==slsDetectorDefs::GET_ACTION && argc<1) { \
cout << "Wrong usage - should be: "<< argv[0] << \
"[id-][pos:]channel arg" << endl; \
cout << endl; \
if (del) delete myDetector; \
return; \
}; \
// special commands
string scmd = cmd; \
// free without calling multiSlsDetector constructor
if (scmd == "free") { \
if (pos != -1) \
slsDetector::freeSharedMemory(id, pos); \
else \
multiSlsDetector::freeSharedMemory(id); \
return; \
} \
// get user details without verify sharedMultiSlsDetector version
else if ((scmd == "userdetails") && (action==slsDetectorDefs::GET_ACTION)) {\
verify = false; \
update = false; \
myDetector=NULL; \
} \
// create multiSlsDetector class if required
if (myDetector==NULL) { \
try { \
myDetector = new multiSlsDetector(id, verify, update); \
} catch (const SharedMemoryException & e) { \
cout << e.GetMessage() << endl; \
return; \
} catch (...) { \
cout << " caught exception" << endl; \
return; \
} \
del=1; \
} \
// call multi detector command line
myCmd=new multiSlsDetectorCommand(myDetector); \
answer=myCmd->executeLine(argc, argv, action, pos); \
cout << argv[0] << " " ; \
cout << answer<< endl; \
delete myCmd; \
if (del) delete myDetector; \
};
}; };