sys.cpp 2.51 KB
#include "sys.h"
#include "gateway.h"
#include "user.h"
#include "dbproxy.h"
#include <gateway_msg.pb.h>
#include <db.pb.h>
#include "shop.h"

sys_t* g_sys;
proto_head_t g_proto_head;

std::string g_serialize_to_string( ::google::protobuf::Message* msg )
{
	std::string bin_new;
	
	try {
		msg->SerializeToString(&bin_new);
	} catch (...) {
		ERROR_LOG("");
	}
	return bin_new;
}

bool sys_t::is_run()
{
	return this->b_game_server_boot_msg;
}

sys_t::sys_t()
{
	this->b_game_server_boot_msg = false;
	this->is_release = true;
	this->platform = 0;
}

//////////////////////////////////////////////////////////////////////////

int gateway_t::on_sys_information_msg(el::lib_tcp_peer_info_t* peer_fd_info,
									  google::protobuf::Message* msg,
									  user_t* user)
{
	gateway_msg::sys_information_msg_res out;
	out.set_time_second(el_async::get_now_sec());
	user->send_msg_res(&out);
	return 0;
}

int gateway_t::on_sys_test_msg(el::lib_tcp_peer_info_t* peer_fd_info,
							   google::protobuf::Message* msg,
							   user_t* user)
{
	gateway_msg::sys_test_msg_res out;
	user->send_msg_res(&out);
	return 0;
}

int gateway_t::on_gm_change_item_msg(el::lib_tcp_peer_info_t* peer_fd_info,
							   google::protobuf::Message* msg,
							   user_t* user)
{
	if (g_sys->is_release){
		return 0;
	}
	
	auto in = (gateway_msg::gm_change_item_msg*)msg;
	ITEM_ID item_id = in->id();
	int32_t cnt = in->cnt();
	common_msg::item_cfg_t* ic = g_item_cfg_mgr->find(item_id);
	if (NULL == ic){
		return 0;
	}
	if (0 < cnt){
		user->item_mgr.add(item_id, cnt);
	} else {
		user->item_mgr.reduce(item_id, -cnt);
	}
	return 0;
}

//////////////////////////////////////////////////////////////////////////

int dbproxy_t::on_game_server_boot_msg_res(el::lib_tcp_peer_info_t* peer_fd_info,
										   google::protobuf::Message* msg,
										   USER_ID uid, uint32_t seq,
										   uint32_t ret, user_t* user){
	if (SUCC != ret){
		return ret;
	}
	db_msg::game_server_boot_msg_res* in = (db_msg::game_server_boot_msg_res*) msg;

	{//event
		FOREACH_PB(in->events, index){
			const common_msg::event_t& event = in->events(index);
			if (common_msg::FOREVER_EVENT_SYS_SHOP_SALES_VOLUME == event.type()){
				shop_element_t* se = g_shop_cfg_mgr->find(event.id());
				if (se->e_time != event.time()){
					g_sys->event_mgr.db_del_event(0, event.type(), event.id());
					continue;
				}
			}
			g_sys->event_mgr.load_from_db(event.type(), event.id(), event.data(), event.time(), event.str_data(), event.bin_data());
		}
	}

	g_sys->b_game_server_boot_msg = true;

	return SUCC;
}