mrDarker
2025-03-24 3628a707a38e1c590216c5983c9b97b9c742f86c
SourceCode/Bond/Servo/CPin.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,129 @@
#include "stdafx.h"
#include "CPin.h"
#include "CEquipment.h"
namespace SERVO {
   CPin::CPin()
   {
      m_pEquipment = nullptr;
      m_pConnectedPin = nullptr;
   }
   CPin::CPin(CEquipment* pEquipment, PinType type, char* pszName)
   {
      m_type = type;
      m_strName = pszName;
      m_pEquipment = pEquipment;
      m_pConnectedPin = nullptr;
   }
   CPin::~CPin()
   {
   }
   std::string& CPin::getName()
   {
      return m_strName;
   }
   int CPin::getType()
   {
      return m_type;
   }
   BOOL CPin::isConnected()
   {
      return m_pConnectedPin != NULL;
   }
   CPin* CPin::getConnectedPin()
   {
      return m_pConnectedPin;
   }
   CEquipment* CPin::getEquipment()
   {
      return m_pEquipment;
   }
   // æŽ¥å—连接
   // pPin -- æŒ‡å®šè¦è¿žæŽ¥çš„pin
   // è¿”回 >= 0连接成功
   int CPin::accpetConnect(CPin* pPin)
   {
      assert(pPin);
      // æ˜¯å¦å·²ç»è¿žæŽ¥
      if (m_pConnectedPin != NULL) {
         return -1;
      }
      // å¿…须是一个输入一个输出(一个公一个母)
      if (m_type == pPin->getType()) {
         return -2;
      }
      m_pConnectedPin = pPin;
      return 0;
   }
   int CPin::connectPin(CPin* pPin)
   {
      assert(pPin);
      // æ˜¯å¦å·²ç»è¿žæŽ¥
      if (m_pConnectedPin != NULL) {
         return -1;
      }
      // å¿…须是一个输入一个输出(一个公一个母)
      if (m_type == pPin->getType()) {
         return -2;
      }
      // å¯¹æ–¹æŽ¥å—连接?
      int nRet = pPin->accpetConnect(this);
      if (nRet < 0) {
         return nRet;
      }
      m_pConnectedPin = pPin;
      return 0;
   }
   int CPin::disconnect()
   {
      if (m_pConnectedPin == NULL) {
         return -1;
      }
      assert(m_pConnectedPin->m_pConnectedPin == this);
      m_pConnectedPin->m_pConnectedPin = NULL;
      m_pConnectedPin = NULL;
      return 0;
   }
   int CPin::sendIntent(CIntent* pIntent)
   {
      if (m_pConnectedPin != NULL) {
         return m_pConnectedPin->recvIntent(pIntent);
      }
      return FLOW_REJECT;
   }
   int CPin::recvIntent(CIntent* pIntent)
   {
      assert(m_pEquipment);
      return m_pEquipment->recvIntent(this, pIntent);
   }
}