107 public std::enable_shared_from_this<UNetReceiver>
110 UNetReceiver( std::unique_ptr<UNetReceiveTransport>&& transport,
const std::shared_ptr<SMInterface>& smi
111 ,
bool nocheckConnection =
false
112 ,
const std::string& prefix =
"unet" );
118 inline std::string getName()
const noexcept
124 void setLockUpdate(
bool st )
noexcept;
125 bool isLockUpdate()
const noexcept;
127 void resetTimeout()
noexcept;
129 bool isInitOK()
const noexcept;
130 bool isRecvOK()
const noexcept;
131 size_t getLostPacketsNum()
const noexcept;
133 void setReceiveTimeout( timeout_t msec )
noexcept;
134 void setUpdatePause( timeout_t msec )
noexcept;
135 void setLostTimeout( timeout_t msec )
noexcept;
136 void setPrepareTime( timeout_t msec )
noexcept;
137 void setCheckConnectionPause( timeout_t msec )
noexcept;
138 void setMaxDifferens(
unsigned long set )
noexcept;
139 void setEvrunTimeout(timeout_t msec )
noexcept;
140 void setInitPause( timeout_t msec )
noexcept;
141 void setBufferSize(
size_t sz )
noexcept;
142 void setMaxReceiveAtTime(
size_t sz )
noexcept;
143 void setIgnoreCRC(
bool set )
noexcept;
149 void forceUpdate()
noexcept;
151 inline std::string getTransportID()
const noexcept
153 return transport->ID();
169 typedef sigc::slot<void, const std::shared_ptr<UNetReceiver>&,
Event> EventSlot;
170 void connectEvent( EventSlot sl )
noexcept;
173 inline std::shared_ptr<DebugStream> getLog() noexcept
178 std::string getShortInfo() const noexcept;
180#ifndef DISABLE_REST_API
181 Poco::JSON::Object::Ptr httpInfo( Poco::JSON::Object::Ptr root )
const;
186 const std::shared_ptr<SMInterface> shm;
187 std::shared_ptr<DebugStream> unetlog;
196 ReceiveRetCode receive() noexcept;
197 void update() noexcept;
198 void callback( ev::io& watcher,
int revents ) noexcept;
199 void readEvent( ev::io& watcher ) noexcept;
200 void updateEvent( ev::periodic& watcher,
int revents ) noexcept;
201 void checkConnectionEvent( ev::periodic& watcher,
int revents ) noexcept;
202 void statisticsEvent( ev::periodic& watcher,
int revents ) noexcept;
203 void onForceUpdate( ev::async& watcher,
int revents ) noexcept;
204 void initEvent( ev::timer& watcher,
int revents ) noexcept;
205 virtual
void evprepare( const ev::loop_ref& eloop ) noexcept override;
206 virtual
void evfinish(const ev::loop_ref& eloop ) noexcept override;
207 virtual
std::
string wname() const noexcept
override
212 void initIterators() noexcept;
213 bool createConnection(
bool throwEx = false );
214 bool checkConnection();
215 size_t rnext(
size_t num );
220 timeout_t updatepause = { 100 };
222 std::unique_ptr<UNetReceiveTransport> transport;
226 ev::periodic evCheckConnection;
227 ev::periodic evStatistic;
228 ev::periodic evUpdate;
229 ev::timer evInitPause;
230 ev::async evForceUpdate;
233 size_t recvCount = { 0 };
234 size_t upCount = { 0 };
235 std::chrono::steady_clock::time_point t_start;
236 std::chrono::steady_clock::time_point t_end;
237 std::chrono::steady_clock::time_point t_stats;
242 float recvPerSec = {0};
243 float upPerSec = {0};
244 size_t upProcessingTime_microsec = {0};
245 size_t recvProcessingTime_microsec = {0};
251 static CommonEventLoop loop;
253 double checkConnectionTime = { 10.0 };
254 std::mutex checkConnMutex;
256 PassiveTimer ptRecvTimeout;
257 PassiveTimer ptPrepare;
258 timeout_t recvTimeout = { 5000 };
259 timeout_t prepareTime = { 2000 };
260 timeout_t evrunTimeout = { 15000 };
261 timeout_t lostTimeout = { 200 };
262 size_t maxReceiveCount = { 5 };
264 double initPause = { 5.0 };
265 std::atomic_bool initOK = {
false };
267 PassiveTimer ptLostTimeout;
268 size_t lostPackets = { 0 };
271 IOController::IOStateList::iterator itRespond;
272 bool respondInvert = {
false };
274 IOController::IOStateList::iterator itLostPackets;
278 IOController::IOStateList::iterator itMode;
281 std::atomic_bool activated = {
false };
283 size_t cbufSize = { 100 };
284 std::vector<UniSetUDP::UDPMessage> cbuf;
287 UniSetUDP::UDPMessage* pack;
292 size_t maxDifferens = { 20 };
294 std::atomic_bool lockUpdate = {
false };
303 IOController::IOStateList::iterator ioit;
308 typedef std::vector<CacheItem> CacheVec;
315 CacheInfo(): crc(0) {}
319 typedef std::unordered_map<long, CacheInfo> CacheMap;
320 CacheMap d_icache_map;
321 CacheMap a_icache_map;
323 bool ignoreCRC = {
false };
327 CacheInfo* getDCache( UniSetUDP::UDPMessage* upack )
noexcept;
328 CacheInfo* getACache( UniSetUDP::UDPMessage* pack )
noexcept;