设计思路
- 定义消息类型:使用枚举类型来定义不同的网络消息类型,如连接请求、数据传输、断开连接等。
- 定义回调函数指针类型:为每种消息类型定义对应的回调函数指针类型,这些回调函数可以接受不同的参数,具体取决于消息处理的需求。
- 设计注册和注销函数:设计用于注册和注销回调函数的函数,注册函数将回调函数指针与对应的消息类型关联起来,注销函数则解除这种关联。
- 消息处理函数:设计一个消息处理函数,当接收到网络消息时,根据消息类型查找并调用相应的回调函数。
核心代码实现
#include <stdio.h>
#include <stdlib.h>
// 定义消息类型
typedef enum {
CONNECT_REQUEST,
DATA_TRANSMISSION,
DISCONNECT,
// 可以添加更多消息类型
} MessageType;
// 定义回调函数指针类型
typedef void (*ConnectRequestCallback)();
typedef void (*DataTransmissionCallback)(const char* data, size_t length);
typedef void (*DisconnectCallback)();
// 定义一个结构体来存储回调函数指针
typedef struct {
ConnectRequestCallback connectRequestCallback;
DataTransmissionCallback dataTransmissionCallback;
DisconnectCallback disconnectCallback;
} CallbackRegistry;
// 全局的回调函数注册表
CallbackRegistry callbackRegistry;
// 注册连接请求回调函数
void registerConnectRequestCallback(ConnectRequestCallback callback) {
callbackRegistry.connectRequestCallback = callback;
}
// 注册数据传输回调函数
void registerDataTransmissionCallback(DataTransmissionCallback callback) {
callbackRegistry.dataTransmissionCallback = callback;
}
// 注册断开连接回调函数
void registerDisconnectCallback(DisconnectCallback callback) {
callbackRegistry.disconnectCallback = callback;
}
// 注销连接请求回调函数
void unregisterConnectRequestCallback() {
callbackRegistry.connectRequestCallback = NULL;
}
// 注销数据传输回调函数
void unregisterDataTransmissionCallback() {
callbackRegistry.dataTransmissionCallback = NULL;
}
// 注销断开连接回调函数
void unregisterDisconnectCallback() {
callbackRegistry.disconnectCallback = NULL;
}
// 处理接收到的消息
void handleMessage(MessageType type, const char* data, size_t length) {
switch (type) {
case CONNECT_REQUEST:
if (callbackRegistry.connectRequestCallback) {
callbackRegistry.connectRequestCallback();
}
break;
case DATA_TRANSMISSION:
if (callbackRegistry.dataTransmissionCallback) {
callbackRegistry.dataTransmissionCallback(data, length);
}
break;
case DISCONNECT:
if (callbackRegistry.disconnectCallback) {
callbackRegistry.disconnectCallback();
}
break;
default:
break;
}
}
// 示例回调函数
void connectRequestHandler() {
printf("Handling connect request\n");
}
void dataTransmissionHandler(const char* data, size_t length) {
printf("Handling data transmission: %.*s\n", (int)length, data);
}
void disconnectHandler() {
printf("Handling disconnect\n");
}
int main() {
// 注册回调函数
registerConnectRequestCallback(connectRequestHandler);
registerDataTransmissionCallback(dataTransmissionHandler);
registerDisconnectCallback(disconnectHandler);
// 模拟接收到消息
handleMessage(CONNECT_REQUEST, NULL, 0);
handleMessage(DATA_TRANSMISSION, "Hello, World!", 13);
handleMessage(DISCONNECT, NULL, 0);
// 注销回调函数
unregisterConnectRequestCallback();
unregisterDataTransmissionCallback();
unregisterDisconnectCallback();
return 0;
}