新增了装置通讯管理,现在可以在外部动态的添加和删除连接设备了,同时添加了设备的消息发送功能。
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include <unordered_map>
|
||||
#include <mutex>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ
|
||||
struct PointInfo {
|
||||
@@ -54,10 +56,42 @@ private:
|
||||
int index_;
|
||||
};
|
||||
|
||||
class ClientManager {
|
||||
public:
|
||||
static ClientManager& instance() {
|
||||
static ClientManager inst;
|
||||
return inst;
|
||||
}
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>ѭ<EFBFBD><D1AD>
|
||||
void set_loop(uv_loop_t* loop) {
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
loop_ = loop;
|
||||
}
|
||||
|
||||
void add_device(const DeviceInfo& device);
|
||||
void remove_device(const std::string& device_id);
|
||||
bool send_to_device(const std::string& identifier, const unsigned char* data, size_t size);
|
||||
void stop_all();
|
||||
// <20><>ȡ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
size_t client_count() {
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
return clients_.size();
|
||||
}
|
||||
|
||||
private:
|
||||
ClientManager() : loop_(nullptr) {}
|
||||
std::unordered_map<std::string, std::unique_ptr<ClientContext>> clients_;
|
||||
std::mutex mutex_;
|
||||
uv_loop_t* loop_; // <20>¼<EFBFBD>ѭ<EFBFBD><D1AD>ָ<EFBFBD><D6B8>
|
||||
};
|
||||
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void start_client_connect(const std::vector<DeviceInfo>& devices);
|
||||
void send_binary_data(ClientContext* ctx, const unsigned char* data, size_t data_size);
|
||||
void on_timer(uv_timer_t* handle);//װ<>ö<EFBFBD>ʱ<EFBFBD>ص<EFBFBD>
|
||||
void try_reconnect(uv_timer_t* timer);//װ<><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
||||
void on_connect(uv_connect_t* req, int status);//װ<><D7B0><EFBFBD><EFBFBD><EFBFBD>ӻص<D3BB>
|
||||
void on_close(uv_handle_t* handle);//װ<>ùرջص<D5BB>
|
||||
void on_timer(uv_timer_t* handle);
|
||||
void try_reconnect(uv_timer_t* timer);
|
||||
void on_connect(uv_connect_t* req, int status);
|
||||
void on_close(uv_handle_t* handle);
|
||||
void init_clients(uv_loop_t* loop, const std::vector<DeviceInfo>& devices);
|
||||
void stop_all_clients();
|
||||
Reference in New Issue
Block a user