// 处理已接收数据
bool UseTryTicketTask::Handle(const TransportProtocol* tp)
{
	bool result = false;

	string targetId("");
	TRY_TICKET_EVENT eventCode = TTE_UNKNOW;
		
	AmfParser parser;
	amf_object_handle root = parser.Decode((char*)tp->data, tp->GetDataLength());
	if (!root.isnull()) {
		// 解析成功协议
		if (root->type == DT_OBJECT) {
			// targetId
			amf_object_handle targetIdObject = root->get_child(TARGETID_PARAM);
			result = !targetIdObject.isnull() && targetIdObject->type == DT_STRING;
			if (result) {
				targetId = targetIdObject->strValue;
			}

			// event
			amf_object_handle eventObject = root->get_child(EVENT_PARAM);
			result = !eventObject.isnull() && eventObject->type == DT_INTEGER;
			if (result) {
				eventCode = (eventObject->intValue < TTE_UNKNOW ? (TRY_TICKET_EVENT)eventObject->intValue : TTE_UNKNOW);
			}

			if (result) {
				m_errType = LCC_ERR_SUCCESS;
				m_errMsg = "";
			}
		}

		// 解析失败协议
		if (!result) {
			int errType = 0;
			string errMsg = "";
			if (GetAMFProtocolError(root, errType, errMsg)) {
				m_errType = (LCC_ERR_TYPE)errType;
				m_errMsg = errMsg;
				result = true;
			}
		}
	}

	// 协议解析失败
	if (!result) {
		m_errType = LCC_ERR_PROTOCOLFAIL;
		m_errMsg = "";
	}

	// 通知listener
	if (NULL != m_listener) {
		m_listener->OnUseTryTicket(m_userId, m_errType, m_errMsg, targetId, eventCode);
	}
	
	return result;
}
Ejemplo n.º 2
0
/**
 * @brief   Helpful method for testing purposes.
 *
 * Compares this target's members with @p other target's.
 *
 * @param[in] other     target to compare with this target
 * @return              true if equal, else false.
 */
bool Target::isEqual(const Target& other) const
{
    if (targetId() != other.targetId()) {
        return false;
    }
    if (targetName() != other.targetName()) {
        return false;
    }

    int i = 0;
    int size = other.m_gestureRecognizers.size();
    if(size != m_gestureRecognizers.size()) {
        return false;
    }
    for(i = 0; i < size; ++i) {
        if (!m_gestureRecognizers[i]->isEqual(*other.m_gestureRecognizers[i])) {
            return false;
        }
    }
    return true;
}