#pragma once

#include <QObject>
#include <QThread>
#include <zmq.hpp>

//
//class SocketMonitor : public QObject, public zmq::monitor_t {
//    Q_OBJECT
//
//public:
//    SocketMonitor(class ZMQClient* client);
//    ~SocketMonitor();
//
//    void on_event_connected(const zmq_event_t& event_, const char* addr_) override;
//    void on_event_disconnected(const zmq_event_t& event_, const char* addr_) override;
//
//
//Q_SIGNALS:
//    void Connectd();
//    void Disconnectd();
//
//public:
//    void doWork(QString address);
//    void Stop() {
//        abort();
//    }
//
//
//private:
//    class ZMQClient* client_{ nullptr };
//};

class ZMQClient : public QObject {
	Q_OBJECT

public:
	explicit ZMQClient(QObject* parent = nullptr);
	~ZMQClient() override;

	bool ConnectToServer(const QString& address);

	bool Send(const QString& message);

	const zmq::socket_t& GetSocket() const {
		return socket_;
    }
	zmq::socket_t& GetSocket() {
        return socket_;
    }
Q_SIGNALS:
	void MessageReceivered(const QString& message);
	void Connectd();
	void Disconnectd();

    void operate(QString);
	void StopMino();


private:
	std::shared_ptr<zmq::context_t> ctx_;
	zmq::socket_t socket_;
	std::string host_;
	//QThread thread_;
};