/* * mesbus.cpp * (C) gsd 2001 * ver 1.1 */ // #include <sstream> // for standard #include <strstream> // for g++ #include <algorithm> #include "mesbus.h" using namespace std; // the key sequencer for m_busid long CMessageBus::sm_busid = 0; // the router map<long, CMessageBus*> CMessageBus::sm_router; // constructor: assign a uniq id to "m_busid", and register "this" at router CMessageBus::CMessageBus() : m_busid(sm_busid) { ++sm_busid; sm_router[m_busid] = this; } // destructor: deregister from router CMessageBus::~CMessageBus() { sm_router.erase( m_busid); } // send a message to id bool CMessageBus::send( long id, string message) { if ( sm_router.find( id ) != sm_router.end() ) { sm_router[id]->receive( m_busid, message); return true; } else { return false; } } // receive a message void CMessageBus::receive( long sender_id, string message) { cout << "Device id = " << m_busid << ", sender = " << sender_id << ", received = " << message << endl; } string CMessageBus::getsid() const { // ostringstream os; ostrstream os; os << getid(); return os.str(); } void CMessageBus::printrouter() { map<long, CMessageBus*>::const_iterator ci; for( ci = sm_router.begin(); ci != sm_router.end(); ++ci) { cout << ci->first << '\t' << ci->second << endl; } } /* void CMessageBus::pRouterEntry(const CMessageBus *p) { cout << p->first << '\t' << p->second << endl; } void CMessageBus::pRouter() { for_each( sm_router.begin(); sm_router.end(); mem_fun(pRouterEntry)); } */