Beispiel #1
0
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);
	}
}
Beispiel #2
0
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);
		}

	}
	
}