#ifndef CLIENTCORE_H #define CLIENTCORE_H #include "ClientFile.h" #include #include #include #include #include #include #include #include #include #include #include #include class ClientCore : public wxEvtHandler { public: ClientCore(); ~ClientCore(); public: bool Connect(const wxString& host, uint16_t port); void Disconnect(); public: wxString GetErr() const; wxString GetOwnId() const; bool IsOk(); void SetLogCallback(const std::function& callback); bool ReqOnline(); bool AskDirectory(const wxString& id, const wxString& path, DirFileInfoVec& dirInfoVec); public: void ReqOnlineCallback(const std::function& callback); void SetHomeCallback(const std::function& callback); void SetDirFileCallback(const std::function& callback); private: void UseFrame(FrameBuffer* buf); private: void OnSocketEvent(wxSocketEvent& event); private: void HeartBeat(); void Recv(); public: template bool Send(const T& info, FrameBufferType type, const wxString& remoteId = wxEmptyString) { std::stringstream ss; cereal::BinaryOutputArchive archive(ss); archive(info); auto buf = std::make_shared(); buf->dataConst = ss.view().data(); buf->len = ss.str().size(); buf->dataType = type; buf->tid = remoteId.ToStdString(); return Send(buf.get()); } bool Send(FrameBuffer* buf); private: wxString id_; bool thRun_; MutBuffer buffer_; wxString err_; ClientFile cf_; std::thread recvThread_; std::array buf_; wxSocketClient* socket_; private: std::function dirFileCall_; std::function onlineCallback_; std::function logCall_; std::function homeCall_; }; #endif // CLIENTCORE_H