Janis Streib
19.05.23 3dfc1c543feb12d381b6c0b8f9712e362fb90972
ADD: signal handler
1 files modified
28 ■■■■ changed files
src/G4Export.cpp 28 ●●●● patch | view | raw | blame | history
src/G4Export.cpp
@@ -11,6 +11,7 @@
#include <ip/UdpSocket.h>
#include <osc/OscOutboundPacketStream.h>
#include <sstream>
#include <signal.h>
using namespace clipp; using std::cout; using std::string;
@@ -22,11 +23,11 @@
void* Collect(REND_STRUCT* prs){
    int i = 0;
    int iter = 0;
    CG4Trk* pTrk = prs->pTrk;
    while (RunCollect){
        // periodically check for new hubs coming on line
        if(i % 1000 == 0) {
        if(iter % 1000 == 0) {
            int numHubs;
            if (prs->tot_hubs_on_system!=prs->numHub){
                prs->numHub=numHubs=prs->tot_hubs_on_system=pTrk->UpdateHubs();
@@ -44,7 +45,7 @@
            }
        }
        i++;
        iter++;
        prs->hubreadmap=0;
        prs->tot_hubs_on_system=prs->pTrk->GetHubsPno(prs);
        char buffer[OUTPUT_BUFFER_SIZE];
@@ -54,20 +55,19 @@
            if(!use_text) {
                p << osc::BeginBundleImmediate;
            }
            auto dat = prs->hubList[i].GetPnoData();
            for(int j=0;j<G4_SENSORS_PER_HUB;j++) {
                if(!prs->hubList[i].IsSenActive(j)){
                    continue;
                }
                auto dat = prs->hubList[i].GetPnoData()[j];
                //printf("sns: %i: [%f;%f;%f],[%f,%f,%f]\n",i, dat[0],dat[1],dat[2], dat[3],dat[4],dat[5]);
                p << osc::BeginMessage( (string("/g4/hub/") + std::to_string(prs->hubList[i].GetId()) + string("/") + std::to_string(j)).c_str());
                std::ostringstream ss;
                if(use_text) {
                    ss << "[" << dat[0] << "," << dat[1] << "," << dat[2] << "," << dat[3] << "," << dat[4] << "," << dat[5] << "]";
                    ss << "[" << dat[j][0] << "," << dat[j][1] << "," << dat[j][2] << "," << dat[j][3] << "," << dat[j][4] << "," << dat[j][5] << "]";
                    auto res = ss.str();
                    p << res.c_str();
                } else {
                    p << dat[0] << dat[1] << dat[2] << dat[3] << dat[4] << dat[5];
                    p << dat[j][0] << dat[j][1] << dat[j][2] << dat[j][3] << dat[j][4] << dat[j][5];
                }
                p << osc::EndMessage;
            }
@@ -81,6 +81,11 @@
    }
    return NULL;
}
void sighandler(int s){
    printf("Caught signal %d\n",s);
    RunCollect = 0;
}
int main(int argc,char* argv[]){
@@ -131,6 +136,15 @@
 
  RunCollect=1;
  // register signal handler
  struct sigaction sigIntHandler;
  sigIntHandler.sa_handler = sighandler;
  sigemptyset(&sigIntHandler.sa_mask);
  sigIntHandler.sa_flags = 0;
  sigaction(SIGINT, &sigIntHandler, NULL);
  Collect(&rs);
  delete[] rs.srcList;