use iocp for net worker waits instead of WSAPoll + dummy sockets
This commit is contained in:
parent
34c37417a9
commit
cacdf10229
@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#define NET_PacketSize 1024
|
#define NET_PacketSize 1024
|
||||||
|
|
||||||
|
#define NET_Ephemeral 0xFFFFFFFFFFFFFFFFull
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Opaque types
|
//~ Opaque types
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -119,6 +119,18 @@ Struct(NET_W32_PeerBin)
|
|||||||
|
|
||||||
Struct(NET_W32_Pipe)
|
Struct(NET_W32_Pipe)
|
||||||
{
|
{
|
||||||
|
//- IOCP data
|
||||||
|
|
||||||
|
OVERLAPPED ovl; // First field must be OVERLAPPED for cast from IOCP returns
|
||||||
|
|
||||||
|
i32 iocp_count; // How many overlapped operations are currently queued.
|
||||||
|
|
||||||
|
WSABUF recv_wsabuff;
|
||||||
|
struct sockaddr_in6 recv_addr;
|
||||||
|
i32 recv_addr_sz;
|
||||||
|
|
||||||
|
SOCKET udp;
|
||||||
|
|
||||||
//- Shared data
|
//- Shared data
|
||||||
|
|
||||||
NET_W32_Pipe *next;
|
NET_W32_Pipe *next;
|
||||||
@ -139,6 +151,8 @@ Struct(NET_W32_Pipe)
|
|||||||
|
|
||||||
//- Worker data
|
//- Worker data
|
||||||
|
|
||||||
|
i64 last_attempted_bind_ns;
|
||||||
|
|
||||||
NET_W32_Peer *first_peer;
|
NET_W32_Peer *first_peer;
|
||||||
NET_W32_Peer *last_peer;
|
NET_W32_Peer *last_peer;
|
||||||
i64 num_msg_packets_received_this_frame;
|
i64 num_msg_packets_received_this_frame;
|
||||||
@ -147,7 +161,6 @@ Struct(NET_W32_Pipe)
|
|||||||
NET_W32_PeerBin *peer_bins;
|
NET_W32_PeerBin *peer_bins;
|
||||||
|
|
||||||
u64 bound_port;
|
u64 bound_port;
|
||||||
SOCKET udp;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
@ -170,8 +183,7 @@ Struct(NET_W32_Ctx)
|
|||||||
NET_W32_Peer *first_free_peer;
|
NET_W32_Peer *first_free_peer;
|
||||||
NET_W32_Packet *first_free_packet;
|
NET_W32_Packet *first_free_packet;
|
||||||
|
|
||||||
NET_W32_DummySocket wake_send_sock;
|
HANDLE iocp;
|
||||||
NET_W32_DummySocket wake_recv_sock;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern NET_W32_Ctx NET_W32;
|
extern NET_W32_Ctx NET_W32;
|
||||||
@ -186,6 +198,7 @@ struct sockaddr_in6 NET_W32_AddressFromKey(NET_Key key);
|
|||||||
void NET_W32_SignalWorker(void);
|
void NET_W32_SignalWorker(void);
|
||||||
NET_W32_Peer *NET_W32_TouchPeerFromKey(NET_W32_Pipe *pipe, NET_Key key);
|
NET_W32_Peer *NET_W32_TouchPeerFromKey(NET_W32_Pipe *pipe, NET_Key key);
|
||||||
u32 NET_W32_ChecksumFromPacketString(String str);
|
u32 NET_W32_ChecksumFromPacketString(String str);
|
||||||
|
void NET_W32_PostRecv(NET_W32_Pipe *pipe);
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Worker
|
//~ Worker
|
||||||
|
|||||||
@ -2651,6 +2651,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
|||||||
{
|
{
|
||||||
// V_PushNotif(Lit("Hello!!!"));
|
// V_PushNotif(Lit("Hello!!!"));
|
||||||
P_Msg *chat_msg = P_PushMsg(P_MsgKind_Chat, Lit("Hello!!!"));
|
P_Msg *chat_msg = P_PushMsg(P_MsgKind_Chat, Lit("Hello!!!"));
|
||||||
|
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2670,7 +2672,6 @@ void V_TickForever(WaveLaneCtx *lane)
|
|||||||
|
|
||||||
P_MsgList in_msgs = Zi;
|
P_MsgList in_msgs = Zi;
|
||||||
{
|
{
|
||||||
NET_Bind(net_pipe, 0);
|
|
||||||
NET_MsgList net_msgs = NET_Swap(frame->arena, net_pipe);
|
NET_MsgList net_msgs = NET_Swap(frame->arena, net_pipe);
|
||||||
for (NET_Msg *net_msg = net_msgs.first; net_msg; net_msg = net_msg->next)
|
for (NET_Msg *net_msg = net_msgs.first; net_msg; net_msg = net_msg->next)
|
||||||
{
|
{
|
||||||
@ -3847,7 +3848,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
|||||||
if (frame->held_buttons[Button_R] && !prev_frame->held_buttons[Button_R])
|
if (frame->held_buttons[Button_R] && !prev_frame->held_buttons[Button_R])
|
||||||
{
|
{
|
||||||
LogDebugF("Sending test payload");
|
LogDebugF("Sending test payload");
|
||||||
NET_Push(net_pipe, server_key, STRING(P_TilesCount, predict_world->tiles), 0);
|
// NET_Push(net_pipe, server_key, STRING(P_TilesCount, predict_world->tiles), 0);
|
||||||
|
NET_Push(net_pipe, server_key, Lit("Hello there!"), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user