formatting
This commit is contained in:
parent
c3959a6970
commit
34c37417a9
@ -120,17 +120,17 @@ NET_W32_Peer *NET_W32_TouchPeerFromKey(NET_W32_Pipe *pipe, NET_Key key)
|
||||
{
|
||||
SllStackPop(NET_W32.first_free_peer);
|
||||
{
|
||||
String old_msg_fragment = peer->fragment;
|
||||
String old_msg_fragment = peer->msg_fragment;
|
||||
ZeroStruct(peer);
|
||||
peer->fragment = old_msg_fragment;
|
||||
peer->fragment.len = 0;
|
||||
peer->msg_fragment = old_msg_fragment;
|
||||
peer->msg_fragment.len = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Arena *perm = PermArena();
|
||||
peer = PushStruct(perm, NET_W32_Peer);
|
||||
peer->fragment.text = PushStructsNoZero(perm, u8, NET_PacketSize);
|
||||
peer->msg_fragment.text = PushStructsNoZero(perm, u8, NET_PacketSize);
|
||||
}
|
||||
peer->hash = hash;
|
||||
peer->key = key;
|
||||
@ -589,6 +589,7 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
//- Read socket
|
||||
|
||||
// TODO: Rate limit
|
||||
// TODO: Per-frame packet limit to ensure other pipes are still serviced during load
|
||||
|
||||
{
|
||||
i32 len = 0;
|
||||
@ -670,7 +671,7 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
// Insert packet
|
||||
{
|
||||
NET_W32_Packet *left = peer->last_fragmented_packet;
|
||||
NET_W32_Packet *left = peer->last_frag_packet;
|
||||
for (; left; left = left->prev)
|
||||
{
|
||||
if (left->seq < packet->seq)
|
||||
@ -678,13 +679,13 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
break;
|
||||
}
|
||||
}
|
||||
DllQueueInsert(peer->first_fragmented_packet, peer->last_fragmented_packet, left, packet);
|
||||
DllQueueInsert(peer->first_frag_packet, peer->last_frag_packet, left, packet);
|
||||
}
|
||||
|
||||
// Transfer fragmented -> contiguous packets
|
||||
if (is_sequential)
|
||||
{
|
||||
NET_W32_Packet *contig_start = peer->first_fragmented_packet;
|
||||
NET_W32_Packet *contig_start = peer->first_frag_packet;
|
||||
NET_W32_Packet *contig_end = packet;
|
||||
for (NET_W32_Packet *tmp = packet->next; tmp; tmp = tmp->next)
|
||||
{
|
||||
@ -698,16 +699,16 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
}
|
||||
}
|
||||
|
||||
if (peer->last_contiguous_packet)
|
||||
if (peer->last_cont_packet)
|
||||
{
|
||||
peer->last_contiguous_packet->next = contig_start;
|
||||
peer->last_cont_packet->next = contig_start;
|
||||
}
|
||||
else
|
||||
{
|
||||
peer->first_contiguous_packet = contig_start;
|
||||
peer->first_cont_packet = contig_start;
|
||||
}
|
||||
contig_start->prev = peer->last_contiguous_packet;
|
||||
peer->last_contiguous_packet = contig_end;
|
||||
contig_start->prev = peer->last_cont_packet;
|
||||
peer->last_cont_packet = contig_end;
|
||||
|
||||
if (contig_end->next)
|
||||
{
|
||||
@ -715,9 +716,9 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
}
|
||||
else
|
||||
{
|
||||
peer->last_fragmented_packet = 0;
|
||||
peer->last_frag_packet = 0;
|
||||
}
|
||||
peer->first_fragmented_packet = contig_end->next;
|
||||
peer->first_frag_packet = contig_end->next;
|
||||
contig_end->next = 0;
|
||||
|
||||
i64 diff = contig_end->seq - peer->bottom_ack;
|
||||
@ -764,13 +765,13 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
for (NET_W32_Peer *peer = pipe->first_peer; peer; peer = peer->next)
|
||||
{
|
||||
NET_W32_Packet *first_msg_packet = peer->first_contiguous_packet;
|
||||
for (NET_W32_Packet *packet = peer->first_contiguous_packet; packet;)
|
||||
NET_W32_Packet *first_msg_packet = peer->first_cont_packet;
|
||||
for (NET_W32_Packet *packet = peer->first_cont_packet; packet;)
|
||||
{
|
||||
NET_W32_Packet *next = packet->next;
|
||||
{
|
||||
b32 msg_has_end = 0;
|
||||
if (packet->msg_seq != peer->last_contiguous_packet->msg_seq || !!(peer->last_contiguous_packet->flags | NET_W32_PacketFlag_EndMsg))
|
||||
if (packet->msg_seq != peer->last_cont_packet->msg_seq || !!(peer->last_cont_packet->flags | NET_W32_PacketFlag_EndMsg))
|
||||
{
|
||||
msg_has_end = 1;
|
||||
}
|
||||
@ -787,14 +788,14 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
DllQueuePush(msg_buff->msgs.first, msg_buff->msgs.last, msg);
|
||||
++msg_buff->msgs.count;
|
||||
{
|
||||
peer->first_contiguous_packet = next;
|
||||
peer->first_cont_packet = next;
|
||||
if (next)
|
||||
{
|
||||
next->prev = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
peer->last_contiguous_packet = 0;
|
||||
peer->last_cont_packet = 0;
|
||||
}
|
||||
packet->next = NET_W32.first_free_packet;
|
||||
NET_W32.first_free_packet = first_msg_packet;
|
||||
@ -854,14 +855,14 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
b32 is_msg_end = 0;
|
||||
while (!is_msg_end)
|
||||
{
|
||||
i64 copy_len = MinI64(NET_PacketSize - (i64)peer->fragment.len, src_data.len - src_pos);
|
||||
CopyBytes(peer->fragment.text + peer->fragment.len, src_data.text + src_pos, copy_len);
|
||||
i64 copy_len = MinI64(NET_PacketSize - (i64)peer->msg_fragment.len, src_data.len - src_pos);
|
||||
CopyBytes(peer->msg_fragment.text + peer->msg_fragment.len, src_data.text + src_pos, copy_len);
|
||||
src_pos += copy_len;
|
||||
peer->fragment.len += copy_len;
|
||||
peer->msg_fragment.len += copy_len;
|
||||
|
||||
// Push packet
|
||||
is_msg_end = src_pos >= (i64)src_data.len;
|
||||
if (peer->fragment.len == NET_PacketSize || is_msg_end)
|
||||
if (peer->msg_fragment.len == NET_PacketSize || is_msg_end)
|
||||
{
|
||||
NET_W32_Packet *packet = NET_W32.first_free_packet;
|
||||
if (packet)
|
||||
@ -879,15 +880,15 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
}
|
||||
packet->seq = ++peer->seq;
|
||||
packet->msg_seq = msg_seq;
|
||||
CopyBytes(packet->data.text, peer->fragment.text, peer->fragment.len);
|
||||
packet->data.len = peer->fragment.len;
|
||||
CopyBytes(packet->data.text, peer->msg_fragment.text, peer->msg_fragment.len);
|
||||
packet->data.len = peer->msg_fragment.len;
|
||||
if (is_msg_end)
|
||||
{
|
||||
packet->flags |= NET_W32_PacketFlag_EndMsg;
|
||||
}
|
||||
|
||||
DllQueuePush(peer->first_remote_packet, peer->last_remote_packet, packet);
|
||||
peer->fragment.len = 0;
|
||||
peer->msg_fragment.len = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -950,7 +951,7 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
for (NET_W32_Peer *peer = pipe->first_peer; peer; peer = peer->next)
|
||||
{
|
||||
// bottom_ack represents the highest continuous sequence acknowledgement, meaning sequences in range [0, bottom_ack] are always acked.
|
||||
// bottom_ack represents the highest contiguous sequence acknowledgement, meaning sequences in range [0, bottom_ack] are always acked.
|
||||
// This means bottom_ack + 1 is never acked.
|
||||
// Ack bits represent acks for sequences in range [bottom_ack + 2, bottom_ack + 65]
|
||||
i64 bottom_ack = peer->remote_bottom_ack;
|
||||
|
||||
@ -87,18 +87,21 @@ Struct(NET_W32_Peer)
|
||||
i64 bottom_ack;
|
||||
u64 ack_bits;
|
||||
|
||||
// Outgoing packets awaiting acknowledgement
|
||||
NET_W32_Packet *first_remote_packet;
|
||||
NET_W32_Packet *last_remote_packet;
|
||||
|
||||
NET_W32_Packet *first_fragmented_packet;
|
||||
NET_W32_Packet *last_fragmented_packet;
|
||||
// Fragmented msg packets awaiting holes to be filled
|
||||
NET_W32_Packet *first_frag_packet;
|
||||
NET_W32_Packet *last_frag_packet;
|
||||
|
||||
NET_W32_Packet *first_contiguous_packet;
|
||||
NET_W32_Packet *last_contiguous_packet;
|
||||
// Contiguous msg packets awaiting assembly
|
||||
NET_W32_Packet *first_cont_packet;
|
||||
NET_W32_Packet *last_cont_packet;
|
||||
|
||||
i64 seq;
|
||||
i64 msg_seq;
|
||||
String fragment;
|
||||
String msg_fragment;
|
||||
|
||||
i64 last_packet_received_ns;
|
||||
i64 last_packet_sent_ns;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user