tape_ODBC/tape_odbc.cpp

Go to the documentation of this file.
00001 
00032 #include "tape_odbc.h"
00033 #include "TapeStream.h"
00034 #include "ODBCTapeStream.h"
00035 
00036 EXPORT CALLBACKS *callback = NULL;
00037 
00038 int open_player(struct player *my, char *fname, char *flags){
00039     //  returns ODBCTapeStream *
00040     my->tsp = ODBCTapeStream::OpenStream(my, fname, flags);
00041     if(NULL == my->tsp){
00042         gl_error("player DB %s: unable to connect.", fname);
00043         my->status=TS_DONE;
00044         return 0;
00045     }
00046     my->loopnum=my->loop;
00047     my->status=TS_OPEN;
00048     my->type=FT_ODBC;
00049     return 1;
00050 }
00051 
00052 char *read_player(struct player *my, char *buffer, unsigned int size){
00053     return ((ODBCTapeStream *)(my->tsp))->ReadLine(buffer, size);
00054 }
00055 
00056 int rewind_player(struct player *my){
00057     return ((ODBCTapeStream *)(my->tsp))->Rewind();
00058 }
00059 
00060 void close_player(struct player *my){
00061     ODBCTapeStream::CloseStream(my);
00062 }
00063 
00064 /*** SHAPER ***/
00065 int open_shaper(struct shaper *my, char *fname, char *flags){
00066     /*  complicated things occur here.  just as soon as we figure out where
00067      *  we store the shape data with ODBC. -mh  */
00068     gl_error("ODBC does not support shapers (yet!)");
00069     return 0;
00070 }
00071 
00072 char *read_shaper(struct shaper *my,char *buffer,unsigned int size){
00073     return ((ODBCTapeStream *)(my->tsp))->ReadLine(buffer, size);
00074 }
00075 
00076 int rewind_shaper(struct shaper *my){
00077     return ((ODBCTapeStream *)(my->tsp))->Rewind();
00078 }
00079 
00080 void close_shaper(struct shaper *my){
00081     ODBCTapeStream::CloseStream(my);
00082 }
00083 
00084 /*** RECORDER ***/
00085 int open_recorder(struct recorder *my, char *fname, char *flags){
00086     char buff[128];
00087     time_t now=time(NULL);
00088     OBJECT *obj=OBJECTHDR(my);
00089 
00090     my->tsp=ODBCTapeStream::OpenStream(my, fname, flags);
00091     if(NULL == my->tsp){
00092         gl_error("recorder DB %s: unable to connect.", fname);
00093         my->status=TS_DONE;
00094         return 0;
00095     }
00096     my->status=TS_OPEN;
00097     my->type=FT_ODBC;
00098     my->samples=0;
00099     sprintf(buff, "%s %d", obj->parent->oclass->name, obj->id);
00100 #ifdef WIN32
00101     ((ODBCTapeStream *)(my->tsp))->PrintHeader(asctime(localtime(&now)), getenv("USERNAME"), getenv("MACHINENAME"),
00102         buff/***/, my->property, my->trigger[0]=='\0'?"(none)":my->trigger,
00103         (long)my->interval, my->limit);
00104 #else
00105     my->tsp->PrintHeader(asctime(localtime(&now)), getenv("USER"),
00106         getenv("HOST"), buff/***/, my->property, my->trigger[0]=='\0'?"(none)":my->trigger,
00107         my->interval, my->limit);
00108 #endif
00109     return 1;
00110 }
00111 
00112 int write_recorder(struct recorder *my, char *timestamp, char *value){
00113     return ((ODBCTapeStream *)(my->tsp))->Write(timestamp, value);
00114 }
00115 
00116 void close_recorder(struct recorder *my){
00117     //  write "# EOF"?  maybe not?
00118     ODBCTapeStream::CloseStream(my);
00119 }
00120 
00121 /*** COLLECTOR ***/
00122 /*  mostly a copy-paste of Recorder, with my->group instead of buff and the snprintf. -mh */
00123 int open_collector(struct collector *my, char *fname, char *flags){
00124     time_t now=time(NULL);
00125     OBJECT *obj=OBJECTHDR(my);
00126 
00127     my->tsp=ODBCTapeStream::OpenStream(my, fname, flags);
00128     if(NULL == my->tsp){
00129         gl_error("collector DB %s: unable to connect.", fname);
00130         my->status=TS_DONE;
00131         return 0;
00132     }
00133     my->status=TS_OPEN;
00134     my->type=FT_ODBC;
00135     my->samples=0;
00136 #ifdef WIN32
00137     ((ODBCTapeStream *)(my->tsp))->PrintHeader(asctime(localtime(&now)), getenv("USERNAME"), getenv("MACHINENAME"),
00138         my->group, my->property, my->trigger[0]=='\0'?"(none)":my->trigger,
00139         (long)my->interval, my->limit);
00140 #else
00141     my->tsp->PrintHeader(asctime(localtime(&now)), getenv("USER"),
00142         getenv("HOST"), my->group, my->property, my->trigger[0]=='\0'?"(none)":my->trigger,
00143         my->interval, my->limit);
00144 #endif
00145     return 1;
00146 }
00147 
00148 int write_collector(struct collector *my, char *timestamp, char *value){
00149     return ((ODBCTapeStream *)(my->tsp))->Write(timestamp, value);
00150 }
00151 
00152 void close_collector(struct collector *my){
00153     //  write "# EOF"?  maybe not?
00154     ODBCTapeStream::CloseStream(my);
00155 }
00156 
00157 //  end of odbc.cpp

GridLAB-DTM Version 1.0
An open-source project initiated by the US Department of Energy