network_manager.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "network_manager.h"
00025 #include "thread_manager.h"
00026
00027 #include <core/exceptions/system.h>
00028 #include <netcomm/fawkes/server_thread.h>
00029 #include <netcomm/fawkes/handler.h>
00030 #include <netcomm/utils/resolver.h>
00031 #include <utils/logging/liblogger.h>
00032 #ifdef HAVE_AVAHI
00033 #include <netcomm/dns-sd/avahi_thread.h>
00034 #include <netcomm/service_discovery/service.h>
00035 #else
00036 #include <netcomm/service_discovery/dummy_service_publisher.h>
00037 #include <netcomm/service_discovery/dummy_service_browser.h>
00038 #endif
00039
00040 #include <cstdlib>
00041
00042 using namespace fawkes;
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056 FawkesNetworkManager::FawkesNetworkManager(FawkesThreadManager *thread_manager,
00057 unsigned short int fawkes_port,
00058 const char *service_name)
00059 {
00060 this->fawkes_port = fawkes_port;
00061 this->thread_manager = thread_manager;
00062 fawkes_network_thread = new FawkesNetworkServerThread(fawkes_port, thread_manager);
00063 thread_manager->add(fawkes_network_thread);
00064 #ifdef HAVE_AVAHI
00065 avahi_thread = new AvahiThread();
00066 _service_publisher = avahi_thread;
00067 _service_browser = avahi_thread;
00068 thread_manager->add(avahi_thread);
00069 _nnresolver = new NetworkNameResolver(avahi_thread);
00070 NetworkService *fawkes_service = new NetworkService(_nnresolver, service_name,
00071 "_fawkes._tcp", fawkes_port);
00072 avahi_thread->publish_service(fawkes_service);
00073 delete fawkes_service;
00074 #else
00075 LibLogger::log_warn("FawkesNetworkManager", "Avahi not available, only using dummies "
00076 "for service publishing/browsing.");
00077 _service_publisher = new DummyServicePublisher();
00078 _service_browser = new DummyServiceBrowser();
00079 _nnresolver = new NetworkNameResolver();
00080 #endif
00081 }
00082
00083
00084
00085 FawkesNetworkManager::~FawkesNetworkManager()
00086 {
00087 thread_manager->remove(fawkes_network_thread);
00088 delete fawkes_network_thread;
00089 #ifdef HAVE_AVAHI
00090 thread_manager->remove(avahi_thread);
00091 delete avahi_thread;
00092 #else
00093 delete _service_publisher;
00094 delete _service_browser;
00095 #endif
00096 delete _nnresolver;
00097 }
00098
00099
00100
00101
00102
00103 FawkesNetworkHub *
00104 FawkesNetworkManager::hub()
00105 {
00106 return fawkes_network_thread;
00107 }
00108
00109
00110
00111
00112
00113 NetworkNameResolver *
00114 FawkesNetworkManager::nnresolver()
00115 {
00116 return _nnresolver;
00117 }
00118
00119
00120
00121
00122
00123 ServicePublisher *
00124 FawkesNetworkManager::service_publisher()
00125 {
00126 return _service_publisher;
00127 }
00128
00129
00130
00131
00132
00133 ServiceBrowser *
00134 FawkesNetworkManager::service_browser()
00135 {
00136 return _service_browser;
00137 }