--- deliantra/server/include/client.h 2007/07/28 00:15:03 1.65 +++ deliantra/server/include/client.h 2008/04/22 07:01:46 1.75 @@ -1,11 +1,11 @@ /* - * This file is part of Crossfire TRT, the Roguelike Realtime MORPG. + * This file is part of Deliantra, the Roguelike Realtime MMORPG. * - * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Crossfire TRT team + * Copyright (©) 2005,2006,2007 Marc Alexander Lehmann / Robin Redeker / the Deliantra team * Copyright (©) 2002,2007 Mark Wedel & Crossfire Development Team * Copyright (©) 1992,2007 Frank Tore Johansen * - * Crossfire TRT is free software: you can redistribute it and/or modify + * Deliantra is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. @@ -18,7 +18,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . * - * The authors can be reached via e-mail to + * The authors can be reached via e-mail to */ #ifndef CLIENT_H @@ -31,37 +31,37 @@ #if HAVE_TCP_INFO # include #else - struct tcpi_info { + struct tcp_info { // dummy - char tcpi_state; - char tcpi_ca_state; - char tcpi_retransmits; - char tcpi_probes; - char tcpi_backoff; - char tcpi_options; - char tcpi_snd_wscale; - char tcpi_rcv_wscale; - char tcpi_rto; - char tcpi_ato; - char tcpi_snd_mss; - char tcpi_rcv_mss; - char tcpi_unacked; - char tcpi_sacked; - char tcpi_lost; - char tcpi_retrans; - char tcpi_fackets; - char tcpi_last_data_sent; - char tcpi_last_ack_sent; - char tcpi_last_data_recv; - char tcpi_last_ack_recv; - char tcpi_pmtu; - char tcpi_rcv_ssthresh; - char tcpi_rtt; - char tcpi_rttvar; - char tcpi_snd_ssthresh; - char tcpi_snd_cwnd; - char tcpi_advmss; - char tcpi_reordering; + int tcpi_state; + int tcpi_ca_state; + int tcpi_retransmits; + int tcpi_probes; + int tcpi_backoff; + int tcpi_options; + int tcpi_snd_wscale; + int tcpi_rcv_wscale; + int tcpi_rto; + int tcpi_ato; + int tcpi_snd_mss; + int tcpi_rcv_mss; + int tcpi_unacked; + int tcpi_sacked; + int tcpi_lost; + int tcpi_retrans; + int tcpi_fackets; + int tcpi_last_data_sent; + int tcpi_last_ack_sent; + int tcpi_last_data_recv; + int tcpi_last_ack_recv; + int tcpi_pmtu; + int tcpi_rcv_ssthresh; + int tcpi_rtt; + int tcpi_rttvar; + int tcpi_snd_ssthresh; + int tcpi_snd_cwnd; + int tcpi_advmss; + int tcpi_reordering; }; #endif @@ -146,11 +146,6 @@ const packet_type *handler; char *data; int datalen; - - ~command () - { - sfree (data, datalen + 1); - } }; /* how many times we are allowed to give the wrong password before being kicked. */ @@ -181,7 +176,7 @@ sint8 ACC (RW, last_level); /* Last level we sent to client */ uint16 ACC (RW, last_flags); /* fire/run on flags for last tick */ float ACC (RW, last_weapon_sp); /* if diff than weapon_sp, update client */ - sint32 ACC (RW, last_weight); /* Last weight as sent to client; -1 means do not send weight */ + //sint32 ACC (RW, last_weight); /* Last weight as sent to client; -1 means do not send weight */ sint32 ACC (RW, last_weight_limit); /* Last weight limit transmitted to client */ uint32 ACC (RW, last_path_attuned); /* Last spell attunment sent to client */ uint32 ACC (RW, last_path_repelled); /* Last spell repelled sent to client */ @@ -244,38 +239,11 @@ struct tcp_info tcpi; tstamp next_rate_adjust; -#if FOR_PERL - // unfortunately, this emans that we *require* tcp_info now... - ACC (RW, tcpi.tcpi_state); - ACC (RW, tcpi.tcpi_ca_state); - ACC (RW, tcpi.tcpi_retransmits); - ACC (RW, tcpi.tcpi_probes); - ACC (RW, tcpi.tcpi_backoff); - ACC (RW, tcpi.tcpi_options); - ACC (RO, tcpi.tcpi_snd_wscale); - ACC (RO, tcpi.tcpi_rcv_wscale); - ACC (RW, tcpi.tcpi_rto); - ACC (RW, tcpi.tcpi_ato); - ACC (RW, tcpi.tcpi_snd_mss); - ACC (RW, tcpi.tcpi_rcv_mss); - ACC (RW, tcpi.tcpi_unacked); - ACC (RW, tcpi.tcpi_sacked); - ACC (RW, tcpi.tcpi_lost); - ACC (RW, tcpi.tcpi_retrans); - ACC (RW, tcpi.tcpi_fackets); - ACC (RW, tcpi.tcpi_last_data_sent); - ACC (RW, tcpi.tcpi_last_ack_sent); - ACC (RW, tcpi.tcpi_last_data_recv); - ACC (RW, tcpi.tcpi_last_ack_recv); - ACC (RW, tcpi.tcpi_pmtu); - ACC (RW, tcpi.tcpi_rcv_ssthresh); - ACC (RW, tcpi.tcpi_rtt); - ACC (RW, tcpi.tcpi_rttvar); - ACC (RW, tcpi.tcpi_snd_ssthresh); - ACC (RW, tcpi.tcpi_snd_cwnd); - ACC (RW, tcpi.tcpi_advmss); - ACC (RW, tcpi.tcpi_reordering); -#endif + + unordered_vector mapinfo_queue; + void mapinfo_queue_clear (); + void mapinfo_queue_run (); + bool mapinfo_try (char *buf); struct ixsend { int16_t pri; // unused @@ -290,8 +258,7 @@ void do_destroy (); void gather_callbacks (AV *&callbacks, event_type event) const; - iow socket_ev; void socket_cb (iow &w, int got); - iw cmd_ev; void cmd_cb (iw &w); + iow socket_ev; void socket_cb (iow &w, int revents); std::deque< command, slice_allocator > cmd_queue; @@ -357,12 +324,46 @@ MTH void tick (); // called every server tick to do housekeeping etc. MTH static client *create (int fd, const char *peername); + MTH static void clock (); + MTH static void flush_sockets (); protected: client (int fd, const char *from_ip); ~client (); }; +#if FOR_PERL + ACC (RW, tcpi.tcpi_state); + ACC (RW, tcpi.tcpi_ca_state); + ACC (RW, tcpi.tcpi_retransmits); + ACC (RW, tcpi.tcpi_probes); + ACC (RW, tcpi.tcpi_backoff); + ACC (RW, tcpi.tcpi_options); + ACC (RO, tcpi.tcpi_snd_wscale); + ACC (RO, tcpi.tcpi_rcv_wscale); + ACC (RW, tcpi.tcpi_rto); + ACC (RW, tcpi.tcpi_ato); + ACC (RW, tcpi.tcpi_snd_mss); + ACC (RW, tcpi.tcpi_rcv_mss); + ACC (RW, tcpi.tcpi_unacked); + ACC (RW, tcpi.tcpi_sacked); + ACC (RW, tcpi.tcpi_lost); + ACC (RW, tcpi.tcpi_retrans); + ACC (RW, tcpi.tcpi_fackets); + ACC (RW, tcpi.tcpi_last_data_sent); + ACC (RW, tcpi.tcpi_last_ack_sent); + ACC (RW, tcpi.tcpi_last_data_recv); + ACC (RW, tcpi.tcpi_last_ack_recv); + ACC (RW, tcpi.tcpi_pmtu); + ACC (RW, tcpi.tcpi_rcv_ssthresh); + ACC (RW, tcpi.tcpi_rtt); + ACC (RW, tcpi.tcpi_rttvar); + ACC (RW, tcpi.tcpi_snd_ssthresh); + ACC (RW, tcpi.tcpi_snd_cwnd); + ACC (RW, tcpi.tcpi_advmss); + ACC (RW, tcpi.tcpi_reordering); +#endif + #define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\ ( ((__type)>0) &&\ ((__sockPtr)->has_readable_type) && \ @@ -400,7 +401,7 @@ #define VERSION_CS 1023 /* version >= 1023 understand setup cmd */ #define VERSION_SC 1026 //#define VERSION_SC 1027 // requestinfo image_info and image_sums, makes extending faces on the fly impossible -#define VERSION_INFO "Crossfire TRT Server" +#define VERSION_INFO "Deliantra Server" typedef object_vector sockvec;