CMsgRootProducer.cc
// Example shows how to serialize root object and publish it via cMsg // // Elliott Wolin, JLab, 26-jan-2009
// include files
- include <iostream>
- include <iomanip>
- include <string>
- include <stdlib.h>
// for cMsg
- include "cMsg.hxx"
// root include files
- include "TH1F.h"
- include "TMessage.h"
using namespace std;
using namespace cmsg;
// misc variables */
static string url = "cMsg://localhost/cMsg";
static int hcount = 0;
static int debug = 0;
static int done = 0;
// prototypes */ void decode_command_line(int argc, char **argv);
//---------------------------------------------------------------- //----------------------------------------------------------------
int main (int argc, char **argv) {
// decode command line decode_command_line(argc,argv);
try {
// create and fill a root hist object TH1F *hist = new TH1F("fhist","This is the TH1F hist title",100,0.,100.); for(int i=0; i<10000; i++) hist->Fill(float(1+int(100.0*(rand()/(RAND_MAX+1.0)))));
// create TMessage object that contains serialized version of hist object TMessage *tm = new TMessage(kMESS_OBJECT); tm->WriteObject(hist);
// connect to cMsg server cMsg c(url,"hproducer","histogram producer"); c.connect();
// create and fill cMsg message // byte array filled with contents of TMessage object internal buffer, // which contains serialized root object cMsgMessage m; m.setSubject("root"); m.setType("hist"); m.setByteArrayNoCopy(tm->Buffer(),tm->Length());
// send message while(!done) { c.send(m); hcount++; cout << "sent message " << hcount << endl; done=hcount>=10; sleep(1); }
// done c.disconnect();
} catch(cMsgException &e) { cout << "?cMsg exception: " << e.what() << endl; exit(EXIT_FAILURE);
} catch(...) { cout << "?unknown exception" << endl; exit(EXIT_FAILURE); }
exit(EXIT_SUCCESS);
}
//----------------------------------------------------------------
void decode_command_line(int argc, char**argv) {
const char *help = "\nusage:\n\n hproducer [-url url] [-debug]\n"; int i; // loop over arguments */ i=1; while (i<argc) { if (strncasecmp(argv[i],"-h",2)==0) { printf("%s\n",help); exit(EXIT_SUCCESS);
} else if (strncasecmp(argv[i],"-url",4)==0) { url=string(argv[i+1]); i=i+2;
} else if (strncasecmp(argv[i],"-debug",6)==0) { debug=1; i=i+1;
} else if (strncasecmp(argv[i],"-",1)==0) { printf("\n ?unknown command line arg: %s\n\n",argv[i]); exit(EXIT_FAILURE);
} else { break; } }
return;
}
//----------------------------------------------------------------