00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033 00034 00035 00036 00037 00038 00039 00040 #include "jaus/core/liveness/liveness.h" 00041 #include "jaus/core/events/event.h" 00042 #include <iostream> 00043 00044 using namespace JAUS; 00045 00046 const std::string Liveness::Name = "urn:jaus:jss:core:Liveness"; 00047 00053 Liveness::Liveness() : Child(Service::ID(Liveness::Name, 1.0), 00054 Service::ID(Events::Name, 1.0)) 00055 { 00056 00057 } 00058 00059 00065 Liveness::~Liveness() 00066 { 00067 } 00068 00069 00079 bool Liveness::GenerateEvent(const Events::Subscription& info) const 00080 { 00081 if(info.mpQueryMessage->GetMessageCode() == QUERY_HEARTBEAT_PULSE) 00082 { 00083 ReportHeartbeatPulse report; 00084 SendEvent(info, &report); 00085 return true; 00086 } 00087 00088 return false; 00089 } 00090 00091 00107 bool Liveness::IsEventSupported(const Events::Type type, 00108 const double requestedPeriodicRate, 00109 const Message* queryMessage, 00110 double& confirmedPeriodicRate, 00111 std::string& errorMessage) const 00112 { 00113 // Support any type of event for REPORT_HEARTBEAT_PULSE data. 00114 if(queryMessage->GetMessageCode() == QUERY_HEARTBEAT_PULSE) 00115 { 00116 confirmedPeriodicRate = requestedPeriodicRate; 00117 return true; 00118 } 00119 return false; 00120 } 00121 00122 00134 void Liveness::Receive(const Message* message) 00135 { 00136 switch(message->GetMessageCode()) 00137 { 00138 case QUERY_HEARTBEAT_PULSE: 00139 { 00140 ReportHeartbeatPulse response(message->GetSourceID(), GetComponentID()); 00141 Send(&response); 00142 } 00143 break; 00144 case REPORT_HEARTBEAT_PULSE: 00145 { 00146 if(mDebugMessagesFlag) 00147 { 00148 Mutex::ScopedLock lock(&mDebugMessagesMutex); 00149 std::cout << "[" << GetServiceID().ToString() << "-" << mComponentID.ToString() << "] - Received Heartbeat Pulse from " << message->GetSourceID().ToString() << std::endl; 00150 } 00151 } 00152 break; 00153 default: 00154 break; 00155 } 00156 } 00157 00158 00173 Message* Liveness::CreateMessage(const UShort messageCode) const 00174 { 00175 Message* message; 00176 switch(messageCode) 00177 { 00178 case QUERY_HEARTBEAT_PULSE: 00179 message = new QueryHeartbeatPulse(); 00180 break; 00181 case REPORT_HEARTBEAT_PULSE: 00182 message = new ReportHeartbeatPulse(); 00183 break; 00184 default: 00185 message = NULL; 00186 break; 00187 } 00188 return message; 00189 } 00190 00191 00192 /* End of File */