connection.c w/ flushing

This commit is contained in:
Protryon 2019-05-04 17:33:21 -07:00
parent 43adb01459
commit 730ab95e80
6 changed files with 21 additions and 13 deletions

View File

@ -34,4 +34,6 @@ struct connection {
struct server* server;
};
void connection_flush(struct player* player);
#endif /* BASIN_CONNECTION_H */

View File

@ -15,8 +15,6 @@
void player_openInventory(struct player* player, struct inventory* inv);
void flush_outgoing(struct player* player);
float randFloat();
void playSound(struct world* world, int32_t soundID, int32_t soundCategory, float x, float y, float z, float volume, float pitch);

17
src/connection.c Normal file
View File

@ -0,0 +1,17 @@
#include <basin/connection.h>
#include <basin/packet.h>
void connection_flush(struct player* player) {
if (player->conn == NULL) return;
struct packet* packet;
while ((packet = queue_maybepop(player->outgoing_packets)) != NULL) {
if(packet_write(player->conn, packet)) {
// TODO: we need to standardize how we close connections
player->conn->disconnect = 1;
break;
}
}
netmgr_trigger_write(player->conn->managed_conn);
}

View File

@ -25,15 +25,6 @@
#include <stdint.h>
#include <stdio.h>
void flush_outgoing(struct player* player) {
if (player->conn == NULL) return;
struct packet* packet;
while ((packet = queue_maybepop(player->outgoing_packets)) != NULL) {
packet_write(player->conn, packet);
}
netmgr_trigger_write(player->conn->managed_conn);
}
void loadPlayer(struct player* to, struct player* from) {
struct packet* pkt = xmalloc(sizeof(struct packet));
pkt->id = PKT_PLAY_CLIENT_SPAWNPLAYER;

View File

@ -142,7 +142,7 @@ int work_joinServer(struct connection* conn, char* username, char* uuid_string)
pkt->data.play_client.playerlistitem.players->action.addplayer.has_display_name = 0;
pkt->data.play_client.playerlistitem.players->action.addplayer.display_name = NULL;
queue_push(iter_player->outgoing_packets, pkt);
flush_outgoing(iter_player);
connection_flush(iter_player);
ITER_MAP_END();
}
pthread_rwlock_unlock(&conn->server->players_by_entity_id->rwlock);

View File

@ -57,7 +57,7 @@ void main_tick() {
pthread_rwlock_unlock(&playersToLoad->data_mutex);
pthread_cond_broadcast (&chunk_wake);
BEGIN_HASHMAP_ITERATION (players)
flush_outgoing (value);
connection_flush (value);
END_HASHMAP_ITERATION (players)
if (tick_counter % 20 == 0) {
pthread_rwlock_wrlock(&defunctPlayers->data_mutex);