#include "stdafx.h" #include "kernel.h" #include "resource.h" #pragma warning (disable : 4244) //---------------------------------------------- CChannel --------- IMPLEMENT_SERIAL(CChannel, CObject, 0) CChannel::CChannel():CObject() { m_nCurDeviceNo = 0; m_nCommunicateType = 0; // 通信类型 0: 串口通信协议 1:网络通信协议 } CChannel::~CChannel() { int a = m_Devices.GetSize(); for (int i = 0; i < m_Devices.GetSize(); i++) { if( m_Devices[i] ) { delete m_Devices[i]; } } m_Devices.RemoveAll(); } CChannel &CChannel::operator=(CChannel& comport) { m_nCommunicateType = comport.m_nCommunicateType; m_strName = comport.m_strName; return *this; } CChannel* CChannel::Clone(void) { CChannel* pComport = new CChannel; *pComport = *this; return pComport; } void CChannel::Serialize(CArchive& ar) { CObject::Serialize(ar); if(ar.IsStoring()) { ar << m_nCommunicateType; ar << m_strName; } else { ar >> m_nCommunicateType; ar >> m_strName; } m_Devices.Serialize(ar); if ( !ar.IsStoring() ) { int size = m_Devices.GetSize(); for (int i = 0; i < size; i++) { CDevice* pDev = m_Devices.GetAt(i); pDev->m_pChannel = this; } } } // 取的使用的设备个数 int CChannel::GetUsedDeviceNum() { int nUsedNum = 0; int size = m_Devices.GetSize(); for (int i = 0; i < size; i++) { CDevice* pDev = m_Devices.GetAt(i); if (pDev->m_bUsed) { nUsedNum++; } } return nUsedNum; } // 找到下一个通讯的设备 void CChannel::MoveToNextDevice() { // 有控制命令的话优先处理 int size = m_Devices.GetSize(); for (int i = 0; i < size; i++) { CDevice* pDev = m_Devices.GetAt(i); if (pDev->m_bUsed && pDev->m_bHasAction) { m_nCurDeviceNo = i; return; } } // 否则轮询到下一个设备 BOOL bUsed = false; do { m_nCurDeviceNo++; m_nCurDeviceNo = m_nCurDeviceNo % (m_Devices.GetSize()); bUsed = m_Devices[m_nCurDeviceNo]->m_bUsed; } while (!bUsed); } void CChannel::FreshData(void) { if (0 == GetUsedDeviceNum()) { return; } }