push_game_state(Game_State, null);
}
+ case .Connection_Rejected {
+ cr_packet := cast(^packets.Connection_Rejected) packet;
+ printf("Connection refused: {}\n", cr_packet.reason);
+
+ pop_game_state();
+ push_game_state(Connect_Menu, null);
+ }
+
case .Chat_Message {
chat_packet := cast(^packets.Chat_Message) packet;
chat_messages << string.alloc_copy(.{
send_chat_message(0, msg);
}
- msg := new(packets.Verify_Connect); @LEAK
+ msg := new(packets.Verify_Connect);
msg.type = .Verify_Connect;
msg.player_id = ~~next_player_id;
- p := new(onet.Packet); @LEAK
+ p := new(onet.Packet);
p.flags |= .Reliable;
p.data = any_to_buffer(msg);
+ p.free_data = true;
onet.peer_send(peer, 0, p);
respond_with_error :: macro (reason: packets.Connection_Rejected.Reason) {
- msg := new(packets.Connection_Rejected); @LEAK
+ msg := new(packets.Connection_Rejected);
msg.type = .Connection_Rejected;
msg.reason = reason;
- p := new(onet.Packet); @LEAK
+ p := new(onet.Packet);
p.flags |= .Reliable;
p.data = any_to_buffer(msg);
+ p.free_data = true;
onet.peer_send(peer, 0, p);
return;
}
}
case .Chat_Message {
- packet := new(onet.Packet); @LEAK
+ packet := new(onet.Packet);
packet.flags |= .Reliable;
packet.data = memory.copy_slice(packet_data);
+ packet.free_data = true;
onet.host_broadcast(host, 0, packet);
}
}
}
send_chat_message :: (from: u16, msg: [] u8) {
- chat_packet, packet_size := new_with_extra(packets.Chat_Message, msg.count); @LEAK
+ chat_packet, packet_size := new_with_extra(packets.Chat_Message, msg.count);
chat_packet.type = .Chat_Message;
chat_packet.sender_id = from;
chat_packet.message_length = ~~ msg.count;
memory.copy(~~ ^chat_packet.message_data, msg.data, msg.count);
- packet := new(onet.Packet); @LEAK
+ packet := new(onet.Packet);
packet.flags |= .Reliable;
packet.data = .{ ~~chat_packet, packet_size };
+ packet.free_data = true;
onet.host_broadcast(host, 0, packet);
}