31 #include <danaevio/dana_evio_dict.h>
40 static evioFileChannel *
chan;
60 static pthread_mutex_t
evioMutex = PTHREAD_MUTEX_INITIALIZER;
64 static FILE *
initSocket(
const char *ipAddress,
int port,
int *sock);
68 extern jana::JApplication *
japp;
79 jout << endl <<
" Default JEventProcessor_danaevio invoked" << endl << endl;
84 gPARMS->SetDefaultParameter(
"EVIO:FILENAME",
evioFileName);
85 jout << endl <<
" EVIO output file name is " <<
evioFileName << endl << endl;
89 gPARMS->SetDefaultParameter(
"EVIO:HOST",
evioHost);
90 gPARMS->SetDefaultParameter(
"EVIO:PORT",
evioPort);
96 gPARMS->SetDefaultParameter(
"EVIO:BUFSIZE",
evioBufSize);
97 jout << endl <<
" EVIO internal buf size is " <<
evioBufSize << endl << endl;
99 jout << endl <<
" EVIO TCP socket host is " <<
evioHost<< endl << endl;
100 jout << endl <<
" EVIO TCP socket port is " <<
evioPort<< endl << endl;
101 jout << endl <<
" EVIO TCP socket try is " <<
evioSocketTry << endl << endl;
102 jout << endl <<
" EVIO TCP socket wait is " <<
evioSocketWait << endl << endl;
114 }
catch (evioException
e) {
115 jerr << endl <<
" ?evioException in JEventProcessor_danaevio" << endl << endl
116 << e.toString() << endl;
121 jerr << endl <<
" ?unknown exception in JEventProcessor_danaevio, unable to open output file" << endl << endl;
136 jerr << endl <<
" ?JEventProcessor_danaevio...unable to open socket" << endl << endl;
162 }
catch (evioException
e) {
163 jerr << endl <<
" ?evioException in ~JEventProcessor_danaevio" << endl << endl
164 << e.toString() << endl;
166 jerr << endl <<
" ?unknown exception in ~JEventProcessor_danaevio, unable to close output file" << endl << endl;
187 static bool first_time =
true;
205 evioDOMTree tree(1,0);
206 evioDOMNodeP name = evioDOMNode::createEvioDOMNode<string> (1,1);
207 evioDOMNodeP tag = evioDOMNode::createEvioDOMNode<uint16_t> (1,2);
208 evioDOMNodeP num = evioDOMNode::createEvioDOMNode<uint8_t> (1,3);
209 tree << name << tag << num;
212 map< string, pair<uint16_t,uint8_t> >::const_iterator iter;
213 for(iter=theMap->begin(); iter!=theMap->end(); iter++) {
214 *name << iter->first;
215 *tag << iter->second.first;
216 *num << iter->second.second;
229 jerr <<
" ?JEventProcessor_danaevio::brun...unable to write to socket" << endl;
230 return(UNRECOVERABLE_ERROR);
237 }
catch (evioException
e) {
238 jerr << endl <<
" ?evioException in ~JEventProcessor_danaevio::brun, unable to write to file" << endl << endl
239 << e.toString() << endl;
242 jerr << endl <<
" ?unknown exception in ~JEventProcessor_danaevio::brun" << endl << endl;
267 vector<const DDANAEVIODOMTree*> evioTrees;
268 eventLoop->Get(evioTrees);
269 if(evioTrees.size()<=0)
return(NOERROR);
280 for(
unsigned int i=0; i<evioTrees.size(); i++) {
282 chan->write(evioTrees[i]->tree);
284 }
catch (evioException
e) {
285 jerr << endl <<
" ?evioException in JEventProcessor_danaevio::evnt" << endl << endl
286 << e.toString() << endl;
288 jerr << endl <<
" ?unknown exception in JEventProcessor_danaevio::evnt, unable to write to file" << endl << endl;
295 for(
unsigned int i=0; i<evioTrees.size(); i++) {
303 jerr <<
" ?JEventProcessor_danaevio::evnt...unable to write to socket" << endl;
304 return(UNRECOVERABLE_ERROR);
309 jerr << endl <<
" ?unknown exception in JEventProcessor_danaevio::evnt, unable to write to socket " << endl << endl;
335 FILE *
initSocket(
const char *ipAddress,
int port,
int *sock) {
338 *sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
341 jerr <<
" ?initSocket...socket() failed";
348 struct sockaddr_in servAddr;
349 memset(&servAddr, 0,
sizeof(servAddr));
350 servAddr.sin_family = AF_INET;
354 struct hostent *myHostEnt = gethostbyname(ipAddress);
355 if(myHostEnt==NULL) {
357 jerr <<
" ?initSocket...unable to gethostbyname()";
364 struct in_addr **myList = (in_addr **)myHostEnt->h_addr_list;
365 int rtnVal = inet_pton(AF_INET, inet_ntoa(*myList[0]), &servAddr.sin_addr.s_addr);
368 jerr <<
" ?initSocket...inet_pton() failed. Invalid address string";
372 else if (rtnVal < 0) {
374 jerr <<
" ?initSocket...inet_pton() failed";
378 servAddr.sin_port = htons(port);
385 if(connect(*sock, (
struct sockaddr *) &servAddr,
sizeof(servAddr))>=0) {
386 jout <<
"initSocket...connection successful on attempt " << i << endl;
390 jerr <<
" ...initSocket connection attempt " << i <<
" failed, trying again..." << endl;
396 jerr <<
" ?initSocket...connect() failed after " <<
evioSocketTry <<
" attempts" << endl;
404 return fdopen(*sock,
"w");
JEventProcessor_danaevio()
static const map< string, pair< uint16_t, uint8_t > > * getTagMapPointer()
static pthread_mutex_t evioMutex
static FILE * initSocket(const char *ipAddress, int port, int *sock)
static uint32_t * socketBuffer
static string evioFileName
static evioFileChannel * chan
jerror_t brun(JEventLoop *eventLoop, int32_t runnumber)
jerror_t evnt(JEventLoop *eventLoop, uint64_t eventnumber)
~JEventProcessor_danaevio()
static uint32_t socketHeader[3]
static int evioSocketWait