rllib  1
Public Member Functions | Private Attributes
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.

{
  for(int i=0; i<rlMAX_MESSAGES; i++) // init memory
  {
    sprintf(&memory[i*rlMAX_EVENT]," ");
  }
  front = -1;
  cnt   = 0;
  if(file != NULL)
  {
    filename = new char [strlen(file)+1];
    strcpy(filename,file);
  }
  fp = NULL;
  max_events = max;
  num_events = 0;
}
rlEventLogServer::~rlEventLogServer ( ) [virtual]

Definition at line 41 of file rleventlogserver.cpp.

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

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.

{
  char *cptr;

  mutex.lock();
  if(*num == -1 && front != -1) *num = front+1;   // read all
  if(*num >= rlMAX_MESSAGES) *num = -1;
  if(*num == front || front == -1)                // nothing to read
  {
    buf[0] = '\0';
    mutex.unlock();
    return NULL;
  }
  else                                            // read next record
  {
    (*num)++;
    if(*num >= rlMAX_MESSAGES) 
    {
      *num = 0;
      if(*num == front)
      {
        buf[0] = '\0';
        mutex.unlock();
        return NULL;
      }  
    }
    strcpy(buf,&memory[(*num)*rlMAX_EVENT]);
    cptr = strchr(buf,'\n');
    if(cptr != NULL) *cptr = '\0';                // delete newline
    mutex.unlock();
    if(buf[0] < ' ') return "";
    return buf;
  }
}
void rlEventLogServer::putEvent ( const char *  event)

Definition at line 82 of file rleventlogserver.cpp.

{
  mutex.lock();
  front++;
  if(front >= rlMAX_MESSAGES) front = 0;
  rlstrncpy(&memory[front*rlMAX_EVENT],event,rlMAX_EVENT-1);
  if(fp == NULL && filename != NULL)
  {
    char name[1024],time[50];
    rlTime t;

    t.getLocalTime();
    strcpy(time,t.getTimeString()); time[10] = '_'; time[13] = '_'; time[16] = '\0';
    strcpy(name,filename);
    strcat(name,time);
    strcat(name,".rlEventLog");
    //printf("openEventlog(%s)\n",name);
#ifdef __VMS
    fp = (void *) fopen(name,"w","shr=get");
#else
    fp = (void *) fopen(name,"w");
#endif  
  }
  if(fp != NULL && filename != NULL)
  {
    fprintf((FILE *) fp,"%s",event);
    fflush((FILE *) fp);
    num_events++;
  }
  if(num_events > max_events && filename != NULL)
  {
    num_events = 0;
    fclose((FILE *) fp);
    fp = NULL;
  }
  mutex.unlock();
}

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: