void
ivi::settings::manager::dispatch(std::string request,
- struct libwebsocket * wsi)
+ libwebsocket * wsi)
{
if (request.empty()) {
response_callback response(wsi, std::string(), std::string());
}
}
+void
+ivi::settings::manager::subscribe_client(libwebsocket * wsi)
+{
+ clients_.push_back(wsi);
+}
+
+void
+ivi::settings::manager::unsubscribe_client(libwebsocket * wsi)
+{
+ auto const end = clients_.end();
+ for (auto i = clients_.begin; i != end; ++i)
+ if (*i == wsi)
+ clients_.erase(i);
+}
+
// Local Variables:
// mode:c++
*/
void dispatch(std::string request, libwebsocket * wsi);
+ /**
+ * Subscribe client on the other side of the WebSocket @a wsi to
+ * events created by settings plugins.
+ */
+ void subscribe_client(libwebsocket * wsi);
+
+ /**
+ * Unsubscribe client on the other side of the WebSocket @a wsi
+ * from receiving further settings plugin events.
+ */
+ void unsubscribe_client(libwebsocket * wsi);
+
private:
/**
/// Map of settings name to @c settings instance.
map_type settings_;
+ /**
+ * List of client WebSockets to be used for sending events to
+ * the client.
+ */
+ std::vector<libwebsocket *> clients_;
+
};
}
switch(reason) {
case LWS_CALLBACK_ESTABLISHED:
// Enable event dispatching to client.
-
+ manager->subscribe_client(wsi);
break;
+
+ case LWS_CALLBACK_CLOSED:
+ // Disable event dispatching to client.
+ manager->unsubscribe_client(wsi);
+ break;
+
case LWS_CALLBACK_RECEIVE:
// Request has come in from Settings app. Pass it on to the
// settings manager.