rank.h 1.8 KB
#pragma once

#include <common.h>
#include <share_msg.pb.h>

struct rank_user_t : public share_msg::rank_user_t
{
	bool operator<(const rank_user_t& r) const{
		if (this->val() != r.val()) {
			return r.val() < this->val();
		} else {
			if (this->tim() != r.tim()) {
				return this->tim() < r.tim();
			} else {
				return this->user_show().uid() < r.user_show().uid();
			}
		}
		return false;
	}
};

class user_t;

struct rank_exprie_time_cfg_t{
	uint32_t id;
	GAME_ID gameid;
	std::vector<share_msg::item_t> reward50_vec;

	uint32_t time_begin;
	uint32_t time_end;
	std::map<uint32_t, std::vector<share_msg::item_t>> reward_map;//no, reward
	rank_exprie_time_cfg_t(){
		this->id = 0;
		this->gameid = 0;
		this->time_begin = 0;
		this->time_end = 0;
	}
};

class rank_mgr_t{
public:
	rank_mgr_t();
public:
	// 返回查找的用户	
	rank_user_t* find(GAME_ID game_id, USER_ID uid);
	// 找到最小值 	
	const rank_user_t* find_last(GAME_ID game_id);

	void db_update_rank(const share_msg::rank_user_t& rank_user);
	void db_delete_user_rank(GAME_ID game_id, USER_ID uid);

	void clear(std::set<rank_user_t>& rank_user_set);
public:
	std::map<GAME_ID, std::set<rank_user_t> > rank_map;//desc: rank info
};

extern rank_mgr_t* g_rank_mgr;

class exprie_rank_mgr_t{
public:
	exprie_rank_mgr_t(){}
	bool load_cfg();
	std::map<uint32_t, rank_exprie_time_cfg_t> cfg_map;//idx, rank_exprie_time_cfg_t

	std::map<uint32_t, std::set<rank_user_t> > rank_map;//rank_exprie_reward.xml 中的 data id,  desc: rank info
	rank_user_t* find( uint32_t id, USER_ID uid );
	void db_update_rank(const share_msg::rank_user_t& rank_user);
	void db_delete_rank( uint32_t id );
	void clear();
	// 通过配置表rank_exprie_reward.xml的ID查找 [2019/1/17 Administrator]
	rank_exprie_time_cfg_t* find(uint32_t id);
protected:
private:
};

extern exprie_rank_mgr_t* g_exprie_rank_mgr;