stec-platform
publicationregistration.h
1 #ifndef PUBLICATIONREGISTRATION_H
2 #define PUBLICATIONREGISTRATION_H
3 
4 #include <platform_global.h>
5 #include <QObject>
6 #include <QMap>
7 #include <QString>
8 #include <QStringList>
9 #include <QWriteLocker>
10 #include <QReadWriteLock>
11 #include <QVariant>
12 #include <QUuid>
13 #include <qwatch.h>
14 
15 class Publication;
16 class Subscription;
17 class Retain;
18 class QWidget;
19 
28 class PLATFORMSHARED_EXPORT PublicationRegistration : public QObject
29 {
30  Q_OBJECT
31 public :
32  typedef enum:int { Owner, Local, NotEntered } LASTCHANCEMODE;
33  QWatch errorLogger;
34 private:
35 
36 
37  RecursiveLock classLockPublications;
38  RecursiveLock uniques;
39 
40  QMap<QString,Publication *>systemsPublications;
41  QMap<QString, QVariant> systemProperties;
42 
43  QMap<int,QStringList> remotePublications;
44  QMap<QString, int> flashOffCopyRemoteNames;
45  QMap<QString, QList<quint64>> forceGlobal;
46  Retain *persistantRetention;
47  QWidget *guiThread;
48 
49  quint64 uniqueIdDispatch;
50 
51  QMap <QString, LASTCHANCEMODE> LastChanceOwnership;
52 
53  QMap<QString, int> RelaysRequests;
54  QMap<QString, void *> classRegistry;
55 
56  bool allowAutoConnectDaemon;
57  bool allowRelays;
58 
59  QString NodeName;
60  QString uuid;
61 
62 public:
63 
68  explicit PublicationRegistration(QObject *parent = nullptr);
69 
77  Publication* CreatePublication(const QString name);
78 
83  QStringList GetAllPublicationNames(void);
84 
89  QStringList GetAllPossibleNames(void);
90 
96  QStringList GetAllCurrentPublications(void);
97 
102  QStringList GetAllGlobals(void);
103 
108  QMap<QString,QVariant> GetAllDescriptors(void);
109 
115  void AddDescription(QString name, QVariant desc);
116  void RemoveDescription(QString name);
117 
124  QMap<QString, int> GetAllPossibleNamesAndInstances();
125 
132  QMap<int,QStringList> GetAllRemotePublications(void);
133 
134 
142  void ForceGlobal(QString name, quint64 id);
143 
144 
152  void RemoveGlobal(QString name,quint64 id);
153 
154 
162  void RequestRelay(QString name, bool flag = true);
163 
165  QStringList GetRelayRequests();
166 
174  void ReWriteGlobal(QString name, LASTCHANCEMODE global );
175 
181  QMap<QString, PublicationRegistration::LASTCHANCEMODE> GetLastChance(void);
182 
190  PublicationRegistration::LASTCHANCEMODE TestLastChance(QString name );
191 
192 
202  void AllowAutoConnectDaemon(bool allow = true);
203  bool AutoConnectDaemon(void);
204 
205 
212  void AddStorage( Retain *r);
213 
220  Retain *Storage (void );
221 
222 
229  void SetGuiThread(QWidget *w);
230 
235  QWidget *GuiThread(void);
236 
244  void UseRetainedData( Subscription *subscription, VremVArray &va );
245 
246 
254  void UseRetainedData( Subscription *subscription, QVariant va );
255 
262  void UserRemoveRetention( Subscription *subscriber);
263 
264 
265 
272  void setNodeName(QString name)
273  {
274  QReadLocker locker(&classLockPublications);
275  NodeName = name;
276  }
277 
282  QString getNodeName(void)
283  {
284  QReadLocker locker(&classLockPublications);
285  return (NodeName);
286  }
287 
292  void setUUID(QString name)
293  {
294  QReadLocker locker(&classLockPublications);
295 
296  uuid = name;
297  }
298 
303  QString getUUID(void)
304  {
305  QReadLocker locker(&classLockPublications);
306  if (uuid.isEmpty())
307  uuid = QUuid::createUuid().toString();
308  return (uuid);
309  }
310 
311 
316  QString getAlarmName()
317  {
318  return(getNodeName()+"Alarms");
319  }
320 
325  QString getErrorName()
326  {
327  return(getNodeName()+"Error");
328  }
329 
334  QString getMessagesName()
335  {
336  return(getNodeName()+"Messages");
337  }
338 
344  {
345  return(getNodeName()+"ShiftNotes");
346  }
347 
348 
353  quint64 UniqueID(void);
354 
355 
361  template< class t >
362  void RegisterProcessClass ( const QString name, t * dc)
363  {
364  QReadLocker locker(&classLockPublications);
365  classRegistry.insert(name,dc);
366  emit SignalNewClass(name, true);
367  }
368 
373  void UnRegisterProcessClass ( const QString name)
374  {
375 
376  QMap<QString, void *> ::iterator it;
377  QReadLocker locker(&classLockPublications);
378  if ( (it = classRegistry.find(name)) != classRegistry.end() )
379  {
380  classRegistry.erase(it);
381  emit SignalNewClass(name, false);
382  }
383  }
384 
385 
391  void *FindRegisteredClass(const QString name)
392  {
393  QMap<QString, void *>::iterator it;
394  if( (it = classRegistry.find(name) ) != classRegistry.end() )
395  {
396  return it.value();
397  }
398  return nullptr;
399  }
400 
401 public slots :
402 
408  void slot_NewRemotePublication(int desc, QString name);
409 
415  void slot_LostRemotePublication(int desc, QString name);
416 
421  void slot_LostRemoteDescriptor(int desc);
422 
423 signals:
424  void SignalNewPublication(QString name);
425  void SignalLostPublication(QString name);
426  void SignalNewPossiblePublication(QString name);
427  void SignalLostPossiblePublication(QString name);
428  void SignalNewRemotePublication(int desc, QString name );
429  void SignalLostRemotePublication(int desc, QString name );
430  void SignalLostRemoteDescriptor(int desc);
431  void SignalGlobal(QString name, bool yes);
432  void SignalRequestRelay(QString, int);
433  void SignalNewClass(QString className , bool valid );
434  void SignalDescriptorAdded(QString, QVariant);
435  void SignalDescriptorLost(QString);
436 
437 private slots:
438  void slot_lostPublication(QString name);
439 
440 
441 };
442 
443 #endif // PUBLICATIONREGISTRATION_H
The PublicationRegistration Multiverse Cloud.
Definition: publicationregistration.h:29
QString getErrorName()
getErrorName
Definition: publicationregistration.h:325
void setUUID(QString name)
setUUID
Definition: publicationregistration.h:292
QString getMessagesName()
getMessagesName
Definition: publicationregistration.h:334
void * FindRegisteredClass(const QString name)
FindRegisteredClass.
Definition: publicationregistration.h:391
QString getAlarmName()
getAlarmName
Definition: publicationregistration.h:316
QString getNodeName(void)
getNodeName
Definition: publicationregistration.h:282
void RegisterProcessClass(const QString name, t *dc)
RegisterProcessClass.
Definition: publicationregistration.h:362
void UnRegisterProcessClass(const QString name)
UnRegisterProcessClass.
Definition: publicationregistration.h:373
QString getUUID(void)
getUUID
Definition: publicationregistration.h:303
QString getShitNotesName()
getShitNotesName
Definition: publicationregistration.h:343
void setNodeName(QString name)
setNodeName
Definition: publicationregistration.h:272
The Publication class this is only used by the cloud, users should never use this class....
Definition: publication.h:17
The QWatch class.
Definition: qwatch.h:17
The RecursiveLock class Allows a recursive read write lock to occur.
Definition: platform_global.h:113
The Retain class this retains data from a subscription, generally used for setup data so subscription...
Definition: retain.h:43
The Subscription class A platform subscriber must use or inheit this class.
Definition: subscription.h:43