TCP网络模型的封装
最近学习了TCP网络模型的封装,其中运用的封装技术个人感觉有点绕
在反复读代码、做思维导图下初步理解了这套封装模型,不禁感叹原来代码还能这样写?神奇!
为此将源码分享出来并将流程图画出,方便理解和复习
PS:下列思维导图仅代表个人理解,如有误恳请指出纠正
模型继承关系图
要理解该模型,我认为首先要画图理解类的继承关系,下面是我画的一个简单关系图
模型流程图
下面是我画的该模型的大致流程图,仅供参考,有误恳请指出
具体代码实现
EventLoop.hpp
#ifndef _EVENTLOOP_H_
#define _EVENTLOOP_H_
#include <list>
#include <WinSock2.h>
enum class E_Event_Type
{
Recv,
Send,
};
class IEventCallback
{
public:
virtual void OnNetEvent(E_Event_Type e) = 0;
virtual void OnClose() = 0;
};
struct sSelectEvent
{
SOCKET sock;
IEventCallback* event;
};
class EventLoop
{
private:
std::list<sSelectEvent*> _events;
std::list<sSelectEvent*> _delEventCaches;
public:
void LoopOnce();
void AddEvent(sSelectEvent* e)
{
_events.push_back(e);
}
void DelEvent(sSelectEvent* e);
};
#endif
EventLoop.cpp
#include "EventLoop.hpp"
void EventLoop::LoopOnce()
{
fd_set reads;
FD_ZERO(&reads);
do
{
auto begin = _events.begin();
auto end = _events.end();
for (; begin != end; ++begin)
FD_SET((*begin)->sock, &reads);
//(*begin)->event->NeedWrite()
} while (false);
int nSeclect = select(0, &reads, nullptr, nullptr, nullptr