db_connection.h
上传用户:psq1974
上传日期:2007-01-06
资源大小:1195k
文件大小:5k
源码类别:

mpeg/mp3

开发平台:

C/C++

  1. /* Copyright (C) 1998, 1999 State University of New York at Stony Brook
  2.    Author: Andrew V. Shuvalov ( andrew@ecsl.cs.sunysb.edu )
  3.    Software license is located in file "COPYING"
  4. */
  5. #ifndef _db_connection_h_
  6. #define _db_connection_h_
  7. #include <string>
  8. #include <vector>
  9. #include <map>
  10. #include <iostream>
  11. #include <time.h>
  12. #include "string_of_text.h"
  13. #include "vs_types.h"
  14. #include "basic_exception.h"
  15. #include "channel_info.h"
  16. /** subclass if iostream, hide from user the communication details
  17.  */
  18. class db_iostream : public iostream {
  19.   bool before_mark;
  20.   bool everything_read;
  21.   vector< string > messages;
  22. public:
  23.   db_iostream();
  24.   db_iostream( streambuf *sb ) : iostream( sb ), everything_read( true ) {}
  25.   void wait_input() { everything_read = false; before_mark = true; }
  26.   /** s will remains empty only if it is nothing to read */
  27.   istream& operator >>( string &s );
  28.   /** before reading, check for everything_read flag.
  29.       If nothing to wait from input, return. 
  30.       After sending the command that should return something, user must
  31.       call wait_input, which indicates that sequence of -> and <-
  32.       should appear in input before '>>>'
  33.   */
  34.   void skip_to_prompt();
  35.   void skip_to_prompt( vector< string > &messages );
  36.   void append_messages( vector< string > &msgs );
  37. };
  38. /** superuser use this to edit server preferences */
  39. class ServerConfigItem {
  40. public:
  41.   string key;
  42.   string value;
  43.   string help;
  44. public:
  45.   ServerConfigItem() {}
  46.   ServerConfigItem( const string &k, const string &v, const string &h ) :
  47.     key( k ), value( v ), help( h ) {}
  48.   ServerConfigItem( const ServerConfigItem &c ) {
  49.     *this = c;
  50.   }
  51.   const ServerConfigItem &operator =( const ServerConfigItem &c )
  52.     {
  53.       if( this != &c )
  54. {
  55.   key = c.key;
  56.   value = c.value;
  57.   help = c.help;
  58. }
  59.       return *this;
  60.     }
  61. };
  62. typedef vector< ServerConfigItem > ServerConfigItemVec;
  63. /** encapsulate all connections to database server 
  64.  */
  65. class DbConnection {
  66.   /** holds i/o stream */
  67.   db_iostream *dbSockStream;
  68.   /** tree of movies */
  69.   map< int, MovieItem > movies;
  70.   
  71. public:
  72.   static const char _database_name_[] = "database";
  73.   static const char _debug_level_[] = "debug";
  74.   static const char _list_movies_[] = "listmovies";
  75.   static const char _list_captions_[] = "listcaptions";
  76.   static const char _list_mov_files_[] = "listmovfiles";
  77.   static const char _superuser_[] = "superuser";
  78.   static const char _save_properties_[] = "saveproperties";
  79.   static const char _list_properties_[] = "listproperties";
  80.   static const char _set_property_[] = "setproperty";
  81.   static const char _list_channels_[] = "listchannels";
  82. public:
  83.   DbConnection();
  84.   ~DbConnection();
  85.   void connect( const string &server, unsigned int port );
  86.   bool login_superuser( const string &passwd, vector< string > &messages );
  87.   // work with data
  88.   const map< int, MovieItem > &get_movies() const { return movies; }
  89.   const MovieItem &get_movie_by_id( int id );
  90.   void wait_input()
  91.     {
  92.       dbSockStream->wait_input();
  93.     }
  94.   void skip_to_prompt( vector< string > &messages );
  95.   // real actions
  96.   void set_debug( vector< string > &messages, int debugL );
  97.   string get_database_name( vector< string > &messages );
  98.   void load_new_database( vector< string > &messages, const string &dbname );
  99.   void load_movie_text( vector< string >&messages, int id, TextOfMovieT *tom);
  100.   /** the db_connection class keeps the list of files for each movie. This 
  101.       call only select files by time and fill back the empty list movieFiles.
  102.       const session it passed to let access the preferences
  103.   */
  104.   void getMovieFileListByTime( int id, const struct tm &t, 
  105.        MovieFilesT &movieFiles, 
  106.        const Session &session,
  107.        vector< string > &messages );
  108.   void loadMovieFileList( int id, MovieItem &mi, const Session &session,
  109.   vector< string > &messages );
  110.   void loadServerProperties( vector< string > &messages,
  111.     ServerConfigItemVec &props );
  112.   void saveServerProperties( vector< string > &messages,
  113.      ServerConfigItemVec &props );
  114.   void fill_channellist( vector< string > &messages,
  115.  channel_infos_mapT &channel_infos_map );
  116.   /** tell database server that this movie should be recorded now */
  117.   void start_recording( int channel_id, vector< string > &messages );
  118.   void stop_recording( int channel_id, vector< string > &messages );
  119. };
  120. /** subclass of basic exceptions 
  121.  */
  122. class NetworkException : public BasicException {
  123. public:
  124.   NetworkException( const char *format, ... );
  125. };
  126. /** subclass of class BasicException */
  127. class SyntaxException : public BasicException {
  128. public:
  129.   SyntaxException( const char *format, ... );
  130. };
  131. class DatabaseException : public BasicException {
  132. public:
  133.   DatabaseException( const char *format, ... );
  134. };
  135. #endif _db_connection_h_