-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrb_info.cpp
More file actions
120 lines (101 loc) · 2.6 KB
/
rb_info.cpp
File metadata and controls
120 lines (101 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include "rb_info.h"
#define RB_INFO_TABLE "tbl_rb_info"
const std::vector<long long> &RBInfoMgr::getCtlInfo(int roomId)
{
std::map<int, RBInfo>::iterator i = m_ctl.find(roomId);
if(i == m_ctl.end())
{
static std::vector<long long> empty;
return empty;
}
return i->second.info;
}
void RBInfoMgr::updateCtlInfo(int roomId, const std::vector<long long> &ctlInfo)
{
bool insert = false;
std::map<int, RBInfo>::iterator i = m_ctl.find(roomId);
if(i == m_ctl.end())
{
m_ctl.insert(std::make_pair(roomId, RBInfo(ctlInfo)));
insert = true;
}
else
{
i->second.info = ctlInfo;
insert = false;
}
save(roomId, insert);
}
void RBInfoMgr::init(DBMgr *pDbMgr)
{
m_pDbMgr = pDbMgr;
load();
}
void RBInfoMgr::save(int roomId, bool insert)
{
if(m_pDbMgr == NULL)
{
return;
}
std::map<int, RBInfo>::iterator i = m_ctl.find(roomId);
if(i == m_ctl.end())
{
return;
}
QueryParam qp;
qp.tableName = RB_INFO_TABLE;
qp.keyFieldName = "roomId";
qp.key = roomId;
msgpack::sbuffer buf, data;
msgpack::packer<msgpack::sbuffer> pack_(&buf);
msgpack::packer<msgpack::sbuffer> pker_(&data);
pack_.pack_map(2);
pack_.pack(std::string("roomId"));
pack_.pack(roomId);
pack_.pack(std::string("data"));
pker_.pack(i->second);
pack_.pack(std::string(data.data(), data.size()));
std::string strData(buf.data(), buf.size());
m_pDbMgr->set_cache_redis(qp, strData);
}
void RBInfoMgr::load()
{
if(m_pDbMgr == NULL)
{
return;
}
m_ctl.clear();
QueryParam qp;
qp.tableName = RB_INFO_TABLE;
DataVector result;
m_pDbMgr->get_cache_redis(qp, result);
if(result.empty())
{
return;
}
for(DataVector::iterator i = result.begin(); i != result.end(); ++i)
{
msgpack::unpacked unpack;
msgpack::unpack(&unpack, i->data(), i->length());
msgpack::object obj = unpack.get();
std::stringstream ss;
ss<<obj;
Json::Reader reader;
Json::Value value;
if(!reader.parse(ss.str(), value))
{
continue;
}
int roomId = value["roomId"].asInt();
std::string data(value["data"].asString());
RBInfo info;
msgpack::unpacker unpacker;
unpacker.reserve_buffer(data.length());
memcpy(unpacker.buffer(), data.c_str(), data.length());
unpacker.buffer_consumed(data.length());
msgpack::unpacked result_;
unpacker.next(&result_);
result_.get().convert(&info);
m_ctl.insert(std::make_pair(roomId, info));
}
}