00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "webview_thread.h"
00024 #include "static_processor.h"
00025 #include "blackboard_processor.h"
00026 #include "startpage_processor.h"
00027 #include "plugins_processor.h"
00028 #include "service_browse_handler.h"
00029 #include "header_generator.h"
00030 #include "footer_generator.h"
00031
00032 #include <core/version.h>
00033 #include <webview/request_dispatcher.h>
00034 #include <webview/page_reply.h>
00035 #include <webview/server.h>
00036
00037 using namespace fawkes;
00038
00039
00040
00041 const char *WebviewThread::STATIC_URL_PREFIX = "/static";
00042
00043 const char *WebviewThread::BLACKBOARD_URL_PREFIX = "/blackboard";
00044
00045 const char *WebviewThread::PLUGINS_URL_PREFIX = "/plugins";
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 WebviewThread::WebviewThread()
00057 : Thread("WebviewThread", Thread::OPMODE_CONTINUOUS),
00058 LoggerAspect(&__cache_logger)
00059 {
00060 set_prepfin_conc_loop(true);
00061
00062 }
00063
00064
00065 WebviewThread::~WebviewThread()
00066 {
00067 }
00068
00069 void
00070 WebviewThread::init()
00071 {
00072 __cfg_port = config->get_uint("/webview/port");
00073
00074 __cache_logger.clear();
00075
00076 __webview_service = new NetworkService(nnresolver, "Fawkes Webview on %h",
00077 "_http._tcp", __cfg_port);
00078 __webview_service->add_txt("fawkesver=%u.%u.%u",
00079 FAWKES_VERSION_MAJOR, FAWKES_VERSION_MINOR,
00080 FAWKES_VERSION_MICRO);
00081 __service_browse_handler = new WebviewServiceBrowseHandler(logger, __webview_service);
00082
00083 __header_gen = new WebviewHeaderGenerator();
00084 __footer_gen = new WebviewFooterGenerator(__service_browse_handler);
00085
00086 __dispatcher = new WebRequestDispatcher(__header_gen, __footer_gen);
00087 __webserver = new WebServer(__cfg_port, __dispatcher, logger);
00088
00089 __startpage_processor = new WebviewStartPageRequestProcessor(&__cache_logger);
00090 __static_processor = new WebviewStaticRequestProcessor(STATIC_URL_PREFIX, RESDIR"/webview", logger);
00091 __blackboard_processor = new WebviewBlackBoardRequestProcessor(BLACKBOARD_URL_PREFIX, blackboard);
00092 __plugins_processor = new WebviewPluginsRequestProcessor(PLUGINS_URL_PREFIX, plugin_manager);
00093 __dispatcher->add_processor("/", __startpage_processor);
00094 __dispatcher->add_processor(STATIC_URL_PREFIX, __static_processor);
00095 __dispatcher->add_processor(BLACKBOARD_URL_PREFIX, __blackboard_processor);
00096 __dispatcher->add_processor(PLUGINS_URL_PREFIX, __plugins_processor);
00097
00098 __header_gen->add_nav_entry(BLACKBOARD_URL_PREFIX, "BlackBoard");
00099 __header_gen->add_nav_entry(PLUGINS_URL_PREFIX, "Plugins");
00100
00101 logger->log_info("WebviewThread", "Listening for HTTP connections on port %u", __cfg_port);
00102
00103 service_publisher->publish_service(__webview_service);
00104 service_browser->watch_service("_http._tcp", __service_browse_handler);
00105
00106 }
00107
00108 void
00109 WebviewThread::finalize()
00110 {
00111 service_publisher->unpublish_service(__webview_service);
00112 service_browser->unwatch_service("_http._tcp", __service_browse_handler);
00113
00114 delete __webserver;
00115
00116 delete __webview_service;
00117 delete __service_browse_handler;
00118
00119 delete __dispatcher;
00120 delete __static_processor;
00121 delete __blackboard_processor;
00122 delete __startpage_processor;
00123 delete __plugins_processor;
00124 delete __footer_gen;
00125 delete __header_gen;
00126 __dispatcher = NULL;
00127 }
00128
00129
00130 void
00131 WebviewThread::loop()
00132 {
00133 __webserver->process();
00134 }