// 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; } }
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; }