-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathOptionsManager.cpp
91 lines (82 loc) · 2.13 KB
/
OptionsManager.cpp
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
#include "OptionsManager.h"
OptionsManager::OptionsManager(void)
{
onOptionEventConnection = EventController::getInstance()->connect_onServerEvent(L"option", boost::bind(&OptionsManager::onOptionEvent, this, _1));
}
OptionsManager::~OptionsManager(void)
{
optionsMap.clear();
onOptionEventConnection.disconnect();
instanceCreated = false;
}
OptionsManager*
OptionsManager::getInstance()
{
if(!instanceCreated)
{
optionsManager = new OptionsManager();
instanceCreated = true;
}
return optionsManager;
}
void
OptionsManager::onOptionEvent(Element* pElement)
{
if(pElement->name == L"option")
{
wstring option = L"";
wstring value = L"";
vector<Attribute>::iterator it;
for(it = pElement->attributes.begin(); it != pElement->attributes.end(); it++)
{
if(it->name == L"name") {
option = it->value;
} else if(it->name == L"value") {
value = it->value;
}
}
if(option != L"" && value != L"")
{
DebugPrint(L"Received option event: %ls => %ls\n", option.c_str(), value.c_str());
addOption(option, value);
}
}
}
wstring
OptionsManager::getOption(wstring option)
{
stdext::hash_map<wstring, wstring>::iterator it;
it = optionsMap.find(option);
if(it != optionsMap.end())
{
return it->second;
}
return L"";
}
bool
OptionsManager::addOption(wstring option, wstring value)
{
stdext::hash_map<wstring, wstring>::iterator it;
it = optionsMap.find(option);
if(it == optionsMap.end())
{
DebugPrint(L"Adding option: %ls => %ls\n", option.c_str(), value.c_str());
optionsMap.insert(OptionPair(option, value));
} else {
DebugPrint(L"Changing option: %ls => %ls\n", option.c_str(), value.c_str());
it->second = value;
}
signalOnOptionChanged(option);
return true;
}
boost::signals::connection
OptionsManager::connect_onOptionChanged(const signal_optionChanged::slot_type& s)
{
boost::signals::connection conn = signalOnOptionChanged.connect(s);
stdext::hash_map<wstring, wstring>::iterator it;
for(it = optionsMap.begin(); it != optionsMap.end(); it++)
{
signalOnOptionChanged(it->first);
}
return conn;
}