X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=lib%2Fabstractroutingengine.h;h=90c3810451cf78b835c73c28b5b61d993f31586c;hb=cfa575b59daa4caa09310fc6f378878605af972c;hp=341d2242d86f28a86d29b1aa3c3592d16f0c8d49;hpb=7165af014b76fd1b21b676a3a3ea546978d78c13;p=profile%2Fivi%2Fautomotive-message-broker.git diff --git a/lib/abstractroutingengine.h b/lib/abstractroutingengine.h index 341d224..90c3810 100644 --- a/lib/abstractroutingengine.h +++ b/lib/abstractroutingengine.h @@ -1,19 +1,19 @@ /* - Copyright (C) 2012 Intel Corporation + Copyright (C) 2012 Intel Corporation - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ @@ -40,6 +40,7 @@ class AsyncSetPropertyRequest; typedef std::function GetPropertyCompletedSignal; typedef std::function GetRangedPropertyCompletedSignal; +typedef std::function TimedOutCallback; /*! * \brief The AsyncPropertyRequest class is used by sinks to request property values. @@ -111,8 +112,8 @@ public: }; /*! - * \brief The AsyncPropertyReply class is used by sources to reply to Get and Set operations. The source should - * set success to true if the call is successful or 'false' if the request was not successful and set 'error' + * \brief The AsyncPropertyReply class is used by sources to reply to Get and Set operations. + * The source should set success to true if the call is successful or 'false' if the request was not successful and set 'error' * to the appropriate error. * \see AbstractRoutingEngine::getPropertyAsync * \see AsyncPropertyReply @@ -128,14 +129,7 @@ public: AsyncPropertyReply(const AsyncSetPropertyRequest &request); - virtual ~AsyncPropertyReply() - { - if(timeoutSource) - { - g_source_destroy(timeoutSource); - g_source_unref(timeoutSource); - } - } + virtual ~AsyncPropertyReply(); /*! * \brief The Error enum @@ -149,6 +143,46 @@ public: }; /*! + * \brief errorToStr returns string representing the Error + */ + static std::string errorToStr(Error err) + { + if(err == NoError) + return "NoError"; + else if(err == Timeout) + return "Timeout"; + else if(err == InvalidOperation) + return "InvalidOperation"; + else if(err == PermissionDenied) + return "PermissionDenied"; + else if(err == ZoneNotSupported) + return "ZoneNotSupported"; + + DebugOut(DebugOut::Warning) << "Could not translate error: " << err << endl; + return ""; + } + + /*! + * \brief strToError returns Error representing the string + */ + static Error strToError(std::string err) + { + if(err == "NoError") + return NoError; + else if(err == "Timeout") + return Timeout; + else if(err == "InvalidOperation") + return InvalidOperation; + else if(err == "PermissionDenied") + return PermissionDenied; + else if(err == "ZoneNotSupported") + return ZoneNotSupported; + + DebugOut(DebugOut::Warning) << "Could not translate error string: " << err << endl; + return NoError; + } + + /*! * \brief value of the reply. This may be null if success = false. This is owned by the source. */ AbstractPropertyType* value; @@ -160,6 +194,12 @@ public: bool success; /*! + * \brief timed out callback is called when the reply times out. This is so sources can avoid using this reply which + * may become invalid after it times out. + */ + TimedOutCallback timedout; + + /*! * \brief error contains the error if the request was not successful.\ * \see Error */ @@ -245,19 +285,22 @@ public: Zone::Type zone; /*! - * \brief completed callback that is called when the ranged request is complete. The reply from this request is passed + * \brief completed callback + * 'completed' is called when the ranged request is complete. The reply from this request is passed * into the completed call. The completed callback must free the reply before it returns or there will be a leak. */ GetRangedPropertyCompletedSignal completed; /*! - * \brief timeBegin set this to request values for the specified property beggining at this time. Time is seconds\ + * \brief timeBegin + * Set this to request values for the specified property beggining at this time. Time is seconds\ * since the unix epoc. Set this to '0' if you do not want values within a time range. */ double timeBegin; /*! - * \brief timeEnd set this to request values for the specified property beggining at this time. Time is seconds\ + * \brief timeEnd + * Set this to request values for the specified property beggining at this time. Time is seconds\ * since the unix epoc. Set this to '0' if you do not want values within a time range. */ double timeEnd; @@ -282,7 +325,7 @@ public: /*! * \brief The AsyncRangePropertyReply class is used by a source to reply to an AsyncRangePropertyRequest. - * the source should set success to 'true' and populate the 'values' member if the request was successful. + * The source should set success to 'true' and populate the 'values' member if the request was successful. * If the request is not successful, 'success' should be set to 'false' and the 'error' member should be set. */ class AsyncRangePropertyReply: public AsyncRangePropertyRequest @@ -324,17 +367,18 @@ class AbstractRoutingEngine { public: typedef std::function PropertyChangedType; + + AbstractRoutingEngine(std::map configuration):mConfig(configuration) {} virtual ~AbstractRoutingEngine(); virtual void registerSource(AbstractSource* src) = 0; virtual void updateSupported(PropertyList added, PropertyList removed, AbstractSource* source) = 0; - /// Deprecated: + ///TODO: Deprecated, remove in 0.15: void updateProperty(VehicleProperty::Property property, AbstractPropertyType* value, std::string uuid) { - DebugOut(DebugOut::Warning)<<"updateProperty(VehicleProperty::Property,AbstractPropertyType*,std::string) is deprecated. use new updateProperty(AbstractPropertyType*, const std::string &)"< sourcesForProperty(VehicleProperty::Property property) = 0; + virtual std::vector sourcesForProperty(const VehicleProperty::Property & property) = 0; /** * /brief getPropertyAsync requests a property value from a source. This call has a timeout and the callback specified in the request will always be called. @@ -357,7 +401,7 @@ public: * /see AsyncPropertyReply. * /param request requested property. * /return AsyncPropertyReply. The returned AsyncPropertyReply is owned by the caller of getPropertyAsync. - * /example AsyncPropertyRequest request; + * /code AsyncPropertyRequest request; * request.property = VehicleProperty::VehicleSpeed * request.completed = [](AsyncPropertyReply* reply) * { @@ -365,14 +409,15 @@ public: * delete reply; * }; * routingEngine->getPropertyAsync(request); + * /endcode */ virtual AsyncPropertyReply * getPropertyAsync(AsyncPropertyRequest request) = 0; /*! * \brief getRangePropertyAsync is used for getting a range of properties that are within the specified time or sequence parameters. - * \param request the request containing the property and other information required by the query + * \arg request the request containing the property and other information required by the query * \return a pointer to the reply. - * \example AsyncRangePropertyRequest vehicleSpeedFromLastWeek; + * \code AsyncRangePropertyRequest vehicleSpeedFromLastWeek; * * vehicleSpeedFromLastWeek.timeBegin = amb::currentTime() - 10; * vehicleSpeedFromLastWeek.timeEnd = amb::currentTime(); @@ -395,40 +440,47 @@ public: * }; * * routingEngine->getRangePropertyAsync(vehicleSpeedFromLastWeek); - * + * \endcode */ - virtual AsyncRangePropertyReply * getRangePropertyAsync(AsyncRangePropertyRequest request) = 0; + virtual void getRangePropertyAsync(AsyncRangePropertyRequest request) = 0; /*! * \brief setProperty sets a property to a value. * \see AsyncSetPropertyRequest * \see AsyncPropertyReply - * \param request the request containing the property and the value to set + * \arg request the request containing the property and the value to set * \return a pointer to the reply which is owned by the caller of this method - * \example + * \example */ virtual AsyncPropertyReply * setProperty(AsyncSetPropertyRequest request) = 0; /*! * \brief subscribeToProperty subscribes to propertyName. Value changes will be passed to callback. - * \param propertyName - * \param callback - * \param pid process id of the requesting application + * \code + * subscribeToProperty(Vehicle::EngineSpeed, [](AbstractPropertyType* property) { + * ... + * }, this); + * \endcode + * \arg propertyName + * \arg callback + * \arg pid process id of the requesting application * \return subscription handle */ virtual uint subscribeToProperty(const VehicleProperty::Property & propertyName, PropertyChangedType callback, std::string pid="") = 0; /*! * \brief unsubscribeToProperty - * \param handle + * \arg handle */ virtual void unsubscribeToProperty(uint handle) = 0; /*! * \brief subscribeToProperty subscribe to changes made to a property value. - * \param propertyName name of the property to request a subscription for. - * \param self pointer to the sink who is subscribing. - * \example + * By default, all providers of this property will receive the subscription. If you need to filter by source, use + * \ref subscribeToProperty(const VehicleProperty::Property & propertyName, const std::string & sourceUuidFilter, AbstractSink *self) + * \arg propertyName name of the property to request a subscription for. + * \arg self pointer to the sink who is subscribing. + * \code * //somewhere in the sink: * routingEngine->subscribeToProperty(VehicleProperty::EngineSpeed, this); * @@ -440,29 +492,33 @@ public: * ... * } * } + * \endcode */ virtual bool subscribeToProperty(const VehicleProperty::Property & propertyName, AbstractSink* self) = 0; /*! * \brief subscribeToProperty subscribe to changes made to a property value. - * \param propertyName name of the property to request a subscription for. - * \param sourceUuidFilter source UUID to filter. Only property updates from this source will be sent to the sink. - * \param self pointer to the sink who is subscribing. + * \arg propertyName name of the property to request a subscription for. + * \arg sourceUuidFilter source UUID to filter. Only property updates from this source will be sent to the sink. + * \arg self pointer to the sink who is subscribing. */ virtual bool subscribeToProperty(const VehicleProperty::Property & propertyName, const std::string & sourceUuidFilter, AbstractSink *self) = 0; /*! * \brief subscribeToProperty subscribe to changes made to a property value. - * \param propertyName name of the property to request a subscription for. - * \param sourceUuidFilter source UUID to filter. Only property updates from this source will be sent to the sink. - * \param zoneFilter zone to filter. Only updates from this zone will be passed to the sink. - * \param self pointer to the sink who is subscribing. + * \arg propertyName name of the property to request a subscription for. + * \arg sourceUuidFilter source UUID to filter. Only property updates from this source will be sent to the sink. + * \arg zoneFilter zone to filter. Only updates from this zone will be passed to the sink. + * \arg self pointer to the sink who is subscribing. */ virtual bool subscribeToProperty(const VehicleProperty::Property & propertyName, const std::string & sourceUuidFilter, Zone::Type zoneFilter, AbstractSink *self) = 0; virtual bool unsubscribeToProperty(const VehicleProperty::Property &, AbstractSink* self) = 0; virtual PropertyInfo getPropertyInfo(const VehicleProperty::Property &, const std::string & sourceUuid) = 0; + +protected: + std::map mConfig; }; #endif // ABSTRACTROUTINGENGINE_H