Properly instantiate plugins
This commit is contained in:
		
							parent
							
								
									41df92bb93
								
							
						
					
					
						commit
						ab1d3d1ced
					
				| @ -34,8 +34,9 @@ OSRM::OSRM(const char * server_ini_path, const bool use_shared_memory) | |||||||
| { | { | ||||||
|     if( !use_shared_memory ) { |     if( !use_shared_memory ) { | ||||||
|         if( !testDataFile(server_ini_path) ){ |         if( !testDataFile(server_ini_path) ){ | ||||||
|             std::string error_message = std::string(server_ini_path) + " not found"; |             std::string error_message(server_ini_path); | ||||||
|             throw OSRMException(error_message.c_str()); |             error_message += " not found"; | ||||||
|  |             throw OSRMException(error_message); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         IniFile serverConfig(server_ini_path); |         IniFile serverConfig(server_ini_path); | ||||||
| @ -91,56 +92,59 @@ OSRM::OSRM(const char * server_ini_path, const bool use_shared_memory) | |||||||
|                 base_path |                 base_path | ||||||
|         ); |         ); | ||||||
| 
 | 
 | ||||||
|         objects = new QueryObjectsStorage( |         query_data_facade = new InternalDataFacade<QueryEdge::EdgeData>(); | ||||||
|             hsgr_path.string(), |  | ||||||
|             ram_index_path.string(), |  | ||||||
|             file_index_path.string(), |  | ||||||
|             node_data_path.string(), |  | ||||||
|             edge_data_path.string(), |  | ||||||
|             name_data_path.string(), |  | ||||||
|             timestamp_path.string() |  | ||||||
|         ); |  | ||||||
| 
 |  | ||||||
|         RegisterPlugin(new HelloWorldPlugin()); |  | ||||||
|         RegisterPlugin(new LocatePlugin(objects)); |  | ||||||
|         RegisterPlugin(new NearestPlugin(objects)); |  | ||||||
|         RegisterPlugin(new TimestampPlugin(objects)); |  | ||||||
|         RegisterPlugin(new ViaRoutePlugin(objects)); |  | ||||||
| 
 | 
 | ||||||
|     } else { |     } else { | ||||||
|         //TODO: fetch pointers from shared memory
 |         //TODO: fetch pointers from shared memory
 | ||||||
| 
 |  | ||||||
|         //TODO: objects = new QueryObjectsStorage()
 |  | ||||||
|         query_data_facade = new SharedDataFacade<QueryEdge::EdgeData>(); |         query_data_facade = new SharedDataFacade<QueryEdge::EdgeData>(); | ||||||
| 
 |  | ||||||
|         //TODO: generate shared memory plugins
 |  | ||||||
|         RegisterPlugin(new HelloWorldPlugin()); |  | ||||||
|         RegisterPlugin(new LocatePlugin(objects)); |  | ||||||
|         RegisterPlugin(new NearestPlugin(objects)); |  | ||||||
|         RegisterPlugin(new TimestampPlugin(objects)); |  | ||||||
|         RegisterPlugin(new ViaRoutePlugin(objects)); |  | ||||||
| 
 |  | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     //The following plugins handle all requests.
 | ||||||
|  |     RegisterPlugin( | ||||||
|  |         new HelloWorldPlugin() | ||||||
|  |     ); | ||||||
|  |     RegisterPlugin( | ||||||
|  |         new LocatePlugin<BaseDataFacade<QueryEdge::EdgeData> >( | ||||||
|  |             query_data_facade | ||||||
|  |         ) | ||||||
|  |     ); | ||||||
|  |     RegisterPlugin( | ||||||
|  |         new NearestPlugin<BaseDataFacade<QueryEdge::EdgeData> >( | ||||||
|  |             query_data_facade | ||||||
|  |         ) | ||||||
|  |     ); | ||||||
|  |     RegisterPlugin( | ||||||
|  |         new TimestampPlugin<BaseDataFacade<QueryEdge::EdgeData> >( | ||||||
|  |             query_data_facade | ||||||
|  |         ) | ||||||
|  |     ); | ||||||
|  |     RegisterPlugin( | ||||||
|  |         new ViaRoutePlugin<BaseDataFacade<QueryEdge::EdgeData> >( | ||||||
|  |             query_data_facade | ||||||
|  |         ) | ||||||
|  |     ); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| OSRM::~OSRM() { | OSRM::~OSRM() { | ||||||
|     BOOST_FOREACH(PluginMap::value_type & plugin_pointer, pluginMap) { |     BOOST_FOREACH(PluginMap::value_type & plugin_pointer, plugin_map) { | ||||||
|         delete plugin_pointer.second; |         delete plugin_pointer.second; | ||||||
|     } |     } | ||||||
|     delete objects; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void OSRM::RegisterPlugin(BasePlugin * plugin) { | void OSRM::RegisterPlugin(BasePlugin * plugin) { | ||||||
|     SimpleLogger().Write()  << "loaded plugin: " << plugin->GetDescriptor(); |     SimpleLogger().Write()  << "loaded plugin: " << plugin->GetDescriptor(); | ||||||
|     if( pluginMap.find(plugin->GetDescriptor()) != pluginMap.end() ) { |     if( plugin_map.find(plugin->GetDescriptor()) != plugin_map.end() ) { | ||||||
|         delete pluginMap.find(plugin->GetDescriptor())->second; |         delete plugin_map.find(plugin->GetDescriptor())->second; | ||||||
|     } |     } | ||||||
|     pluginMap.emplace(plugin->GetDescriptor(), plugin); |     plugin_map.emplace(plugin->GetDescriptor(), plugin); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void OSRM::RunQuery(RouteParameters & route_parameters, http::Reply & reply) { | void OSRM::RunQuery(RouteParameters & route_parameters, http::Reply & reply) { | ||||||
|     const PluginMap::const_iterator & iter = pluginMap.find(route_parameters.service); |     const PluginMap::const_iterator & iter = plugin_map.find( | ||||||
|     if(pluginMap.end() != iter) { |         route_parameters.service | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     if(plugin_map.end() != iter) { | ||||||
|         reply.status = http::Reply::ok; |         reply.status = http::Reply::ok; | ||||||
|         iter->second->HandleRequest(route_parameters, reply ); |         iter->second->HandleRequest(route_parameters, reply ); | ||||||
|     } else { |     } else { | ||||||
|  | |||||||
| @ -57,8 +57,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |||||||
| class OSRM : boost::noncopyable { | class OSRM : boost::noncopyable { | ||||||
| private: | private: | ||||||
|     typedef boost::unordered_map<std::string, BasePlugin *> PluginMap; |     typedef boost::unordered_map<std::string, BasePlugin *> PluginMap; | ||||||
|     QueryObjectsStorage * objects; |  | ||||||
|     BaseDataFacade<QueryEdge::EdgeData> * query_data_facade; |  | ||||||
| 
 | 
 | ||||||
| public: | public: | ||||||
|     OSRM( |     OSRM( | ||||||
| @ -68,10 +66,15 @@ public: | |||||||
|     ); |     ); | ||||||
|     ~OSRM(); |     ~OSRM(); | ||||||
|     void RunQuery(RouteParameters & route_parameters, http::Reply & reply); |     void RunQuery(RouteParameters & route_parameters, http::Reply & reply); | ||||||
|  | 
 | ||||||
| private: | private: | ||||||
|     void RegisterPlugin(BasePlugin * plugin); |     void RegisterPlugin(BasePlugin * plugin); | ||||||
|     PluginMap pluginMap; |     //base class pointer to the objects
 | ||||||
|  |     BaseDataFacade<QueryEdge::EdgeData> * query_data_facade; | ||||||
|  | 
 | ||||||
|  |     PluginMap plugin_map; | ||||||
|     const bool use_shared_memory; |     const bool use_shared_memory; | ||||||
|  | 
 | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| #endif //OSRM_H
 | #endif //OSRM_H
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user