/* * beaconHandler.h */ #ifndef BEACONHANDLER_H #define BEACONHANDLER_H #include "remote.h" #include #include #include #include namespace epics { namespace pvAccess { /** * BeaconHandler */ class BeaconHandler { public: typedef std::tr1::shared_ptr shared_pointer; typedef std::tr1::shared_ptr const_shared_pointer; /** * Constructor. * @param transport transport to be used to send beacons. * @param context CA context. */ BeaconHandler(Context::shared_pointer context, const osiSockAddr* responseFrom); /** * Test Constructor (for testing) * @param transport transport to be used to send beacons. */ BeaconHandler(const osiSockAddr* responseFrom); virtual ~BeaconHandler(); /** * Update beacon period and do analitical checks (server restared, routing problems, etc.) * @param from who is notifying. * @param remoteTransportRevision encoded (major, minor) revision. * @param timestamp time when beacon was received. * @param startupTime server (reported) startup time. * @param sequentalID sequential ID. * @param data server status data, can be NULL. */ void beaconNotify(osiSockAddr* from, epics::pvData::int8 remoteTransportRevision, epics::pvData::TimeStamp* timestamp, epics::pvData::TimeStamp* startupTime, epics::pvData::int16 sequentalID, epics::pvData::PVFieldPtr data); private: /** * Context instance. */ Context::weak_pointer _context; /** * Remote address. */ const osiSockAddr _responseFrom; /** * Mutex */ epics::pvData::Mutex _mutex; /** * Server startup timestamp. */ epics::pvData::TimeStamp _serverStartupTime; /** * Update beacon. * @param remoteTransportRevision encoded (major, minor) revision. * @param timestamp time when beacon was received. * @param sequentalID sequential ID. * @return network change (server restarted) detected. */ bool updateBeacon(epics::pvData::int8 remoteTransportRevision, epics::pvData::TimeStamp* timestamp, epics::pvData::TimeStamp* startupTime, epics::pvData::int16 sequentalID); /** * Notify transport about beacon arrival. */ void beaconArrivalNotify(); /** * Changed transport (server restarted) notify. */ void changedTransport(); }; }} #endif /* INTROSPECTIONREGISTRY_H */