const boost::shared_ptr<Trigger> trigger = scan->getTrigger1(); #if USE_IS if(m_isDict) { ISInfoInt binNumber(0); m_isDict->insert("SCTAPIServer.currentBin", binNumber); ISInfoInt maxNumber(scanPoints.size()-1); m_isDict->insert("SCTAPIServer.maxBin", maxNumber); } #endif
whereas the CC publishes its STATUS via CalibrationController/src/CalibrationControllerImpl?.cpp's
void CalibrationControllerImpl::updateStatus() { Sct::BugReport("BUG01","CCImpl.cpp","In updateStatus 1/4"); string name = SctNames::getControlDataName(); Sct::BugReport("BUG01","CCImpl.cpp","In updateStatus 2/4"); name += ".Status"; Sct::BugReport("BUG01","CCImpl.cpp","In updateStatus 3/4"); ISUtilities::addOrUpdateOrMessage(name, status, __FILE__, __LINE__, MRS_DIAGNOSTIC); Sct::BugReport("BUG01","CCImpl.cpp","In updateStatus 4/4"); }
which uses SCT/src/ISUtilities.cpp's
void ISUtilities::addOrUpdateOrThrow(std::string& name, ISInfo& info, const std::string& file, int line, severity sev){ ISInfoDictionary& is = SctNames::getISDictionary(); ISInfo::Status st=is.contains(name); if ( st==ISInfo::Success ) { st = is.update(name, info); } else if ( st==ISInfo::NotFound ) { st = is.insert(name, info); } if (st != ISInfo::Success) { throw IsException(st, "CalibrationControllerImpl can't update status", file, line); } }
and
void ISUtilities::addOrUpdateOrMessage(std::string& name, ISInfo& info, const std::string& file, int line, severity sev){ try { addOrUpdateOrThrow(name, info, file, line, sev); }catch(Throwable& e){ e.sendToMrs(sev); } }
which relies on the CalibrationControllerImpl?'s "status" object being a CalibrationController/src/IS/CalibrationControllerStatus?.h which derives
class CalibrationControllerStatus: public ISInfo
and thus has to implement a
void publishGuts( ISostream & out ){ out << (int)status << updateOption << currentSequence << currentTest << currentScanIndex; }
method which the ISUtilities use to guarantee that they can pass it to is.insert