mirror of https://github.com/basinserver/basin/
connection.c w/ flushing
This commit is contained in:
parent
43adb01459
commit
730ab95e80
|
@ -34,4 +34,6 @@ struct connection {
|
|||
struct server* server;
|
||||
};
|
||||
|
||||
void connection_flush(struct player* player);
|
||||
|
||||
#endif /* BASIN_CONNECTION_H */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue