From 3dfc1c543feb12d381b6c0b8f9712e362fb90972 Mon Sep 17 00:00:00 2001
From: Janis Streib <me@janis-streib.de>
Date: Fri, 19 May 2023 15:49:59 +0200
Subject: [PATCH] ADD: signal handler

---
 src/G4Export.cpp |   28 +++++++++++++++++++++-------
 1 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/src/G4Export.cpp b/src/G4Export.cpp
index ba61301..4ad269d 100644
--- a/src/G4Export.cpp
+++ b/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;

--
Gitblit v1.9.1