38 #include <QCoreApplication> 43 void ArnItemNet::init()
59 setIgnoreSameValue(
false);
63 ArnItemNet::ArnItemNet(
void* sessionHandler)
66 _sessionHandler = sessionHandler;
70 ArnItemNet::~ArnItemNet()
74 qDebug() <<
"ArnItemNet destruct root: eventH=" << eventHandler() <<
" sessionH=" << _sessionHandler
75 <<
" isMon=" << _isMonitor <<
" netId=" << _netId
76 <<
" itemNet=" <<
this;
82 bool ArnItemNet::openWithFlags(
const QString& path,
Arn::LinkFlags linkFlags)
86 qDebug() <<
"ArnItemNet open root: eventH=" << eventHandler() <<
" sessionH=" << _sessionHandler
87 <<
" isMon=" << _isMonitor <<
" netId=" << _netId
88 <<
" itemNet=" <<
this;
92 return ArnBasicItem::openWithFlags( path, linkFlags);
96 void ArnItemNet::setNetId( uint netId)
102 uint ArnItemNet::netId()
const 108 void* ArnItemNet::sessionHandler()
const 110 return _sessionHandler;
114 void ArnItemNet::addSyncModeString(
const QByteArray& smode,
bool linkShare)
118 setIniMaster( smode.contains(
"ima"));
119 setIniSlave( smode.contains(
"isl"));
120 bool isMaster = smode.contains(
"mas");
121 isMaster |= _iniSlave;
122 syncMode.set( syncMode.
Master, isMaster);
123 syncMode.set( syncMode.
AutoDestroy, smode.contains(
"autodestroy"));
124 syncMode.set( syncMode.
Monitor, smode.contains(
"mon"));
126 addSyncMode( syncMode, linkShare);
130 QByteArray ArnItemNet::getSyncModeString()
const 135 if (_iniSlave) smode +=
"isl ";
136 else if (syncMode.is( syncMode.
Master)) smode +=
"master ";
137 else if (_iniMaster) smode +=
"ima ";
139 if (syncMode.is( syncMode.
AutoDestroy)) smode +=
"autodestroy ";
140 if (syncMode.is( syncMode.
Monitor)) smode +=
"mon ";
142 return smode.trimmed();
146 Arn::ObjectMode ArnItemNet::stringToObjectMode(
const QByteArray& modeString)
149 if (modeString.contains(
'P')) mode.set( mode.
Pipe);
150 if (modeString.contains(
'V')) mode.set( mode.
BiDir);
151 if (modeString.contains(
'B')) mode.set( mode.
BiDir);
152 if (modeString.contains(
'S')) mode.set( mode.
Save);
160 QByteArray modeString;
161 if (mode.is( mode.
Pipe)) modeString +=
"P";
162 if (mode.is( mode.
BiDir)) modeString +=
"B";
163 if (mode.is( mode.
Save)) modeString +=
"S";
169 void ArnItemNet::setModeString(
const QByteArray& modeString)
176 QByteArray ArnItemNet::getModeString()
const 179 return ObjectModeToString( mode);
184 void ArnItemNet::sendNewItemMonEvent(
const QString& path,
bool isOld)
187 sendMonEvent( type, path.toUtf8(),
true);
192 void ArnItemNet::sendMonEvent(
int type,
const QByteArray& data,
bool isLocal)
195 sendArnEventLink( &ev);
199 void ArnItemNet::setBlockEcho(
bool blockEcho)
201 _blockEcho = blockEcho;
205 void ArnItemNet::setDisable(
bool disable)
211 bool ArnItemNet::isDisable()
const 217 bool ArnItemNet::isMonitor()
const 223 void ArnItemNet::setMonitor(
bool isMonitor)
225 _isMonitor = isMonitor;
229 void ArnItemNet::setQueueNum(
int num)
235 int ArnItemNet::queueNum()
const 241 void ArnItemNet::nextEchoSeq()
243 _curEchoSeq = (_curEchoSeq + 1) % 100;
247 void ArnItemNet::resetEchoSeq()
253 void ArnItemNet::setEchoSeq( qint8 echoSeq)
255 _curEchoSeq = echoSeq;
259 qint8 ArnItemNet::echoSeq()
const 261 return isBiDirMode() ? -1 : _curEchoSeq;
265 bool ArnItemNet::isEchoSeqOld( qint8 receivedEchoSeq)
267 if ((_curEchoSeq < 0) || (receivedEchoSeq < 0))
return false;
268 return receivedEchoSeq != _curEchoSeq;
272 void ArnItemNet::resetDirtyValue()
283 void ArnItemNet::resetDirtyMode()
289 bool ArnItemNet::isDirtyValue()
const 295 bool ArnItemNet::isDirtyMode()
const 301 bool ArnItemNet::isLeadValueUpdate()
303 if (_dirty)
return false;
310 bool ArnItemNet::isLeadModeUpdate()
312 if (_dirtyMode)
return false;
319 bool ArnItemNet::isBlock( quint32 sendId)
321 return (_blockEcho && (sendId == itemId()));
325 void ArnItemNet::setIniMaster(
bool iniMaster)
327 _iniMaster = iniMaster;
328 _iniSlave &= !iniMaster;
332 void ArnItemNet::setIniSlave(
bool iniSlave)
334 _iniSlave = iniSlave;
335 _iniMaster &= !iniSlave;
339 bool ArnItemNet::isMasterAtStart()
const 341 return !_iniSlave && (_iniMaster || isMaster());
345 void ArnItemNet::setSyncFlux(
bool isSyncFlux)
347 _syncFlux = isSyncFlux;
351 bool ArnItemNet::isSyncFlux()
const 357 void ArnItemNet::setSaveFlux(
bool saveFlux)
359 _saveFlux = saveFlux;
363 bool ArnItemNet::isSaveFlux()
const 369 quint32 ArnItemNet::localUpdateSinceStop()
const 371 return localUpdateCount() - _updateCountStop;
375 void ArnItemNet::onConnectStop()
377 _updateCountStop = localUpdateCount();
381 void ArnItemNet::arnEvent( QEvent* ev,
bool isAlienThread)
383 ArnBasicItem::arnEvent( ev, isAlienThread);
391 if (!_isMonitor)
return;
400 sendNewItemMonEvent( e->
path());
408 xsm.
add(
"path", e->
path()).add(
"mode", ObjectModeToString( e->
mode()));
419 ArnItemNetEar::ArnItemNetEar( QObject* parent)
425 void ArnItemNetEar::customEvent( QEvent* ev)
434 emit arnTreeCreated( e->
path());
444 <<
"inPath=" << path();
446 emit arnTreeDestroyed( destroyPath, e->
isGlobal());
453 return ArnItem::customEvent( ev);
static int baseType(int setVal=-1)
Monitor of server object for client.
Arn::ObjectSyncMode syncMode() const
Newly created Arn object.
Implies BiDir and all data is preserved as a stream.
Container class with string representation for serialized data.
Arn::DataType type() const
The type stored in the Arn Data Object
const QString & path() const
An Arn object changed mode.
const QString & path() const
Arn::ObjectMode mode() const
A two way object, typically for validation or pipe.
static bool isArnEvent(int evType)
Link flags when accessing an Arn Data Object
ArnLink * startLink() const
QByteArray toXString() const
Destroy this Arn Data Object when client (tcp/ip) closes.
ArnLink * arnLink() const
XStringMap & add(const char *key, const QByteArray &val)
Found a present Arn object.
Data is persistent and will be saved.
Handle for an Arn Data Object.
The client is default generator of data.