コード例 #1
0
ファイル: servicecoreop.cpp プロジェクト: etorth/mir2x
// ServiceCore accepts net packages from *many* sessions and based on it to create
// the player object for a one to one map
//
// So servicecore <-> session is 1 to N, means we have to put put pointer of session
// in the net package otherwise we can't find the session even we have session's 
// address, session is a sync-driver, even we have it's address we can't find it
//
void ServiceCore::On_MPK_NETPACKAGE(const MessagePack &rstMPK)
{
    AMNetPackage stAMNP;
    std::memcpy(&stAMNP, rstMPK.Data(), sizeof(AMNetPackage));

    uint8_t *pDataBuf = nullptr;
    if(stAMNP.DataLen){
        if(stAMNP.Data){
            pDataBuf = stAMNP.Data;
        }else{
            pDataBuf = stAMNP.DataBuf;
        }
    }

    OperateNet(stAMNP.ChannID, stAMNP.Type, pDataBuf, stAMNP.DataLen);

    if(stAMNP.Data){
        delete [] stAMNP.Data;
    }
}
コード例 #2
0
INT32 CYWXmlBase::NETXml_Proc(string &strErr)
{
	DBG_PRINT(("=======NETXml_Proc Begin============="));
	MutexLock();
	INT32 errcode = 0;
	errcode = BuildProc();
	if(errcode != XML_SUCCESS)
	{
		MutexUnlock();
		strErr = "组装请求信息错误";
		return XML_INTERNAL_ERR_NO;
	}
	
	FILE *fp;	
	string sInputInfo;
	string sOutputInfo;
	
	//读取XML文件至BUFF
	memset(tmpBuff, 0, sizeof(tmpBuff));
	if( (fp = fopen(KJ_XML_REQUEST_FILE, "rb")) == NULL )
	{
		MutexUnlock();
		strErr = "未找到请求XML文件";
		return XML_INTERNAL_ERR_NO;
	}
	fseek( fp, 0L, SEEK_END );	
	int dataLen = ftell( fp );				
	DBG_PRINT(("Req filelen: %d", dataLen));
	
	fseek( fp, 0L, SEEK_SET );	
	fread( (void *)tmpBuff, dataLen, 1, fp);

	fclose(fp);
	sInputInfo = tmpBuff;
	
	//设置服务器IP,端口和路径
	
	CNetTransfers *p=NULL;
	p=g_netManager->GetTransHandle();

	m_servip =p->m_serverIP;
	m_servport =p->m_serverPort;
	m_servpath =p->m_serverFile;
	DBG_PRINT(("m_servip= %s",m_servip.c_str()));
	DBG_PRINT(("m_servport= %s",m_servport.c_str()));
	DBG_PRINT(("m_servpath= %s",m_servpath.c_str()));

	OperateNet((char *)m_ywxml_gy.m_zskl.c_str(), m_servip, m_servport, m_servpath, "", m_ywxml_gy.m_nsrsbh, sInputInfo, sOutputInfo, strErr);
	
	//接收数据写文件
	memset(tmpBuff, 0, sizeof(tmpBuff));
	sprintf((INT8 *)tmpBuff, "%s", sOutputInfo.c_str());
	UINT32 tmpLen = sOutputInfo.length();
	DBG_PRINT(("tmpLen = %u", tmpLen));
	
	if(tmpLen > 0)
	{
		if( (fp = fopen(KJ_XML_RESPONSE_FILE, "wb")) == NULL )
		{
			MutexUnlock();
			strErr = "未找到应答XML文件";
			return XML_INTERNAL_ERR_NO;
		}
		fwrite( (void *)tmpBuff, tmpLen, 1, fp);
		fclose(fp);
		
		errcode = ParseProc();
		if(errcode != XML_SUCCESS)
		{
			MutexUnlock();
			strErr = "解析应答数据错误";
			return XML_INTERNAL_ERR_NO;
		}
		
		errcode = atoi(m_retInfo.m_retCode.c_str());
		DBG_PRINT(("errcode = %d", errcode));
		if(errcode != 0)
		{
			MutexUnlock();
			strErr = m_retInfo.m_retMsg;
			return errcode;
		}
	}
	else
	{
		MutexUnlock();
		return XML_NET_ERR_NO;
	}

	MutexUnlock();
	DBG_PRINT(("=============NETXml_Proc End================"));
	return XML_SUCCESS;
}