summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEd Tanous <ed.tanous@intel.com>2017-06-26 21:08:40 +0300
committerEd Tanous <ed.tanous@intel.com>2017-06-26 21:08:40 +0300
commit7b4e3dae0477703143b8cb28b3a6abc9d4d0d83b (patch)
treeac89c4cb8ce43d534144f772c6b3620ffc3aa94c /src
parent4d92cbfe32ef6ee24547401cc06994baa84a24aa (diff)
downloadbmcweb-7b4e3dae0477703143b8cb28b3a6abc9d4d0d83b.tar.xz
Make dbus connections allow multiple connections
Fix static dependencies
Diffstat (limited to 'src')
-rw-r--r--src/webserver_main.cpp52
1 files changed, 19 insertions, 33 deletions
diff --git a/src/webserver_main.cpp b/src/webserver_main.cpp
index d20b8d5af2..ec21f6d48d 100644
--- a/src/webserver_main.cpp
+++ b/src/webserver_main.cpp
@@ -54,7 +54,7 @@ void on_sensor_update(boost::system::error_code ec, dbus::message s) {
s.unpack(object_name).unpack(values);
crow::json::wvalue j;
for (auto& value : values) {
- //std::cout << "Got sensor value for " << s.get_path() << "\n";
+ // std::cout << "Got sensor value for " << s.get_path() << "\n";
boost::apply_visitor([&](auto val) { j[s.get_path()] = val; },
value.second);
}
@@ -107,39 +107,25 @@ int main(int argc, char** argv) {
CROW_ROUTE(app, "/sensorws")
.websocket()
.onopen([&](crow::websocket::connection& conn) {
- system_bus = std::make_shared<dbus::connection>(conn.get_io_service(),
- dbus::bus::system);
- sensor_match = std::make_shared<dbus::match>(
- *system_bus,
- "type='signal',path_namespace='/xyz/openbmc_project/sensors'");
-
- sensor_filter =
- std::make_shared<dbus::filter>(*system_bus, [](dbus::message& m) {
- auto member = m.get_member();
- return member == "PropertiesChanged";
- });
- /*
- std::function<void(boost::system::error_code, dbus::message)>
- sensor_callback = [&conn, sensor_callback](
- boost::system::error_code ec, dbus::message s) {
- std::string object_name;
- std::vector<std::pair<std::string, dbus::dbus_variant>> values;
- s.unpack(object_name).unpack(values);
- crow::json::wvalue j;
- for (auto& value : values) {
- std::cout << "Got sensor value for " << s.get_path() << "\n";
- boost::apply_visitor([&](auto val) { j[s.get_path()] = val; },
- value.second);
- }
- for (auto conn : users) {
- conn.send_text(crow::json::dump(j));
- }
- sensor_filter->async_dispatch(sensor_callback);
- };
- */
- sensor_filter->async_dispatch(on_sensor_update);
+ if (!system_bus) {
+ system_bus = std::make_shared<dbus::connection>(conn.get_io_service(),
+ dbus::bus::system);
+ }
+ if (!sensor_match) {
+ sensor_match = std::make_shared<dbus::match>(
+ *system_bus,
+ "type='signal',path_namespace='/xyz/openbmc_project/sensors'");
+ }
+ if (!sensor_filter) {
+ sensor_filter =
+ std::make_shared<dbus::filter>(*system_bus, [](dbus::message& m) {
+ auto member = m.get_member();
+ return member == "PropertiesChanged";
+ });
+ sensor_filter->async_dispatch(on_sensor_update);
+ }
+
users.insert(&conn);
- ;
})
.onclose(
[&](crow::websocket::connection& conn, const std::string& reason) {