#ifndef DORICGLOBALBROADCAST_H
#define DORICGLOBALBROADCAST_H

#include <QDebug>

#include "DoricExport.h"

class DORIC_EXPORT DoricGlobalBroadcast {
private:
  static DoricGlobalBroadcast *local_instance;
  DoricGlobalBroadcast() { qDebug() << "DoricGlobalBroadcast constructor"; }

  ~DoricGlobalBroadcast() { qDebug() << "DoricGlobalBroadcast destructor"; }

public:
  static DoricGlobalBroadcast *getInstance() {
    static DoricGlobalBroadcast instance;
    return &instance;
  }

  QString subscribe(QString name, std::function<void(QString)> callback);

  void unsubscribe(QString subscribeId);

  void publish(QString name, QString data);

private:
  QAtomicInt idGenerator;

  QMap<QString, QList<QPair<QString, std::function<void(QString)>>>> subjects;
};

#endif // DORICGLOBALBROADCAST_H