BESTransmitter.cc
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "BESTransmitter.h"
00034 #include "BESInternalError.h"
00035
00036 bool
00037 BESTransmitter::add_method( string method_name, p_transmitter trans_method )
00038 {
00039 BESTransmitter::_method_citer i ;
00040 i = _method_list.find( method_name ) ;
00041 if( i == _method_list.end() )
00042 {
00043 _method_list[method_name] = trans_method ;
00044 return true ;
00045 }
00046 return false ;
00047 }
00048
00049 bool
00050 BESTransmitter::remove_method( string method_name )
00051 {
00052 BESTransmitter::_method_iter i ;
00053 i = _method_list.find( method_name ) ;
00054 if( i != _method_list.end() )
00055 {
00056 _method_list.erase( i ) ;
00057 return true ;
00058 }
00059 return false ;
00060 }
00061
00062 p_transmitter
00063 BESTransmitter::find_method( string method_name )
00064 {
00065 BESTransmitter::_method_citer i ;
00066 i = _method_list.find( method_name ) ;
00067 if( i != _method_list.end() )
00068 {
00069 p_transmitter p = (*i).second ;
00070 return p ;
00071 }
00072 return 0 ;
00073 }
00074
00075 void
00076 BESTransmitter::send_response( const string &method_name,
00077 BESResponseObject *response,
00078 BESDataHandlerInterface &dhi )
00079 {
00080 p_transmitter p = find_method( method_name ) ;
00081 if( p )
00082 {
00083 p( response, dhi ) ;
00084 }
00085 else
00086 {
00087 string err = (string)"Unable to transmit response, no transmit for "
00088 + method_name ;
00089 throw BESInternalError( err, __FILE__, __LINE__ ) ;
00090 }
00091 }
00092
00100 void
00101 BESTransmitter::dump( ostream &strm ) const
00102 {
00103 strm << BESIndent::LMarg << "BESTransmitter::dump - ("
00104 << (void *)this << ")" << endl ;
00105 BESIndent::Indent() ;
00106 if( _method_list.size() )
00107 {
00108 strm << BESIndent::LMarg << "registered methods:" << endl ;
00109 BESIndent::Indent() ;
00110 _method_citer i = _method_list.begin() ;
00111 _method_citer ie = _method_list.end() ;
00112 for( ; i != ie; i++ )
00113 {
00114 strm << BESIndent::LMarg << (*i).first << ": "
00115 << (void *)(*i).second << endl ;
00116 }
00117 BESIndent::UnIndent() ;
00118 }
00119 else
00120 {
00121 strm << BESIndent::LMarg << "registered methods: none" << endl ;
00122 }
00123 BESIndent::UnIndent() ;
00124 }
00125