コード例 #1
0
ファイル: localbb.cpp プロジェクト: Arkapravo/Player-3.0.2
////////////////////////////////////////////////////////////////////////////////
// Subscribe a device to a group. Send out data messages for the current group entries.
int LocalBB::ProcessSubscribeGroupMessage(QueuePointer &resp_queue, player_msghdr * hdr, void * data)
{
	if (!CheckHeader(hdr))
			return -1;

	// Add the device to the listeners map
	player_blackboard_entry_t *request = reinterpret_cast<player_blackboard_entry_t*>(data);
	std::vector<BlackBoardEntry> entries = SubscribeGroup(request->group, resp_queue, hdr->addr);

	for (std::vector<BlackBoardEntry>::iterator itr = entries.begin(); itr != entries.end(); itr++)
	{
		BlackBoardEntry current_value = *itr;
		player_blackboard_entry_t response = ToPlayerBlackBoardEntry(current_value);
		size_t response_size = sizeof(player_blackboard_entry_t) + response.key_count + response.group_count + response.data_count;

		// Publish the blackboard entries
		this->Publish(this->device_addr,
			resp_queue,
			PLAYER_MSGTYPE_DATA,
			PLAYER_BLACKBOARD_DATA_UPDATE,
			&response,
			response_size,
			NULL);

		if (response.key)
		{
			delete [] response.key;
		}
		if (response.group)
		{
			delete [] response.group;
		}
		if (response.data)
		{
			delete [] response.data;
		}
	}

	// Then send an empty ack
	this->Publish(
		this->device_addr,
		resp_queue,
		PLAYER_MSGTYPE_RESP_ACK,
		PLAYER_BLACKBOARD_REQ_SUBSCRIBE_TO_GROUP,
		NULL,
		0,
		NULL);

	return 0;
}
コード例 #2
0
void CHyperFeedPriceProvider::OnRequest(CRequestBasePtr pRequest)
{
	switch(pRequest->m_enType)
	{
	case _enRequestLast:
		GetPrice(pRequest);
		break;
	case _enRequestRealtime:
		Subscribe(pRequest, false);
		break;
	case _enRequestGroup:
		{
			CGroupRequestPtr pGroupRequest = boost::shared_dynamic_cast<CGroupRequest>(pRequest);
			if(pGroupRequest)
			{
				if(enGroupRequestLastQuote == pGroupRequest->m_enGroupRequestType)
					GetGroupPrice(pGroupRequest->m_recParams);
				else
					SubscribeGroup(pGroupRequest->m_recParams, pGroupRequest->m_enGroupRequestType);
			}
		}
		break;
	}
}