ENet(八)——enet_protocol_dispatch_incoming_commands

在enet_host_service函数中首先调用的是enet_protocol_dispatch_incoming_commands函数。这个函数服务端和客户端都会调用,只是:

服务端每次接受包时都会调用,但由于每次list都是空的,并不进入while。直到send函数和receive结束后list中接收到了包,才会

客户端只在连接服务端前调用,连接成功后就不再调用,因为event为null


static int
enet_protocol_dispatch_incoming_commands (ENetHost * host, ENetEvent * event)
{
    while (! enet_list_empty (& host -> dispatchQueue))
    {
       ENetPeer * peer = (ENetPeer *) enet_list_remove (enet_list_begin (& host -> dispatc»
 
       peer -> needsDispatch = 0; 
 
       switch (peer -> state)
       {
       case ENET_PEER_STATE_CONNECTION_PENDING:
       case ENET_PEER_STATE_CONNECTION_SUCCEEDED:
           enet_protocol_change_state (host, peer, ENET_PEER_STATE_CONNECTED);
 
           event -> type = ENET_EVENT_TYPE_CONNECT;
           event -> peer = peer;
           event -> data = peer -> eventData;
 
           return 1;
           
       case ENET_PEER_STATE_ZOMBIE:
           host -> recalculateBandwidthLimits = 1;
 
           event -> type = ENET_EVENT_TYPE_DISCONNECT;
           event -> peer = peer;
           event -> data = peer -> eventData;
 
           enet_peer_reset (peer);
 
           return 1;
 
       case ENET_PEER_STATE_CONNECTED:
           if (enet_list_empty (& peer -> dispatchedCommands))
             continue;
 
           event -> packet = enet_peer_receive (peer, & event -> channelID);
           if (event -> packet == NULL)
             continue;   
	event -> type = ENET_EVENT_TYPE_RECEIVE;
           event -> peer = peer;
 
           if (! enet_list_empty (& peer -> dispatchedCommands))
           {
              peer -> needsDispatch = 1;
         
              enet_list_insert (enet_list_end (& host -> dispatchQueue), & peer -> dispatc»
           }
 
           return 1;
 
       default:
           break;
       }
    }
 
    return 0;
}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值