--- deliantra/server/include/client.h 2006/12/23 09:41:55 1.19 +++ deliantra/server/include/client.h 2007/01/06 14:42:30 1.23 @@ -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 @@ -164,13 +165,13 @@ /* 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; + statsinfo stats; client_container cc_inv, cc_other; Buffer outputbuffer; @@ -179,6 +180,7 @@ uint8 ACC (RW, state); /* Input state of the player (name, password, etc */ uint8 ACC (RW, password_fails); /* how many times the player has failed to give the right password */ + bool ACC (RW, afk); /* player is afk */ bool ACC (RW, facecache); /* If true, client is caching images */ bool ACC (RW, sent_scroll); bool ACC (RW, sound); /* does the client want sound */ @@ -215,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); @@ -236,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); @@ -254,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 (); } + + MTH static client *create (int fd, const char *peername); - static client *create (int fd, const char *peername); +protected: + client (int fd, const char *from_ip); + ~client (); }; #define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\