orca-robotics INTRODUCTION Overview Download and Install Quick Start Documentation Publications REPOSITORY Interfaces Components Libraries Utilities Software Map DEVELOPER Tutorials Examples Dev Guide Dashboard Wiki login/pass: orca/orca PEOPLE Contributors Users Project Download Mailing lists
|
statusI.h00001 /* 00002 * Orca-Robotics Project: Components for robotics 00003 * http://orca-robotics.sf.net/ 00004 * Copyright (c) 2004-2008 Alex Brooks, Alexei Makarenko, Tobias Kaupp 00005 * 00006 * This copy of Orca is licensed to you under the terms described in 00007 * the LICENSE file included in this distribution. 00008 * 00009 */ 00010 00011 #ifndef ORCAICE_DETAIL_STATUS_I_H 00012 #define ORCAICE_DETAIL_STATUS_I_H 00013 00014 #include <orca/status.h> 00015 #include <hydroiceutil/localstatus.h> 00016 #include <gbxsickacfr/gbxiceutilacfr/timer.h> 00017 00018 #include <IceStorm/IceStorm.h> 00019 #include <IceUtil/Mutex.h> 00020 00021 namespace orcaice 00022 { 00023 namespace detail 00024 { 00025 00026 // An implementation of the (remote) Status interface. 00027 class StatusI : public virtual orca::Status, public hydroiceutil::LocalStatus 00028 { 00029 public: 00030 00031 StatusI( const orcaice::Context& context ); 00032 00033 // from orca::Status interface: remote calls 00034 virtual ::orca::StatusData getData(const ::Ice::Current& ) const; 00035 virtual void subscribe(const ::orca::StatusConsumerPrx&, const ::Ice::Current& = ::Ice::Current()); 00036 virtual void unsubscribe(const ::orca::StatusConsumerPrx&, const ::Ice::Current& = ::Ice::Current()); 00037 00038 // from LocalStatus 00039 virtual void publishEvent( const hydroiceutil::NameStatusMap& subsystems ); 00040 00041 private: 00042 00043 bool connectToIceStorm(); 00044 void icestormConnectFailed( const std::string &topicName, 00045 orca::StatusConsumerPrx &publisher, 00046 bool isStatusTopicRequired ); 00047 00048 void sendToIceStorm( const orca::StatusData &statusData ); 00049 00050 IceStorm::TopicPrx topicPrx_; 00051 orca::StatusConsumerPrx publisherPrx_; 00052 std::string topicName_; 00053 bool isStatusTopicRequired_; 00054 mutable orca::StatusData statusData_; 00055 00056 // Protect from simultaneous get/set of statusData_ 00057 IceUtil::Mutex mutex_; 00058 gbxsickacfr::gbxiceutilacfr::Timer upTimer_; 00059 orcaice::Context context_; 00060 }; 00061 00062 } // namespace 00063 } // namespace 00064 00065 #endif |
Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)