![]() |
VR-Forces 4.0.4 Class Documentation
|
/****************************************************************************** ** Copyright (c) 2012 MAK Technologies, Inc. ** All rights reserved. ******************************************************************************/ /****************************************************************************** ** $RCSfile: DtExampleEventSignaler.h,v $ $Revision: 1.4 $ $State: Exp $ ******************************************************************************/ //\file DtExampleEventSignaler.h //\brief Contains DtExampleEventSignaler class. //An event signaler is a class that is used to signal boost style signals from //the gui thread to the networking thread #pragma once #include <vrfGuiCore/vrfGuiCore.h> #include <vrvUtil/event_signal.h> #include <vrvUtil/DtVirtualBaseClass.h> #include <vrvUtil/signalslib.h> namespace makVrv { class DtDe; class DtSharedSettingsManager; } class DtExampleEventSignaler : public makVrv::DtVirtualBaseClass { public: //Get an instance of the simulation settings automatically from the //settings manager. this will return a different signaler depending //on what thread this function is called from. static DtExampleEventSignaler& instance(const makVrv::DtSharedSettingsManager&); //Get an instance of the simulation settings from the event queue //interface. This will return the same signaler independent of the thread. static DtExampleEventSignaler& instance(makVrv::DtEventQueueInterface&); //Find an instance of the signaler, for an interface, if one does not //exist it will not be created. //\retval NULL if the instance does not exist. static DtExampleEventSignaler* findInstance( makVrv::DtEventQueueInterface*); //DTOR virtual ~DtExampleEventSignaler(); //@name Signals //\brief Signal to send a pdu from the network thread makVrv::event_signal<void ()> signal_sendPdu; protected: DtExampleEventSignaler(makVrv::DtEventQueueInterface& eqi); private: DtExampleEventSignaler(const DtExampleEventSignaler&); DtExampleEventSignaler& operator=(const DtExampleEventSignaler&); };
DtExampleEventSignaler.cxx
/****************************************************************************** ** Copyright (c) 2012 MAK Technologies, Inc. ** All rights reserved. ******************************************************************************/ /****************************************************************************** ** $RCSfile: DtExampleEventSignaler.cxx,v $ $Revision: 1.10 $ $State: Exp $ ******************************************************************************/ //\file DtExampleEventSignaler.cxx //\brief Contains DtExampleEventSignaler class. #include "DtExampleEventSignaler.h" #include <vrvCore/DtSharedSettingsManager.h> #include <vlutil/vlExceptions.h> using namespace makVrv; DtExampleEventSignaler& DtExampleEventSignaler::instance( DtEventQueueInterface& eqi) { DtExampleEventSignaler* sig = dynamic_cast<DtExampleEventSignaler*>( eqi.findInstance("DtExampleEventSignaler")); if(!sig) { sig = new DtExampleEventSignaler(eqi); eqi.registerInstance("DtExampleEventSignaler",sig); } return *sig; } DtExampleEventSignaler& DtExampleEventSignaler::instance( const DtSharedSettingsManager& manager) { DtEventQueueInterface* eqi = manager.findThisThreadEventQueue(); if(eqi) { return DtExampleEventSignaler::instance(*eqi); } else { DtTHROW_NEW(DtCorruptedState, "Unable to access Event Queue from manager for DtExampleEventSignaler."); } } DtExampleEventSignaler* DtExampleEventSignaler::findInstance( DtEventQueueInterface* eqi ) { return dynamic_cast<DtExampleEventSignaler*>( eqi->findInstance("DtExampleEventSignaler")); } DtExampleEventSignaler::~DtExampleEventSignaler() { } DtExampleEventSignaler::DtExampleEventSignaler(DtEventQueueInterface& eqi) : DtVirtualBaseClass() , signal_sendPdu(&DtExampleEventSignaler::signal_sendPdu,eqi) { }