如果unit是连接缓存包
获取包指向的sockfd、evobj、ip_addr
0==strlen(ip_addr) 处理断线包
colseconnect_step2(sockfd,evobj)
调用Python函数DisConnect
0!=strlen(ip_addr) 处理新连接包
记录玩家sockfd并与evobj关联 record_sockfd_libevent
调用Python函数Login
释放unit资源 Free_Queue_Unit_Conn
如果unit是读取缓存包
获取包指向的sockfd、struct evbuffer * buffer
初始化收包缓存 g_Buffer_Temp
将数据流以BUFFSIZE为长度单位,将数据从buffer复制给g_Buffer_Temp,再压入解包队列
while( (readlen=evbuffer_remove(buffer,g_Buffer_Temp,BUFFSIZE))>0 )
setbuffer_unpack(sockfd,g_Buffer_Temp,readlen);
memset(g_Buffer_Temp,'\0',BUFFSIZE_EXT);
判断并试图进入解包逻辑 while( get_validunpack(sockfd) > 0 )
获取协议号 proto=getbuffer_unpack(sockfd)
调用Python函数OnCommand,由Python层操作协议
解包
UnPackInt
UnPackString
发送请求
PacketPrepare
PacketInt
PacketString
PacketSend
释放unit资源 Free_Queue_Unit_Read(unit);