📄 server.h
字号:
#ifndef server_HH_#define server_HH_#include <map>#ifdef HAVE_STDLIB_H# include <stdlib.h>#endif#include "CCS_skel.h"#ifdef _MSC_VERusing namespace std;#endifclass Controller_impl;class Thermometer_impl : public virtual POA_CCS::Thermometer {public: // IDL attributes virtual CCS::ModelType model() throw(CORBA::SystemException); virtual CCS::AssetType asset_num() throw(CORBA::SystemException); virtual CCS::TempType temperature() throw(CORBA::SystemException); virtual CCS::LocType location() throw(CORBA::SystemException); virtual void location(const char * loc) throw(CORBA::SystemException); // Constructor and destructor Thermometer_impl(CCS::AssetType anum, const char * location); virtual ~Thermometer_impl(); static Controller_impl * m_ctrl; // My controllerprotected: const CCS::AssetType m_anum; // My asset numberprivate: // Helper functions CCS::ModelType get_model(); CCS::TempType get_temp(); CCS::LocType get_loc(); void set_loc(const char * new_loc); // Copy and assignment not supported Thermometer_impl(const Thermometer_impl &); void operator=(const Thermometer_impl &);};class Thermostat_impl : public virtual POA_CCS::Thermostat, public virtual Thermometer_impl {public: // IDL operations virtual CCS::TempType get_nominal() throw(CORBA::SystemException); virtual CCS::TempType set_nominal( CCS::TempType new_temp ) throw( CORBA::SystemException, CCS::Thermostat::BadTemp ); // Constructor and destructor Thermostat_impl( CCS::AssetType anum, const char * location, CCS::TempType nominal_temp ); virtual ~Thermostat_impl() {}private: // Helper functions CCS::TempType get_nominal_temp(); CCS::TempType set_nominal_temp(CCS::TempType new_temp) throw(CCS::Thermostat::BadTemp); // Copy and assignment not supported Thermostat_impl(const Thermostat_impl &); void operator=(const Thermostat_impl &);};class Controller_impl : public virtual POA_CCS::Controller {public: // IDL operations virtual CCS::Controller::ThermometerSeq * list() throw(CORBA::SystemException); virtual void find(CCS::Controller::SearchSeq & slist) throw(CORBA::SystemException); virtual void change( const CCS::Controller::ThermostatSeq & tlist, CORBA::Short delta ) throw( CORBA::SystemException, CCS::Controller::EChange ); // Constructor and destructor Controller_impl() {} virtual ~Controller_impl() {} // Helper functions to allow thermometers and // thermostats to add themselves to the m_assets map // and to remove themselves again. void add_impl(CCS::AssetType anum, Thermometer_impl * tip); void remove_impl(CCS::AssetType anum);private: // Map of known servants typedef map<CCS::AssetType, Thermometer_impl *> AssetMap; AssetMap m_assets; // Copy and assignment not supported Controller_impl(const Controller_impl &); void operator=(const Controller_impl &); // Function object for the find_if algorithm to search for // devices by location and model string. class StrFinder { public: StrFinder( CCS::Controller::SearchCriterion sc, const char * str ) : m_sc(sc), m_str(str) {} bool operator()( pair<const CCS::AssetType, Thermometer_impl *> & p ) const { switch (m_sc) { case CCS::Controller::LOCATION: return strcmp(p.second->location(), m_str) == 0; break; case CCS::Controller::MODEL: return strcmp(p.second->model(), m_str) == 0; break; default: abort(); // Precondition violation } return 0; // Stops compiler warning } private: CCS::Controller::SearchCriterion m_sc; const char * m_str; };};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -