Beispiel #1
0
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);
		}
	}
}
Beispiel #2
0
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;
}