9 #define epicsExportSharedSymbols 21 const float BeaconEmitter::EPICS_PVA_MIN_BEACON_PERIOD = 1.0;
22 const float BeaconEmitter::EPICS_PVA_MIN_BEACON_COUNT_LIMIT = 3.0;
25 BeaconEmitter::BeaconEmitter(std::string
const & protocol,
26 Transport::shared_pointer
const & transport, std::tr1::shared_ptr<ServerContextImpl>& context) :
28 _transport(transport),
30 _guid(context->getGUID()),
31 _fastBeaconPeriod(
std::
max(context->getBeaconPeriod(), EPICS_PVA_MIN_BEACON_PERIOD)),
32 _slowBeaconPeriod(
std::
max(180.0, _fastBeaconPeriod)),
33 _beaconCountLimit((
int16)
std::
max(10.0f, EPICS_PVA_MIN_BEACON_COUNT_LIMIT)),
34 _serverAddress(*(context->getServerInetAddress())),
35 _serverPort(context->getServerPort()),
36 _serverStatusProvider(context->getBeaconServerStatusProvider()),
37 _timer(context->getTimer())
51 PVField::shared_pointer serverStatus;
52 if(_serverStatusProvider.get())
56 serverStatus = _serverStatusProvider->getServerStatusData();
60 LOG(
logLevelDebug,
"BeaconServerStatusProvider implementation thrown an exception.");
72 buffer->
putByte(_beaconSequenceID);
86 serverStatus->getField()->serialize(buffer, control);
87 serverStatus->serialize(buffer, control);
108 Timer::shared_pointer
timer(_timer.lock());
115 Timer::shared_pointer
timer(_timer.lock());
117 timer->scheduleAfterDelay(shared_from_this(), 0.0);
122 const double period = (_beaconSequenceID >= _beaconCountLimit) ? _slowBeaconPeriod : _fastBeaconPeriod;
125 Timer::shared_pointer
timer(_timer.lock());
127 timer->scheduleAfterDelay(shared_from_this(), period);
133 _transport->enqueueSendRequest(shared_from_this());
void send(epics::pvData::ByteBuffer *buffer, TransportSendControl *control)
static void serializeNullField(epics::pvData::ByteBuffer *buffer, epics::pvData::SerializableControl *control)
TODO only here because of the Lockable.
virtual void flush(bool lastMessageCompleted)=0
#define LOG(level, format,...)
void encodeAsIPv6Address(ByteBuffer *buffer, const osiSockAddr *address)
EPICS_ALWAYS_INLINE void putByte(int8 value)
This class implements a Bytebuffer that is like the java.nio.ByteBuffer.
static void serializeString(const std::string &value, ByteBuffer *buffer, SerializableControl *flusher)
virtual void startMessage(epics::pvData::int8 command, std::size_t ensureCapacity, epics::pvData::int32 payloadSize=0)=0
EPICS_ALWAYS_INLINE void putShort(int16 value)