16#include "framework/pcore/SeqFile.h"
17#include "daq/dataflow/REvtSocket.h"
21#define EVENTINTERVAL 5000
26int main(
int argc,
char** argv)
29 printf(
"file2sock : filename port poisson_freq file_interval\n");
36 string filename(argv[1]);
37 int port = atoi(argv[2]);
38 int pfreq = atoi(argv[3]);
40 double minterval = 0.0;
42 minterval = 1.0E6 / (double)pfreq;
44 vector<string> filelist;
46 if ((
int)filename.rfind(
".list") != -1) {
47 FILE* fd = fopen(filename.c_str(),
"r");
49 fprintf(stderr,
"file2sockr: cannot open %s\n", filename.c_str());
54 int is = fscanf(fd,
"%1023s", listfile);
56 filelist.push_back(
string(listfile));
59 filelist.push_back(filename);
60 printf(
"File %s is put ln the list\n", filename.c_str());
62 printf(
"# of input files = %d\n", (
int)filelist.size());
63 for (
int i = 0; i < (int)filelist.size(); i++) {
64 printf(
"file = %s\n", filelist[i].c_str());
73 char* evbuf =
new char[MAXEVTSIZE];
77 if (file->status() <= 0) {
82 int is = file->read(evbuf, MAXEVTSIZE);
84 printf(
"Error in reading file : %d\n", is);
92 gettimeofday(&tnow, NULL);
93 gettimeofday(&tprev, NULL);
95 double datasize = 0.0;
96 printf(
"Start event loop\n");
99 int isN = file->read(evbuf, MAXEVTSIZE);
101 printf(
"Error in reading file : %d\n", isN);
103 }
else if (isN > MAXEVTSIZE) {
104 printf(
"Event size too large : %d\n", isN);
106 }
else if (isN == 0) {
108 if (fileptr == (
int)filelist.size()) {
109 printf(
"End of file list reached. Exitting\n");
112 file =
new SeqFile(filelist[fileptr++].c_str(),
"r");
113 if (file->status() <= 0) {
118 int isNow = file->read(evbuf, MAXEVTSIZE);
120 printf(
"Error in reading file : %d\n", isNow);
124 isNow = file->read(evbuf, MAXEVTSIZE);
126 printf(
"Error in reading file : %d\n", isNow);
136 if (msg->
type() == MSG_TERMINATE) {
137 printf(
"EoF found. Exitting.....\n");
141 }
else if (msg->
type() == MSG_STREAMERINFO) {
142 printf(
"StreamerInfo. Skipped....\n");
145 int isNow = sock->send(msg);
148 printf(
"Cannot send event. Exitting\n");
154 usleep(rand.Poisson(minterval));
157 datasize += (double)isN;
159 if (nevent % EVENTINTERVAL == 0) {
160 gettimeofday(&tnow, NULL);
161 double delta = (double)((tnow.tv_sec - tprev.tv_sec) * 1000000 +
162 (tnow.tv_usec - tprev.tv_usec));
163 double rate = ((double)EVENTINTERVAL) / delta * 1.0E6;
164 double flow = datasize / delta;
165 printf(
"Event = %8d; Ave. rate = %7.2f Hz, flow = %7.2f MB/s\n",
Class to manage streamed object.
ERecordType type() const
Get record type.
A class to manage I/O for a chain of blocked files.
Abstract base class for different kinds of events.