LAPTOP-SNT8I5JK\Boounion
2025-01-13 c6bfb4fc0801c4cb1f9dd2128df5f20d2e9cf27d
SourceCode/Bond/Servo/Model.cpp
@@ -1,21 +1,271 @@
#include "stdafx.h"
#include "Model.h"
#include "Log.h"
#include "Common.h"
CModel::CModel()
{
   m_pObservableEmitter = nullptr;
   m_pObservable = nullptr;
}
CModel::~CModel()
{
}
IObservable* CModel::getObservable()
{
   return m_pObservable;
}
void CModel::setWorkDir(const char* pszWorkDir)
{
   m_strWorkDir = pszWorkDir;
}
int CModel::init()
{
   CString strIniFile;
   CString strUnitId;
   strIniFile.Format(_T("%s\\ServoConfiguration.ini"), (LPTSTR)(LPCTSTR)m_strWorkDir);
   m_configuration.setFilepath((LPTSTR)(LPCTSTR)strIniFile);
   m_configuration.getUnitId(strUnitId);
   // Log
   CString strLogDir;
   strLogDir.Format(_T("%s\\Log"), (LPTSTR)(LPCTSTR)m_strWorkDir);
   ::CreateDirectory(strLogDir, NULL);
   CLog::GetLog()->SetOnLogCallback([&](int level, const char* pszMessage) -> void {
      notifyTextAndInt(RX_CODE_LOG, pszMessage, level);
   });
   CLog::GetLog()->SetAutoAppendTimeString(TRUE);
   CLog::GetLog()->SetOutputTarget(OT_FILE);
   CLog::GetLog()->SetLogsDir(strLogDir);
   CLog::GetLog()->SetEquipmentId((LPTSTR)(LPCTSTR)strUnitId);
   LOGI("\r\n\r\n~~~ Prog Start! ~~~");
   m_pObservable = RX_AllocaObservable([&](IObservableEmitter* e) -> void {
      m_pObservableEmitter = e;         // 保存发射器
   });
   m_hsmsPassive.init(this, "APP", 7000);
   return 0;
}
int CModel::term()
{
   m_hsmsPassive.term();
   CLog::GetLog()->SetOnLogCallback(nullptr);
   return 0;
}
int CModel::notify(int code)
{
   /* code */
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 1;
}
int CModel::notifyPtr(int code, void* ptr/* = NULL*/)
{
   /* code */
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         pAny->setPtrValue("ptr", ptr);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 1;
}
int CModel::notifyObj(int code, IRxObject* pObj)
{
   /* code */
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         pAny->setObject("obj", pObj);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 1;
}
int CModel::notifyObjAndPtr(int code, IRxObject* pObj, void* ptr)
{
   /* code */
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         pAny->setObject("obj", pObj);
         pAny->setPtrValue("ptr", ptr);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 1;
}
int CModel::notifyInt(int code, int exCode)
{
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         pAny->setIntValue("exCode", exCode);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 0;
}
int CModel::notifyInt2(int code, int exCode, int exCode2)
{
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         pAny->setIntValue("exCode", exCode);
         pAny->setIntValue("exCode2", exCode2);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 0;
}
int CModel::notifyDouble(int code, double dValue)
{
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         pAny->setDoubleValue("value", dValue);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 0;
}
int CModel::notifyObjAndInt(int code, IRxObject* pObj1, IRxObject* pObj2, int exCode)
{
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         if (pObj1 != nullptr) pAny->setObject("obj", pObj1);
         if (pObj2 != nullptr) pAny->setObject("obj2", pObj2);
         pAny->setIntValue("exCode", exCode);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 0;
}
int CModel::notifyText(int code, const char* pszText)
{
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         pAny->setStringValue("text", pszText);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 0;
}
int CModel::notifyTextAndInt(int code, const char* pszText, int exCode)
{
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         pAny->setStringValue("text", pszText);
         pAny->setIntValue("exCode", exCode);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 0;
}
int CModel::notifyPtrAndInt(int code, void* ptr1, void* ptr2, int exCode)
{
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         pAny->setPtrValue("ptr", ptr1);
         pAny->setPtrValue("ptr1", ptr1);
         pAny->setPtrValue("ptr2", ptr2);
         pAny->setIntValue("exCode", exCode);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 0;
}
int CModel::notifyMesMsg(int code, int stream, int function, const char* pszText)
{
   if (m_pObservableEmitter != NULL) {
      IAny* pAny = RX_AllocaAny();
      if (pAny != NULL) {
         pAny->addRef();
         pAny->setCode(code);
         pAny->setIntValue("stream", stream);
         pAny->setIntValue("function", function);
         pAny->setStringValue("text", pszText);
         m_pObservableEmitter->onNext(pAny);
         pAny->release();
      }
   }
   return 0;
}