ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/newserver.h
(Generate patch)

Comparing deliantra/server/include/newserver.h (file contents):
Revision 1.14 by root, Wed Sep 20 21:53:50 2006 UTC vs.
Revision 1.23 by root, Thu Dec 14 05:09:32 2006 UTC

27 new client server communication method. Values defined here are only 27 new client server communication method. Values defined here are only
28 used on the server side code. For shared client/server values, see 28 used on the server side code. For shared client/server values, see
29 newclient.h 29 newclient.h
30*/ 30*/
31 31
32
33#ifndef NEWSERVER_H 32#ifndef NEWSERVER_H
34#define NEWSERVER_H 33#define NEWSERVER_H
35 34
36/* Reduce this from 50 to 5 - as it is now, there will never be more 35/* Reduce this from 50 to 5 - as it is now, there will never be more
37 * than 3 anyways. 36 * than 3 anyways.
39 38
40#define NUM_LOOK_OBJECTS 50 39#define NUM_LOOK_OBJECTS 50
41 40
42struct MapCell 41struct MapCell
43{ 42{
44 tag_t player; // this is, unfortunately, very wasteful of memory space, but pretty bandwidth-efficient 43 UUID player; // this is, unfortunately, very wasteful of memory space, but pretty bandwidth-efficient
45 int count; /* This is really darkness in the map1 command */ 44 int count; /* This is really darkness in the map1 command */
46 short faces[MAP_LAYERS]; 45 uint16 faces[MAP_LAYERS];
47 uint16 smooth[MAP_LAYERS]; 46 uint16 smooth[MAP_LAYERS];
48 unsigned char stat_hp; // health of something in this space, or 0 47 unsigned char stat_hp; // health of something in this space, or 0
49 unsigned char flags; 48 unsigned char flags;
50}; 49};
51 50
76 * current state. we set up our on buffers for sending/receiving, so we can 75 * current state. we set up our on buffers for sending/receiving, so we can
77 * handle some higher level functions. fd is the actual file descriptor we 76 * handle some higher level functions. fd is the actual file descriptor we
78 * are using. 77 * are using.
79 */ 78 */
80 79
81enum Sock_Status { Ns_Avail, Ns_Add, Ns_Dead, Ns_Old }; 80enum Sock_Status { Ns_Add, Ns_Dead };
82
83/* Reserver 0 for neither of these being set */
84enum Old_Mode { Old_Listen = 1, Old_Player = 2 };
85 81
86/* Only one map mode can actually be used, so lets make it a switch 82/* Only one map mode can actually be used, so lets make it a switch
87 * instead of having a bunch of different fields that needed to 83 * instead of having a bunch of different fields that needed to
88 * get toggled. 84 * get toggled.
89 */ 85 */
99 int start; 95 int start;
100 int len; 96 int len;
101}; 97};
102 98
103/* how many times we are allowed to give the wrong password before being kicked. */ 99/* how many times we are allowed to give the wrong password before being kicked. */
104# define MAX_PASSWORD_FAILURES 5 100#define MAX_PASSWORD_FAILURES 5
105 101
106ACC_CLASS (player_TODO) // should become player when newsocket is a baseclass of player 102ACC_CLASS (client_socket) // should become player when newsocket is a baseclass of player
107struct NewSocket 103struct client_socket : zero_initialised, attachable_base
108{ 104{
109 enum Sock_Status status; 105 enum Sock_Status status;
110 int ACC (RW, fd); 106 int ACC (RW, fd);
107 unsigned int inbuf_len; // number of bytes valid in inbuf
111 struct Map lastmap; 108 struct Map lastmap;
112 size_t faces_sent_len; /* This is the number of elements allocated in faces_sent[] */ 109 size_t faces_sent_len; /* This is the number of elements allocated in faces_sent[] */
113 uint8 *faces_sent; /* This is a bitmap on sent face status */ 110 uint8 *faces_sent; /* This is a bitmap on sent face status */
114 uint8 anims_sent[MAXANIMNUM]; 111 uint8 anims_sent[MAXANIMNUM];
115 struct statsinfo stats; 112 struct statsinfo stats;
116 /* If we get an incomplete packet, this is used to hold the data. */ 113
117 SockList inbuf;
118 char *ACC (RW, host); /* Which host it is connected from (ip address) */ 114 char *ACC (RW, host); /* Which host it is connected from (ip address) */
119 uint8 ACC (RW, password_fails); /* how many times the player has failed to give the right password */ 115 uint8 ACC (RW, password_fails); /* how many times the player has failed to give the right password */
120 Buffer outputbuffer; /* For undeliverable data */ 116 Buffer outputbuffer; /* For undeliverable data */
121 uint32 ACC (RO, facecache):1; /* If true, client is caching images */ 117 uint32 ACC (RO, facecache):1; /* If true, client is caching images */
122 uint32 ACC (RO, sent_scroll):1; 118 uint32 ACC (RO, sent_scroll):1;
145 uint16 ACC (RW, look_position); /* start of drawing of look window */ 141 uint16 ACC (RW, look_position); /* start of drawing of look window */
146 uint8 ACC (RW, mapx), ACC (RW, mapy); /* How large a map the client wants */ 142 uint8 ACC (RW, mapx), ACC (RW, mapy); /* How large a map the client wants */
147 uint8 ACC (RW, itemcmd); /* What version of the 'item' protocol command to use */ 143 uint8 ACC (RW, itemcmd); /* What version of the 'item' protocol command to use */
148 uint8 ACC (RW, faceset); /* Set the client is using, default 0 */ 144 uint8 ACC (RW, faceset); /* Set the client is using, default 0 */
149 145
150 maptile *ACC (RW, current_map); // CF+ last/current player map 146 maptile *ACC (RW, current_map); // CF+ last/current player map
151 int ACC (RW, current_x), ACC (RW, current_y); // CF+ last/current map position 147 int ACC (RW, current_x), ACC (RW, current_y); // CF+ last/current map position
152 char ACC (RW, client)[64]; // CF+ client name/version 148 char ACC (RW, client)[64]; // CF+ client name/version
149
150 /* If we get an incomplete packet, this is used to hold the data. */
151 uint8 inbuf[MAXSOCKBUF];
152 player *pl;//TODO should not be here, preferably
153
154 client_socket (int fd, const char *from_ip);
155 ~client_socket ();
156
157 int read_packet (); // returns length of packet or 0
158 void skip_packet (int len); // we have processed the packet, skip it
159
160 void send (void *buf_, int len);
161
162 void send_packet (const char *buf);
163 void send_packet (const char *buf, int len);
164 void send_packet (packet &sl);
153}; 165};
154 166
155#define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\ 167#define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\
156 ( ((__type)>0) &&\ 168 ( ((__type)>0) &&\
157 ((__sockPtr)->has_readable_type) && \ 169 ((__sockPtr)->has_readable_type) && \
190#define EMI_HASMOREBITS 0x80 202#define EMI_HASMOREBITS 0x80
191 203
192#define FACE_TYPES 1 204#define FACE_TYPES 1
193#define PNG_FACE_INDEX 0 205#define PNG_FACE_INDEX 0
194 206
195struct Socket_Info
196{
197 struct timeval timeout; /* Timeout for select */
198 int max_filedescriptor; /* max filedescriptor on the system */
199 int nconns; /* Number of connections */
200 int allocated_sockets; /* number of allocated in init_sockets */
201};
202
203extern Socket_Info socket_info;
204
205#define VERSION_CS 1023 /* version >= 1023 understand setup cmd */ 207#define VERSION_CS 1023 /* version >= 1023 understand setup cmd */
206#define VERSION_SC 1027 208#define VERSION_SC 1027
207#define VERSION_INFO "Crossfire+ Server" 209#define VERSION_INFO "Crossfire+ Server"
208 210
211typedef unordered_vector<client_socket *> sockvec;
212
213extern sockvec client_sockets;
214extern int nrofpixmaps; //TODO: hrmpf, should go
215
209#endif 216#endif
210 217

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines