VOID CNdasAutoRegister::Update(ximeta::CSubject* pChangedSubject) { CNdasDeviceHeartbeatListener* pListener = pGetNdasDeviceHeartbeatListner(); // // Ignore other than subscribed heartbeat listener // if (pListener == pChangedSubject) { NDAS_DEVICE_HEARTBEAT_DATA hbData; pListener->GetHeartbeatData(&hbData); NDAS_DEVICE_ID deviceId = {0}; ::CopyMemory(&deviceId, hbData.remoteAddr.Node, sizeof(deviceId)); ACCESS_MASK autoRegAccess = m_data.GetAutoRegAccess(deviceId); if (!autoRegAccess) { return; } // // If already registered, do nothing // CRefObjPtr<CNdasDevice> pDevice = pGetNdasDevice(deviceId); if (NULL != pDevice.p) { return; } ::NdasLogEventInformation( EVT_NDASSVC_INFO_AUTOREG_NDAS_DEVICE_FOUND, NULL, 0, sizeof(deviceId), NULL, &deviceId); (VOID) AddToQueue(deviceId, autoRegAccess); } }
void CNdasDevice::Update(ximeta::CSubject* pChangedSubject) { ximeta::CAutoLock autolock(this); CNdasDeviceHeartbeatListener* pListener = pGetNdasDeviceHeartbeatListner(); // // Ignore other than subscribed heartbeat listener // if (pListener == pChangedSubject) { NDAS_DEVICE_HEARTBEAT_DATA hbData; pListener->GetHeartbeatData(&hbData); // // matching device id (address) only // // LPX_ADDRESS and NDAS_DEVICE_ID are different type // so we cannot merely use CompareLpxAddress function here // if (0 == ::memcmp( hbData.remoteAddr.Node, m_deviceId.Node, sizeof(m_deviceId.Node[0]) * 6)) { OnDiscovered( hbData.localAddr, hbData.remoteAddr, hbData.ucType, hbData.ucVersion); } } }