Beispiel #1
0
	Bool ParseDocument(void* pDoc, const void* pData)
	{
		//数据编码格式检验
		CFile::CodeType eCodeType = CFile::GetCodeType(pData);
		A_Exception(eCodeType != CFile::CODE_UNICODE && "CXmlFile Cannot Parser Unicode.");

		if (eCodeType == CFile::CODE_ASCII)
		{
			xml_document<Char> xmlDoc;
			try
			{
				xmlDoc.parse<0>((Char*)pData);
			}
			catch (rapidxml::parse_error& sExp)
			{
				FmtError("rapidxml parse error, what: %s, where: %s", sExp.what(), sExp.where<Char>());
				return false;
			}

			xml_node<Char>* pRoot = xmlDoc.first_node();
			if (pRoot)
			{
				AXmlElement* pXmlNode = ((AXmlDocument*)pDoc)->GetRoot();
				return ParseXmlNode<AString, Char>(pRoot, pXmlNode);
			}
		}
		else if (eCodeType == CFile::CODE_UTF8)
		{
			xml_document<Utf8> xmlDoc;
			try
			{
				xmlDoc.parse<0>((Utf8*)pData);
			}
			catch (rapidxml::parse_error& sExp)
			{
				FmtError("rapidxml parse error, what: %s, where: %s", sExp.what(), sExp.where<Char>());
				return false;
			}

			xml_node<Utf8>* pRoot = xmlDoc.first_node();
			if (pRoot)
			{
				UXmlElement* pXmlNode = ((UXmlDocument*)pDoc)->GetRoot();
				return ParseXmlNode<UString, Utf8>(pRoot, pXmlNode);
			}
		}
		return false;
	}
Beispiel #2
0
		virtual PVoid  Run(void* pArgs = 0)
		{
			if(m_pProto && g_App)
			{
				Bool bDispatch = g_App->DispatchProto(m_sXid, m_iSid, m_pProto);
				if (!bDispatch)
					FmtError("Dispatch Protocol Failed, Xid: (%u, %u), ProtocolId: %u, Sid: %u", m_sXid.Type, m_sXid.Id, m_pProto->GetType(), m_iSid);
			}
			return 0;
		}
	CProtocol*  CProtocolManager::CreateProtocol(ProtoType iType)
	{
		ProtocolMap::iterator it = m_mRegister.find(iType);
		if (it == m_mRegister.end())
		{
			FmtError("Protocol Unregister, Type: %d", iType);
			T_Exception("Protocol Unregister.");
			return 0;
		}

		CProtocol* pProto = m_mRegister[iType]->Clone();
		return pProto;
	}
Beispiel #4
0
		virtual PVoid  Run(void* pArgs = 0)
		{
			if(m_pMsg && g_App)
			{
				if (m_vXid.size())
				{
					for (Size_t i=0;i<m_vXid.size();i++)
					{
						m_pMsg->Target = m_vXid[i];
						Bool bDispatch = g_App->DispatchMsg(m_vXid[i], m_pMsg);
						if (!bDispatch)
							FmtError("Dispatch Message Failed, Xid: (%u, %u), MsgId: %u", m_vXid[i].Id, m_pMsg->Msg);
					}
				}
				else
				{
					Bool bDispatch = g_App->DispatchMsg(m_sXid, m_pMsg);
					if (!bDispatch)
						FmtError("Dispatch Message Failed, Xid: (%u, %u), MsgId: %u", m_sXid.Id, m_pMsg->Msg);
				}				
			}
			return 0;
		}
Beispiel #5
0
static  void    FFinish(void) {
//=========================

    if( StmtProc == PR_FMT ) {
        for(;;) {
            if( *Fmt_charptr != ' ' ) break;
            ++Fmt_charptr;
            if( Fmt_charptr >= Fmt_end ) break;
        }
        if( ( Fmt_charptr < Fmt_end ) && ( *Fmt_charptr != '!' ) ) {
            FmtError( FM_NO_EOS );
        }
    }
}