rlEventLogServer Class Reference

#include <rleventlogserver.h>

Collaboration diagram for rlEventLogServer:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 rlEventLogServer (const char *filename=NULL, int max_events=10000)
virtual ~rlEventLogServer ()
const char * getEvent (char *buf, int *num)
void putEvent (const char *event)

Private Attributes

char memory [rlMAX_MESSAGES *rlMAX_EVENT]
rlMutex mutex
int front
int cnt
char * filename
void * fp
int max_events
int num_events

Detailed Description

A class for implementing an event log server.
You may use it with rlevent.h

Definition at line 29 of file rleventlogserver.h.


Constructor & Destructor Documentation

rlEventLogServer::rlEventLogServer ( const char *  filename = NULL,
int  max_events = 10000 
)
    the event log files will be called:
    filename<date-and-time>.rlEventLog
    max_events = max number of events in one file
    files may be purged by cron
    

Definition at line 23 of file rleventlogserver.cpp.

00024 {
00025   for(int i=0; i<rlMAX_MESSAGES; i++) // init memory
00026   {
00027     sprintf(&memory[i*rlMAX_EVENT]," ");
00028   }
00029   front = -1;
00030   cnt   = 0;
00031   if(file != NULL)
00032   {
00033     filename = new char [strlen(file)+1];
00034     strcpy(filename,file);
00035   }
00036   fp = NULL;
00037   max_events = max;
00038   num_events = 0;
00039 }

rlEventLogServer::~rlEventLogServer (  )  [virtual]

Definition at line 41 of file rleventlogserver.cpp.

00042 {
00043   if(filename != NULL) delete [] filename;
00044   if(fp != NULL) fclose((FILE *) fp);
00045 }


Member Function Documentation

const char * rlEventLogServer::getEvent ( char *  buf,
int *  num 
)
    num is the event number
    num = -1 will retrieve all events
    

Definition at line 47 of file rleventlogserver.cpp.

00048 {
00049   char *cptr;
00050 
00051   mutex.lock();
00052   if(*num == -1 && front != -1) *num = front+1;   // read all
00053   if(*num >= rlMAX_MESSAGES) *num = -1;
00054   if(*num == front || front == -1)                // nothing to read
00055   {
00056     buf[0] = '\0';
00057     mutex.unlock();
00058     return NULL;
00059   }
00060   else                                            // read next record
00061   {
00062     (*num)++;
00063     if(*num >= rlMAX_MESSAGES) 
00064     {
00065       *num = 0;
00066       if(*num == front)
00067       {
00068         buf[0] = '\0';
00069         mutex.unlock();
00070         return NULL;
00071       }  
00072     }
00073     strcpy(buf,&memory[(*num)*rlMAX_EVENT]);
00074     cptr = strchr(buf,'\n');
00075     if(cptr != NULL) *cptr = '\0';                // delete newline
00076     mutex.unlock();
00077     if(buf[0] < ' ') return "";
00078     return buf;
00079   }
00080 }

void rlEventLogServer::putEvent ( const char *  event  ) 

Definition at line 82 of file rleventlogserver.cpp.

00083 {
00084   mutex.lock();
00085   front++;
00086   if(front >= rlMAX_MESSAGES) front = 0;
00087   rlstrncpy(&memory[front*rlMAX_EVENT],event,rlMAX_EVENT-1);
00088   if(fp == NULL && filename != NULL)
00089   {
00090     char name[1024],time[50];
00091     rlTime t;
00092 
00093     t.getLocalTime();
00094     strcpy(time,t.getTimeString()); time[10] = '_'; time[13] = '_'; time[16] = '\0';
00095     strcpy(name,filename);
00096     strcat(name,time);
00097     strcat(name,".rlEventLog");
00098     //printf("openEventlog(%s)\n",name);
00099 #ifdef __VMS
00100     fp = (void *) fopen(name,"w","shr=get");
00101 #else
00102     fp = (void *) fopen(name,"w");
00103 #endif  
00104   }
00105   if(fp != NULL && filename != NULL)
00106   {
00107     fprintf((FILE *) fp,"%s",event);
00108     fflush((FILE *) fp);
00109     num_events++;
00110   }
00111   if(num_events > max_events && filename != NULL)
00112   {
00113     num_events = 0;
00114     fclose((FILE *) fp);
00115     fp = NULL;
00116   }
00117   mutex.unlock();
00118 }


Member Data Documentation

int rlEventLogServer::cnt [private]

Definition at line 52 of file rleventlogserver.h.

char* rlEventLogServer::filename [private]

Definition at line 53 of file rleventlogserver.h.

void* rlEventLogServer::fp [private]

Definition at line 54 of file rleventlogserver.h.

int rlEventLogServer::front [private]

Definition at line 51 of file rleventlogserver.h.

Definition at line 55 of file rleventlogserver.h.

char rlEventLogServer::memory[rlMAX_MESSAGES *rlMAX_EVENT] [private]

Definition at line 49 of file rleventlogserver.h.

Definition at line 50 of file rleventlogserver.h.

Definition at line 55 of file rleventlogserver.h.


The documentation for this class was generated from the following files:
Generated on Mon Aug 30 20:16:16 2010 for rllib by  doxygen 1.6.3