/* * File: MoversightSimulationPeerStateVisualization.cc * Author: jgaebler * * Created on November 1, 2012, 4:30 PM */ #include "MoversightSimulationPeerStateVisualization.h" #include "Moversight.h" #include "MoversightService.h" #include "ModuleAccess.h" #include "Dispatcher.h" #include "event/MoversightEvent.h" #include "event/events/ConnectionLostEvent.h" #include "event/events/ConnectionReEstablishedEvent.h" #include "ms/events/PeerJoinedEvent.h" #include "ms/events/PeerLeftEvent.h" #include "fd/events/PeerReconnectedEvent.h" #include "mt/events/PendingPeersEvent.h" namespace ubeeme { namespace moversight { #undef DEBUG #define DEBUG(msg) if (module.isPrintDebugVISU()){ MOV_DEBUG <<"VISU@"<(this); dispatcher.subscribe(this); dispatcher.subscribe(this); dispatcher.subscribe(this); dispatcher.subscribe(this); dispatcher.subscribe(this); dispatcher.subscribe(this); } void MoversightSimulationPeerStateVisualization::finalise() { dispatcher.unsubscribeAll(this); } void MoversightSimulationPeerStateVisualization::handleEvent( const MoversightEvent& e) { updateSimUI(); } void MoversightSimulationPeerStateVisualization::handleEvent( const ConnectionLostEvent& e) { module.bubble( "connection lost"); } void MoversightSimulationPeerStateVisualization::handleEvent( const ConnectionReEstablishedEvent& e) { module.bubble( "connection re-established"); } /** * @brief Handle PeerJoinedEvent. * * Draw a bubble with information about the joined peer. * * @param e The event. */ void MoversightSimulationPeerStateVisualization::handleEvent( const PeerJoinedEvent& e) { std::ostringstream buf; buf << "peer " << e.getPeerID() << " (" << e.getDescription().getDescription() << ") added"; module.bubble(buf.str().c_str()); } void MoversightSimulationPeerStateVisualization::handleEvent( const PeerLeftEvent& e) { std::ostringstream buf; buf << "peer " << e.getPeer().getPeerID() << " left the group"; module.bubble(buf.str().c_str()); } void MoversightSimulationPeerStateVisualization::handleEvent( const PeerReconnectedEvent& e) { std::ostringstream buf; buf << "peer " << e.getPeerID() << " reconnect to group"; module.bubble(buf.str().c_str()); } void MoversightSimulationPeerStateVisualization::handleEvent( const PendingPeersEvent& e) { std::ostringstream buf; buf << "peers " << e.getPeerIDList() << " are pending"; module.bubble(buf.str().c_str()); } /** * @brief Returns the display string of the parent module used to display the moversight state. * @return The display string of the parent module. */ cDisplayString& MoversightSimulationPeerStateVisualization::getMoversightDisplayString() { return module.getParentModule()->getDisplayString(); } /** * @brief Updates the UI of the simulation. */ void MoversightSimulationPeerStateVisualization::updateSimUI() { updateRole(); updateState(); } /** * @brief Updates the role of the peer. */ void MoversightSimulationPeerStateVisualization::updateRole() { cDisplayString & dis = getMoversightDisplayString(); //display role if (dispatcher.getMembershipService().getLocalPeer().isMaster()) { dis.setTagArg("i", 0, "device/laptop"); } else { dis.setTagArg("i", 0, "device/pocketpc"); } } /** * @brief Updates the state of the peer. */ void MoversightSimulationPeerStateVisualization::updateState() { cDisplayString & dis = getMoversightDisplayString(); State state = dispatcher.getMembershipService().getLocalPeer().getState(); switch (state) { case INVITING: case WAITING_FOR_ROSTER: { dis.setTagArg("i2", 0, "status/hourglass"); break; } case JOINED: { dis.setTagArg("i2", 0, "status/green"); break; } case LEAVING: { dis.setTagArg("i2", 0, "status/down"); break; } case PENDING: { dis.setTagArg("i2", 0, "status/excl3"); break; } case EXCLUDED: { dis.setTagArg("i", 0, "block/process"); dis.setTagArg("i2", 0, "status/noentry"); break; } case DEAD: { dis.setTagArg("i", 0, "block/process"); dis.setTagArg("i2", 0, "status/red"); break; } default: // DISJOINED case { dis.setTagArg("i", 0, "block/process"); dis.setTagArg("i2", 0, "status/off"); break; } }//End switch } } }