From 0a1172b75f571685c264a8b9d8ee224bbf11381f Mon Sep 17 00:00:00 2001 From: xolatile Date: Wed, 6 Aug 2025 22:54:55 +0200 Subject: Please do not hate me, it makes sense... --- src/engine/client.cpp | 118 +++++++++++++++----------------------------------- 1 file changed, 36 insertions(+), 82 deletions(-) (limited to 'src/engine/client.cpp') diff --git a/src/engine/client.cpp b/src/engine/client.cpp index bd46b24..6ae6c27 100644 --- a/src/engine/client.cpp +++ b/src/engine/client.cpp @@ -6,15 +6,13 @@ ENetHost *clienthost = NULL; ENetPeer *curpeer = NULL, *connpeer = NULL; int connmillis = 0, connattempts = 0, discmillis = 0; -bool multiplayer(bool msg) -{ +bool multiplayer(bool msg) { bool val = curpeer || hasnonlocalclients(); if(val && msg) conoutf(CON_ERROR, "operation not available in multiplayer"); return val; } -void setrate(int rate) -{ +void setrate(int rate) { if(!curpeer) return; enet_host_bandwidth_limit(clienthost, rate*1024, rate*1024); } @@ -27,40 +25,34 @@ VARF(throttle_interval, 0, 5, 30, throttle()); VARF(throttle_accel, 0, 2, 32, throttle()); VARF(throttle_decel, 0, 2, 32, throttle()); -void throttle() -{ +void throttle() { if(!curpeer) return; ASSERT(ENET_PEER_PACKET_THROTTLE_SCALE==32); enet_peer_throttle_configure(curpeer, throttle_interval*1000, throttle_accel, throttle_decel); } -bool isconnected(bool attempt, bool local) -{ +bool isconnected(bool attempt, bool local) { return curpeer || (attempt && connpeer) || (local && haslocalclients()); } ICOMMAND(isconnected, "bb", (int *attempt, int *local), intret(isconnected(*attempt > 0, *local != 0) ? 1 : 0)); -const ENetAddress *connectedpeer() -{ +const ENetAddress *connectedpeer() { return curpeer ? &curpeer->address : NULL; } -ICOMMAND(connectedip, "", (), -{ +ICOMMAND(connectedip, "", (), { const ENetAddress *address = connectedpeer(); string hostname; result(address && enet_address_get_host_ip(address, hostname, sizeof(hostname)) >= 0 ? hostname : ""); }); -ICOMMAND(connectedport, "", (), -{ +ICOMMAND(connectedport, "", (), { const ENetAddress *address = connectedpeer(); intret(address ? address->port : -1); }); -void abortconnect() -{ +void abortconnect() { if(!connpeer) return; game::connectfail(); if(connpeer->state!=ENET_PEER_STATE_DISCONNECTED) enet_peer_reset(connpeer); @@ -73,81 +65,61 @@ void abortconnect() SVARP(connectname, ""); VARP(connectport, 0, 0, 0xFFFF); -void connectserv(const char *servername, int serverport, const char *serverpassword) -{ - if(connpeer) - { +void connectserv(const char *servername, int serverport, const char *serverpassword) { + if(connpeer) { conoutf("aborting connection attempt"); abortconnect(); } - if(serverport <= 0) serverport = server::serverport(); - ENetAddress address; address.port = serverport; - - if(servername) - { + if(servername) { if(strcmp(servername, connectname)) setsvar("connectname", servername); if(serverport != connectport) setvar("connectport", serverport); addserver(servername, serverport, serverpassword && serverpassword[0] ? serverpassword : NULL); conoutf("attempting to connect to %s:%d", servername, serverport); - if(!resolverwait(servername, &address)) - { + if(!resolverwait(servername, &address)) { conoutf(CON_ERROR, "\f3could not resolve server %s", servername); return; } } - else - { + else { setsvar("connectname", ""); setvar("connectport", 0); conoutf("attempting to connect over LAN"); address.host = ENET_HOST_BROADCAST; } - - if(!clienthost) - { + if(!clienthost) { clienthost = enet_host_create(NULL, 2, server::numchannels(), rate*1024, rate*1024); - if(!clienthost) - { + if(!clienthost) { conoutf(CON_ERROR, "\f3could not connect to server"); return; } clienthost->duplicatePeers = 0; } - connpeer = enet_host_connect(clienthost, &address, server::numchannels(), 0); enet_host_flush(clienthost); connmillis = totalmillis; connattempts = 0; - game::connectattempt(servername ? servername : "", serverpassword ? serverpassword : "", address); } -void reconnect(const char *serverpassword) -{ - if(!connectname[0] || connectport <= 0) - { +void reconnect(const char *serverpassword) { + if(!connectname[0] || connectport <= 0) { conoutf(CON_ERROR, "no previous connection"); return; } - connectserv(connectname, connectport, serverpassword); } -void disconnect(bool async, bool cleanup) -{ - if(curpeer) - { - if(!discmillis) - { +void disconnect(bool async, bool cleanup) { + if(curpeer) { + if(!discmillis) { enet_peer_disconnect(curpeer, DISC_NONE); enet_host_flush(clienthost); discmillis = totalmillis; } - if(curpeer->state!=ENET_PEER_STATE_DISCONNECTED) - { + if(curpeer->state!=ENET_PEER_STATE_DISCONNECTED) { if(async) return; enet_peer_reset(curpeer); } @@ -157,22 +129,18 @@ void disconnect(bool async, bool cleanup) game::gamedisconnect(cleanup); mainmenu = 1; } - if(!connpeer && clienthost) - { + if(!connpeer && clienthost) { enet_host_destroy(clienthost); clienthost = NULL; } } -void trydisconnect(bool local) -{ - if(connpeer) - { +void trydisconnect(bool local) { + if(connpeer) { conoutf("aborting connection attempt"); abortconnect(); } - else if(curpeer) - { + else if(curpeer) { conoutf("attempting to disconnect..."); disconnect(!discmillis); } @@ -187,50 +155,42 @@ ICOMMAND(disconnect, "b", (int *local), trydisconnect(*local != 0)); ICOMMAND(localconnect, "", (), { if(!isconnected()) localconnect(); }); ICOMMAND(localdisconnect, "", (), { if(haslocalclients()) localdisconnect(); }); -void sendclientpacket(ENetPacket *packet, int chan) -{ +void sendclientpacket(ENetPacket *packet, int chan) { if(curpeer) enet_peer_send(curpeer, chan, packet); else localclienttoserver(chan, packet); } -void flushclient() -{ +void flushclient() { if(clienthost) enet_host_flush(clienthost); } -void neterr(const char *s, bool disc) -{ +void neterr(const char *s, bool disc) { conoutf(CON_ERROR, "\f3illegal network message (%s)", s); if(disc) disconnect(); } -void localservertoclient(int chan, ENetPacket *packet) // processes any updates from the server -{ +void localservertoclient(int chan, ENetPacket *packet) { // processes any updates from the server { packetbuf p(packet); game::parsepacketclient(chan, p); } void clientkeepalive() { if(clienthost) enet_host_service(clienthost, NULL, 0); } -void gets2c() // get updates from the server -{ +void gets2c() { // get updates from the server { ENetEvent event; if(!clienthost) return; - if(connpeer && totalmillis/3000 > connmillis/3000) - { + if(connpeer && totalmillis/3000 > connmillis/3000) { conoutf("attempting to connect..."); connmillis = totalmillis; ++connattempts; - if(connattempts > 3) - { + if(connattempts > 3) { conoutf(CON_ERROR, "\f3could not connect to server"); abortconnect(); return; } } while(clienthost && enet_host_service(clienthost, &event, 0)>0) - switch(event.type) - { + switch(event.type) { case ENET_EVENT_TYPE_CONNECT: disconnect(false, false); localdisconnect(false); @@ -241,24 +201,19 @@ void gets2c() // get updates from the server if(rate) setrate(rate); game::gameconnect(true); break; - case ENET_EVENT_TYPE_RECEIVE: if(discmillis) conoutf("attempting to disconnect..."); else localservertoclient(event.channelID, event.packet); enet_packet_destroy(event.packet); break; - case ENET_EVENT_TYPE_DISCONNECT: if(event.data>=DISC_NUM) event.data = DISC_NONE; - if(event.peer==connpeer) - { + if(event.peer==connpeer) { conoutf(CON_ERROR, "\f3could not connect to server"); abortconnect(); } - else - { - if(!discmillis || event.data) - { + else { + if(!discmillis || event.data) { const char *msg = disconnectreason(event.data); if(msg) conoutf(CON_ERROR, "\f3server network error, disconnecting (%s) ...", msg); else conoutf(CON_ERROR, "\f3server network error, disconnecting..."); @@ -266,7 +221,6 @@ void gets2c() // get updates from the server disconnect(); } return; - default: break; } -- cgit v1.2.3