00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include <apps/fountain/fountain_thread.h>
00024
00025 #include <core/exceptions/software.h>
00026 #include <fvutils/net/fuse_server.h>
00027
00028 #include <string>
00029 #include <cstdio>
00030
00031 using namespace fawkes;
00032 using namespace firevision;
00033
00034
00035
00036
00037
00038
00039
00040 FountainThread::FountainThread()
00041 : Thread("FountainThread", OPMODE_WAITFORWAKEUP)
00042 {
00043 __fuse_server = NULL;
00044 __service = NULL;
00045 }
00046
00047
00048
00049 FountainThread::~FountainThread()
00050 {
00051 if ( __fuse_server ) {
00052 thread_collector->remove(__fuse_server);
00053 delete __fuse_server;
00054 __fuse_server = NULL;
00055 }
00056 delete __service;
00057 __service = NULL;
00058 }
00059
00060
00061 void
00062 FountainThread::init()
00063 {
00064
00065 unsigned int port = 0;
00066 try {
00067 port = config->get_uint("/firevision/fountain/tcp_port");
00068 if ( port > 0xFFFF ) {
00069 throw OutOfBoundsException("Network port out of bounds", port, 0, 0xFFFF);
00070 }
00071 __fuse_server = new FuseServer(port, thread_collector);
00072 thread_collector->add(__fuse_server);
00073 } catch (Exception &e) {
00074 e.print_trace();
00075 throw;
00076 }
00077
00078
00079 std::string sname = "Fountain on ";
00080 sname += nnresolver->short_hostname();
00081 __service = new NetworkService(sname.c_str(), "_fountain._tcp", port);
00082 service_publisher->publish_service(__service);
00083 }
00084
00085
00086 void
00087 FountainThread::finalize()
00088 {
00089 service_publisher->unpublish_service(__service);
00090
00091 thread_collector->remove(__fuse_server);
00092 delete __fuse_server;
00093 __fuse_server = NULL;
00094 delete __service;
00095 __service = NULL;
00096 }
00097
00098
00099 void
00100 FountainThread::loop()
00101 {
00102
00103 printf("Sucker Loop\n");
00104 }