--- deliantra/server/include/client.h 2006/12/23 15:49:40 1.20 +++ deliantra/server/include/client.h 2007/01/07 02:39:14 1.24 @@ -1,6 +1,7 @@ /* CrossFire, A Multiplayer game for the X Window System + Copyright (C) 2005, 2006, 2007 Marc Lehmann & Crossfire+ Development Team Copyright (C) 2002 Mark Wedel & Crossfire Development Team Copyright (C) 1992 Frank Tore Johansen @@ -93,7 +94,6 @@ ST_PLAYING, // logged in an playing ST_CUSTOM, // waiting for custom reply - ST_CONFIRM_QUIT, ST_CHANGE_CLASS, ST_GET_PARTY_PASSWORD, }; @@ -164,13 +164,14 @@ /* how many times we are allowed to give the wrong password before being kicked. */ #define MAX_PASSWORD_FAILURES 5 -ACC_CLASS (client) // should become player when newsocket is a baseclass of player -struct client : zero_initialised, attachable +INTERFACE_CLASS (client) // should become player when newsocket is a baseclass of player +struct client : zero_initialised, attachable { int ACC (RW, fd); unsigned int inbuf_len; // number of bytes valid in inbuf uint8 *faces_sent; // This is a bitmap on sent face status statsinfo stats; + int ACC (RO, active); client_container cc_inv, cc_other; Buffer outputbuffer; @@ -216,10 +217,8 @@ int ACC (RW, rtt), ACC (RW, rttvar); /* round-trip time and -variance, if known */ - client (int fd, const char *from_ip); - ~client (); - void destroy (); - bool destroyed () const { return state == ST_DEAD; } + void do_destroy (); + void gather_callbacks (AV *&callbacks, event_type event) const; iw cmd_ev; void cmd_cb (iw &w); iow socket_ev; void socket_cb (iow &w, int got); @@ -237,16 +236,16 @@ void execute (const packet_type *pkt, char *data, int datalen); void queue_command (packet_type *handler, char *data, int datalen); - bool handle_command (); + MTH bool handle_command (); // resets movement state - void reset_state (); + MTH void reset_state (); - bool handle_packet (); + MTH bool handle_packet (); int next_packet (); // returns length of packet or 0 void skip_packet (int len); // we have processed the packet, skip it - void flush (); - void write_outputbuffer (); + MTH void flush (); + MTH void write_outputbuffer (); void send (void *buf_, int len); void send_packet (const char *buf); @@ -255,11 +254,15 @@ void send_packet (packet &sl); // called when something under the player changes - void floorbox_update () { update_look = 1; } + MTH void floorbox_update () { update_look = 1; } // called when the player has been moved - void floorbox_reset () { look_position = 0; floorbox_update (); } + MTH void floorbox_reset () { look_position = 0; floorbox_update (); } - static client *create (int fd, const char *peername); + MTH static client *create (int fd, const char *peername); + +protected: + client (int fd, const char *from_ip); + ~client (); }; #define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\ @@ -306,9 +309,14 @@ #define VERSION_SC 1027 #define VERSION_INFO "Crossfire+ Server" -typedef unordered_vector sockvec; +typedef object_vector sockvec; extern sockvec clients; + +#define for_all_clients(var) \ + for (int _i = 0; _i < clients.size (); ++_i) \ + declvar (client *, var, clients [_i]) + extern int nrofpixmaps; //TODO: hrmpf, should go #endif