要设计好一个项目必须要有一个健全的代码框架

一个结构体内有数据域和处理数据的函数指针, 先实现管理链表的函数 增加节点 删除节点 清空链表 遍历节点对每个节点进行操作

再实现协议的注册 把对象socket 添加到链表中进行管理

使用链表实现管理协议的操作 , 创建链表(LinkListInit)对象 ,

添加注册协议(尾部添加链表节点(RegisterProtocol)) ,


删除协议(头部删除(DeleteProtocol)) ,

遍历链表的节点并对每一个节点进行匹配函数操作(TraverseList) ,

删除指定ID的协议(删除指定节点(DeleteNode)),

清空链表(把所以节点删除(ClearProtocol)), 销毁协议对象(把链表对象置空(DestoryProtocolStack)), 返回链表长度(父链表对象的length(GetCurrentSize)).

注册HTTP协议(InitHttp):1.新建(对象)节点(malloc)

2.设置对象(t\_data里 id = HTTP ; flag = inuse; init = 另外写一个函数(InitHttpNode)连接或监听; SendFunction = 另外实现发送函数(HttpSendFunction))

( InitHttpNode: 设置连接的 ip地址 端口号 或 监听 用的... HttpSendFunction : 发送send\_buffer用的....

3.把创建并设置好的对象添加到(RegisterProtocol)到链表对象里

注册HTTPS TCP 协议的代码框架同HTTP

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define BUFFER_SIZE 0x1000
 5     
 6 #define HTTP  0x1
 7 #define HTTPS 0x2
 8 #define TCP   0x3
 9     
10 #define INUSE  0x1
11 #define UNUSE  0x2
12     
13 #define EMPTY   0x2
14 #define NOEMPTY 0x3
15 
16 #define false 0
17 #define ture 1
18 
19 /* Application parameters */
20 #define DEBUG (1)
21     /* Debug prints */
22 #if DEBUG
23     #define DBG_PRINT(fmt, args...)  do{printf("[*]Listlink: <%s>: " fmt "\n" \
24                             ,__func__, ##args); } while (false)
25 #else
26     #define DBG_PRINT(...) do {} while (false)
27 #endif
28 
29 
30 typedef unsigned char  u8;
31 typedef unsigned short u16;
32 typedef unsigned int   u32;
33 
34 typedef struct _T_NodeStruct{
35     u8  id;
36     u8  flag;
37     u8  send_buffer[BUFFER_SIZE];
38     u32 (* Init)(void);
39     u32 (* SendFunction)(int fd,u8 *send_buffer,u32 length);
40 }T_NodeStruct;
41 typedef T_NodeStruct * Pt_NodeStruct;
42 
43 
44 typedef struct _T_ListLinkNode{
45     T_NodeStruct              t_data;
46     struct _T_ListLinkNode  * pt_next;
47 }T_ListLinkNode;
48 typedef T_ListLinkNode * Pt_ListLinkNode;
49 
50 typedef struct _T_list{
51     Pt_ListLinkNode  pfront;
52     Pt_ListLinkNode  prear;
53     u32              length;
54 }T_list;
55 typedef T_list * Pt_list;
56 
57 
58 void ClearProtocal( Pt_list ptlist );  //清空协议 利用Register调用的DeleteProtocol把链表内的节点全部删除
59 void DeleteNode(Pt_list ptlist,u8 id);  //选择id进行删除节点
60 void DeleteProtocal(Pt_list ptlist, Pt_ListLinkNode ptlistnode );  //删除头节点并备份要删除的数据 , 第二个参数也可以给NULL不保存
61 void DestoryProtocalStack( Pt_list ptlist );    //把链表节点全部置空
62 u32 GetCurrentSize( Pt_list ptlist );    //获得当前链表的长度
63 u8 IsEmpty(Pt_list ptlist );    //判空
64 Pt_list ListLinkInit( void );    //创建链表对象
65 void RegisterProtocal(Pt_list ptlist,Pt_ListLinkNode ptlistnode );  //注册协议 , 把创建的节点对象添加到链表中,进行管理
66 void TraverseList( Pt_list ptlist, void(* Traverse)(Pt_ListLinkNode ptlistlinknode,u8 *)); <br></br>                                               //匹配函数,根据传入的函数对链表中的每个节点进行操作

标签: 节点, list, define, LInux, 链表, ListLinkNode, Pt

相关文章推荐

添加新评论,含*的栏目为必填