void CHelperUnit::SendClientClose(int uid) { NETOutputPacket transPacket; transPacket.Begin(CLIENT_CLOSE_PACKET); transPacket.WriteInt(uid); transPacket.WriteInt(TGlobal::_svid); transPacket.End(); if((int)_helperpool->m_svidlist.size() > 0) { int svid = TGlobal::LoopSvid(_helperpool->m_svidlist); CHelperUnit *pHelperUnit = NULL; map<int, CHelperUnit*>::iterator iterHelper = _helperpool->m_helpermap.find(svid); if(iterHelper != _helperpool->m_helpermap.end()) { pHelperUnit = iterHelper->second; if(pHelperUnit != NULL) { pHelperUnit->append_pkg(transPacket.packet_buf(), transPacket.packet_size()); pHelperUnit->send_to_logic(_helperTimer); } } else { g_pErrorLog->logMsg("%s||Cannot find helper, svid:[%d]", __FUNCTION__, svid); } } }
int CHelperUnit::_pay_res(NETInputPacket* pack) { int ret = 0; int code = 0; string json, result; Reader r; Value v; unsigned long flow; CClientUnit *c; CDecoderUnit *d; NETOutputPacket out; CEncryptDecrypt ed; log_debug("-------- CHelperUnit::_pay_res begin --------"); code = pack->ReadByte(); json = pack->ReadString(); log_debug("ErrCode: %d", code); log_debug("JSON: %s", json.c_str()); if (r.parse(json, v)) { flow = v["flow"].asUInt64(); result = v["result"].asString(); out.Begin(SERVER_CMD_REP); out.WriteInt(0); out.WriteString(result); out.End(); } else { /* error handle */ out.Begin(SERVER_CMD_REP); out.WriteInt(1); out.WriteString(""); out.End(); log_debug("-------- CHelperUnit::_pay_res error --------"); ret = -1; } ed.EncryptBuffer(&out); /* 编码 */ c = _get_client_by_id(flow, &d); if (c && c->get_state() != CONN_FATAL_ERROR) { c->add_rsp_buf(out.packet_buf(), out.packet_size()); ret = c->send(); } log_debug("-------- CHelperUnit::_pay_res end --------"); return ret; }