#ifndef __COMMON_SOCKET_H
#define __COMMON_SOCKET_H

#include <string.h>
#include <syslog.h>
#include "ipc_session.h"
#include "lnxall_list.h"
#include "dy_utils/dy_common.h"
#include "dy_utils/dy_ds.h"
#include "dy_utils/kv_array.h"
#include "dy_utils/dy_pp.h"
#include "dy_utils/dy_socket_session.h"
#include "dy_utils/dy_ipc.h"

#define ZHENGXIAN_NODE_STATUS_BAK_FILE "/app/zhengxian_status.bak"
#define APP_KEY "Fmp2awffRS3leQa3"

typedef struct _zhengxian_var_s zhengxian_var_t;

typedef enum
{
    SOCK_INIT = 0,
    SOCK_CONNECTED,
    SOCK_DESCONN,
} sock_state_e;

typedef struct _connect_config_s
{
    struct list_head list;
    char sn[SN_MAX_LEN]; ///<设备SN
    char *addr;
    int port;
    socket_session_t *socket_client;
    zhengxian_var_t *var;
} connect_config_t;

typedef struct _zhengxian_var_s
{
    ipc_session_t *session; //内部broker的MQTT session，用于进程间通信
    struct list_head connect_list;
    nodes_cfg_table_t *nodes_cfg_table; //节点信息
    template_table_t *template_table;   //模板信息
    kv_array_t identifier_backup;
    dev_status_table_t *ds; //下挂节点的状态信息
    char sn_str[SN_MAX_LEN];
    char proc_name[PROGRAM_NAME_LEN];
    int heartbeat_timer;
    int node_cnt;
} zhengxian_var_t;

#endif
