Initial commit
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
#pragma once
|
||||
|
||||
#include "../Base/global_include.h"
|
||||
#include "core/main.h"
|
||||
#include "core/statistics.h"
|
||||
#include <cstdint>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
#include <functional>
|
||||
|
||||
typedef struct KCPCB KCPCB;
|
||||
IUINT16 xcrc16 (void *buf, IUINT16 len);
|
||||
IUINT32 xcrc32 (void *buf, IUINT32 len);
|
||||
IUINT16 rand_range_16(IUINT16 min, IUINT16 max);
|
||||
int check_cycle_0_9(const char *str, int len);
|
||||
|
||||
|
||||
// 这是一个协议串联结构,把每一个结构可以灵活组合实现各种特性
|
||||
// 串联的协议都是点对点的协议,从而实现协议的灵活组合
|
||||
|
||||
|
||||
|
||||
typedef struct Proto_Tree_Node Proto_Tree_Node;
|
||||
typedef struct Cache_List_Node Cache_List_Node;
|
||||
typedef struct Cache_List Cache_List;
|
||||
typedef struct Proto_Tree Proto_Tree;
|
||||
|
||||
|
||||
|
||||
|
||||
struct Base_CB {
|
||||
using Next_handle = std::function<void(Base_CB* bcb, Buf_Type buf, Len_Type len, void* user)>;
|
||||
Next_handle next_send{};
|
||||
Next_handle next_recv{};
|
||||
Cache_List_Node* pn{};
|
||||
virtual void send(Buf_Type buf, Len_Type len, void* user) = 0;
|
||||
virtual void recv(Buf_Type buf, Len_Type len, void* user) = 0;
|
||||
virtual void print_state_info(){};
|
||||
virtual ~Base_CB() = default;
|
||||
virtual void final_init(){};
|
||||
virtual void update() {};
|
||||
};
|
||||
|
||||
|
||||
void test_proto_chain();
|
||||
typedef IUINT32 (*Get_Millisecond)();
|
||||
|
||||
|
||||
|
||||
// tree 型协议
|
||||
// typedef struct Speed_Statistics Speed_Statistics;
|
||||
// typedef struct Value_Statistics Value_Statistics;
|
||||
// typedef struct Probability_Statistics Probability_Statistics;
|
||||
|
||||
typedef struct {
|
||||
Proto_Tree_Node *head, *tail;
|
||||
} Node_List;
|
||||
struct Proto_Tree_Node {
|
||||
using Handle = std::function<void(Proto_Tree_Node* node, Buf_Type buf, Len_Type len)>;
|
||||
//using Handle = void(*)(Proto_Tree_Node* node, Buf_Type buf, Len_Type len);
|
||||
Base_CB* cb{};
|
||||
// 结构数据
|
||||
Proto_Tree_Node *prev{}, *next{};
|
||||
Proto_Tree_Node* parent{};
|
||||
Node_List children{};
|
||||
Proto_Tree* tr{};
|
||||
// 该节点 极其子节点组成整体协议的勾子函数
|
||||
Handle pack_send{};
|
||||
Handle pack_recv{};
|
||||
Handle true_recv{};
|
||||
Handle true_send{};
|
||||
IUINT8 deep{};
|
||||
// 可以存放统计信息节点 供测试节点打印
|
||||
// const char* object_name; // 节点对象名称
|
||||
explicit Proto_Tree_Node(Base_CB* cb);
|
||||
~Proto_Tree_Node();
|
||||
};
|
||||
|
||||
|
||||
struct Cache_List_Node {
|
||||
Cache_List_Node *next, *prev;
|
||||
Proto_Tree_Node* tn;
|
||||
};
|
||||
struct Cache_List {
|
||||
Cache_List_Node *head, *tail;
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
struct Proto_Tree {
|
||||
//using Handle = void(*)(Proto_Tree* tr, Buf_Type buf, Len_Type len);
|
||||
using Handle = std::function<void(Proto_Tree* tr, Buf_Type buf, Len_Type len, void* user)>;
|
||||
Cache_List cache_list{};
|
||||
Node_List children{};
|
||||
void* user{};
|
||||
Handle pack_send{};
|
||||
Handle pack_recv{};
|
||||
Handle true_recv{};
|
||||
Handle true_send{};
|
||||
Proto_Tree();
|
||||
~Proto_Tree();
|
||||
void send( Buf_Type buf, Len_Type len);
|
||||
void recv( Buf_Type buf, Len_Type len);
|
||||
void print_state_info();
|
||||
void create();
|
||||
Proto_Tree_Node* append(Proto_Tree_Node* par, Base_CB* cb);
|
||||
Proto_Tree_Node* prepend(Proto_Tree_Node* par, Base_CB* cb);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// true pack
|
||||
// send 【真实数据】 顺着链表,不断增加 数据 【包头数据】 finial_send
|
||||
// recv 【包头数据】 顺着链表,不断减少 数据 【真实数据】 finial_recv
|
||||
void print_hex(const char* prefix, const uint8_t* data, int len, const char* suffix);
|
||||
|
||||
Reference in New Issue
Block a user