zhuix7788的专栏

功能:将当前要发送的ENetProtocol信息存放在host->command中。对端为peer,数据包内容在peer中保存,,这里只用到了peer的acknowledgement结构体数据。

commandCount、bufferCount等都是对端的个数,如果是一对一发送,该值为1.while循环就只循环一次。

函数:enet_protocol_send_acknowledgements

static void enet_protocol_send_acknowledgements (ENetHost * host, ENetPeer * peer){ENetProtocol * command = & host -> commands [host -> commandCount]; //最终保存目标ENetBuffer * buffer = & host -> buffers [host -> bufferCount];ENetAcknowledgement * acknowledgement;ENetListIterator currentAcknowledgement;enet_uint16 reliableSequenceNumber;currentAcknowledgement = enet_list_begin (& peer -> acknowledgements); //将待发送的指令存入currentAcknowledgement,之后还会降currentAcknowledgement赋给acknowledgementint circle = 0;while (currentAcknowledgement != enet_list_end (& peer -> acknowledgements))//只循环了一次{circle++;if(circle >= 4){host -> continueSending = 1;break;}if (command >= & host -> commands [sizeof (host -> commands) / sizeof (ENetProtocol)»buffer >= & host -> buffers [sizeof (host -> buffers) / sizeof (ENetBuffer)] ||peer -> mtu – host -> packetSize < sizeof (ENetProtocolAcknowledge)){host -> continueSending = 1;break;}acknowledgement = (ENetAcknowledgement *) currentAcknowledgement;currentAcknowledgement = enet_list_next (currentAcknowledgement);buffer -> data = command;buffer -> dataLength = sizeof (ENetProtocolAcknowledge);host -> packetSize += buffer -> dataLength;//为8*count,一对一是8reliableSequenceNumber = ENET_HOST_TO_NET_16 (acknowledgement -> command.header.reliableSequenceNumber); //在1的基础上每次累加256command -> header.command = ENET_PROTOCOL_COMMAND_ACKNOWLEDGE;command -> header.channelID = acknowledgement -> command.header.channelID;command -> header.reliableSequenceNumber = reliableSequenceNumber;command -> acknowledge.receivedReliableSequenceNumber = reliableSequenceNumber;command -> acknowledge.receivedSentTime = ENET_HOST_TO_NET_16 (acknowledgement -> sentTime);if ((acknowledgement -> command.header.command & ENET_PROTOCOL_COMMAND_MASK) == ENET_PROTOCOL_COMMAND_DISCONNECT)enet_protocol_dispatch_state (host, peer, ENET_PEER_STATE_ZOMBIE);//销毁中转的指针enet_list_remove (& acknowledgement -> acknowledgementList);enet_free (acknowledgement);++ command;++ buffer;}host -> commandCount = command – host -> commands;host -> bufferCount = buffer – host -> buffers;}

要想捉大鱼,不能怕水深。要想摘玫瑰,就得不怕刺。

zhuix7788的专栏

相关文章:

你感兴趣的文章:

标签云: