⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eventlib.h

📁 linux的事件机制
💻 H
字号:

#ifndef _EVENT_CENTER_DEF
#define _EVENT_CENTER_DEF
#include <sys/types.h>

#define _DEBUG_EVENT_PRINTF

#if defined _DEBUG_EVENT_PRINTF
#define debug_printf(format, ...)\
		printf(format, ## __VA_ARGS__)
#else
#define  debug_printf(format, ...)
#endif

#define MAX_TRY_NUM 10
#define MAX_LEN_NAME 30

#define INVALID_SOCKET -1
#define	EVENT_MONITOR_ADDR	"127.0.0.2"
#define	EVENT_MONITOR_PORT	9999

#define EVENT_INFORM_ADDR EVENT_MONITOR_ADDR
#define EVENT_INFORM_PORT EVENT_MONITOR_PORT

#define EVENT_REGISTER_ADDR EVENT_MONITOR_ADDR
#define EVENT_REGISTER_PORT EVENT_MONITOR_PORT

#define EVENT_UNREG_ADDR EVENT_MONITOR_ADDR
#define EVENT_UNREG_PORT EVENT_MONITOR_PORT

#define	EVENT_REQUEST_ADDR	EVENT_MONITOR_ADDR
#define	EVENT_REQUEST_PORT	EVENT_MONITOR_PORT

#define UNREGISTER_SUPPORTED

typedef int SOCKET;
typedef unsigned char BYTE;
typedef unsigned long LONG;
typedef unsigned char BOOL;

/* event types */
typedef unsigned long events_t;

#define TIME_CH_EVENT 0x00000001
#define IP_CH_EVENT   0x00000002
#define EVENTS_MASK (TIME_CH_EVENT | IP_CH_EVENT)
#define MAX_EVENTS 2

#define is_events_invalid(events) \
        ((events & EVENTS_MASK)? 0 : 1)
#define set_events(events_sets, events)\
        (events_sets |= events)
#define clear_events(events_sets, events)\
        (events_sets &= ~events)
#define is_events_set(events_sets, events)\
        ((events_sets & events) != 0)

#define ETYPE2INDEX_START(events, i)\
{\
    for (i = 0; i < MAX_EVENTS; i++){\
        if (events & (1<<i)){

#define ETYPE2INDEX_END\
		}\
	}\
}

/* frame types */
enum frame_type{
    FRAME_INVALID = 0,
    FRAME_FIRST,
    FRAME_REGISTER = FRAME_FIRST,
#if defined UNREGISTER_SUPPORTED
    FRAME_UNREGISTER,
#endif
    FRAME_ACK,
    FRAME_INFORM,
    FRAME_REQUEST,
    FRAME_REPONSE,
    FRAME_END = FRAME_REPONSE
}; 
#define is_frame_type_invalid(type) \
        ((FRAME_FIRST <= type && type <= FRAME_END)? 0 : 1)

/* exchange struct */
typedef struct e_register{
    pid_t reg_pid;
    events_t reg_events;
    int reg_sig;
    BOOL reg_ignore;
    char reg_name[MAX_LEN_NAME+1];
}e_register;

#if defined UNREGISTER_SUPPORTED
typedef struct e_unregister{
    char unreg_name[MAX_LEN_NAME+1];
}e_unregister;
#endif

typedef struct e_inform{
    events_t inf_events;
}e_inform;

typedef struct e_request{
    char  request_name[MAX_LEN_NAME+1];
}e_request;

typedef struct e_reponse{
    events_t reponse_events;
}e_reponse;

typedef struct e_ack{
    BYTE ack_ok; /* 1 - ok, 0 - fail */
}e_ack;

/* frame type */
typedef struct event_frame{
    enum frame_type type;
    union{
        struct e_register reg;
    #if defined UNREGISTER_SUPPORTED
        struct e_unregister unreg;
    #endif
        struct e_inform inform;
        struct e_request request;
        struct e_reponse reponse;
        struct e_ack ack;
    }body;
}event_frame;

int
close_socket(SOCKET *sock){
    if (*sock != INVALID_SOCKET){
        close(*sock);
        *sock = INVALID_SOCKET;
        return 0;
    } else{
        return -1;
    }
}

/* external call interface */
int _receive_frame(SOCKET s_src, struct event_frame *p_in);
int _send_frame(SOCKET s_dest, struct event_frame *p_out);
int send_frame(struct sockaddr_in *server, struct event_frame *frame,\
               SOCKET *p_sock);
int send_ack(SOCKET s, BOOL sta);

int client_register(pid_t pid, char *p_name, events_t events,\
                    int num_sig, BOOL req_ignore);
#if defined UNREGISTER_SUPPORTED
int client_unregister(const char *p_name);
#endif
int client_request(char *p_name, events_t *events);

int events_inform(events_t events);

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -