调整了通讯结构,新增了装置台账结构
This commit is contained in:
@@ -1,33 +1,63 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <uv.h>
|
||||
#include <pthread.h>
|
||||
#include <unistd.h>
|
||||
#include <math.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
|
||||
/* <20><><EFBFBD><EFBFBD>״̬ö<EFBFBD><EFBFBD> */
|
||||
typedef enum {
|
||||
STATE_DISCONNECTED, // δ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
STATE_CONNECTING, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
STATE_CONNECTED // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
} connection_state_t;
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ
|
||||
struct PointInfo {
|
||||
std::string point_id; // <20><><EFBFBD><EFBFBD>ID
|
||||
std::string name; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::string device_id; // <20><><EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>ID
|
||||
double PT1; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>1
|
||||
double PT2; // <20><>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>2
|
||||
double CT1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
|
||||
double CT2; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
|
||||
};
|
||||
|
||||
/* <20>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľṹ<C4BD><E1B9B9> */
|
||||
typedef struct {
|
||||
uv_loop_t* loop; // libuv<EFBFBD>¼<EFBFBD>ѭ<EFBFBD><EFBFBD>
|
||||
uv_tcp_t client; // TCP<EFBFBD>ͻ<EFBFBD><EFBFBD>˾<EFBFBD><EFBFBD><EFBFBD>
|
||||
int index; // <EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
uv_timer_t timer; // <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD>Ͷ<EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
uv_timer_t reconnect_timer;// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
||||
connection_state_t state; // <20><>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
int reconnect_attempts; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
volatile int shutdown; // <20>رձ<D8B1>־ (<28><><EFBFBD><EFBFBD>)
|
||||
} client_context_t;
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void try_reconnect(uv_timer_t* timer);//<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>
|
||||
void on_connect(uv_connect_t* req, int status);//<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӻص<D3BB>
|
||||
void on_close(uv_handle_t* handle);//<2F>ͻ<EFBFBD><CDBB>˶Ͽ<CBB6><CFBF>ص<EFBFBD>
|
||||
void stop_all_clients(); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ֹͣ<CDA3><D6B9><EFBFBD>пͻ<D0BF><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void start_client_connect();//<2F><><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void send_binary_data(client_context_t* ctx, const unsigned char* data, size_t data_size);
|
||||
// װ<><D7B0><EFBFBD><EFBFBD>Ϣ<EFBFBD>ṹ
|
||||
struct DeviceInfo {
|
||||
std::string device_id; // װ<EFBFBD><EFBFBD>ID
|
||||
std::string name; // װ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
std::string model; // װ<EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD>
|
||||
std::string mac; // װ<EFBFBD><EFBFBD>MAC<EFBFBD><EFBFBD>ַ
|
||||
int status; // <20><><EFBFBD><EFBFBD>״̬ (0: <20><><EFBFBD><EFBFBD>, 1: <20><><EFBFBD><EFBFBD>)
|
||||
std::vector<PointInfo> points; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
};
|
||||
|
||||
enum class ConnectionState {
|
||||
DISCONNECTED,
|
||||
CONNECTING,
|
||||
CONNECTED
|
||||
};
|
||||
|
||||
class ClientContext {
|
||||
public:
|
||||
uv_loop_t* loop;
|
||||
uv_tcp_t client;
|
||||
uv_timer_t timer;
|
||||
uv_timer_t reconnect_timer;
|
||||
ConnectionState state;
|
||||
int reconnect_attempts;
|
||||
volatile bool shutdown;
|
||||
DeviceInfo device_info; // װ<><D7B0><EFBFBD><EFBFBD>Ϣ
|
||||
|
||||
ClientContext(uv_loop_t* loop, const DeviceInfo& device, int index);
|
||||
~ClientContext();
|
||||
|
||||
void init_tcp();
|
||||
void start_timer();
|
||||
void start_reconnect_timer(int delay);
|
||||
void stop_timers();
|
||||
void close_handles();
|
||||
|
||||
private:
|
||||
int index_;
|
||||
};
|
||||
|
||||
// <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>
|
||||
Reference in New Issue
Block a user