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.13 by root, Tue Sep 19 22:05:55 2006 UTC vs.
Revision 1.25 by root, Thu Dec 14 21:46:34 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
106struct NewSocket 102ACC_CLASS (client_socket) // should become player when newsocket is a baseclass of player
103struct client_socket : zero_initialised, attachable_base
107{ 104{
108 enum Sock_Status status; 105 enum Sock_Status status;
109 int fd; 106 int ACC (RW, fd);
107 unsigned int inbuf_len; // number of bytes valid in inbuf
110 struct Map lastmap; 108 struct Map lastmap;
111 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[] */
112 uint8 *faces_sent; /* This is a bitmap on sent face status */ 110 uint8 *faces_sent; /* This is a bitmap on sent face status */
113 uint8 anims_sent[MAXANIMNUM]; 111 uint8 anims_sent[MAXANIMNUM];
114 struct statsinfo stats; 112 struct statsinfo stats;
113
114 char *ACC (RW, host); /* Which host it is connected from (ip address) */
115 uint8 ACC (RW, password_fails); /* how many times the player has failed to give the right password */
116 Buffer outputbuffer; /* For undeliverable data */
117
118 bool ACC (RW, facecache); /* If true, client is caching images */
119 bool ACC (RW, sent_scroll);
120 bool ACC (RW, sound); /* does the client want sound */
121 bool ACC (RW, exp64); /* Client wants 64 bit exp data, as well as skill data */
122 bool ACC (RW, newmapcmd); /* Send newmap command when entering new map SMACFIGGEN */
123 bool ACC (RW, plugincmd); /* CF+ extend the protocol through a plug-in */
124 bool ACC (RW, mapinfocmd); /* CF+ return map info and send map change info */
125 bool ACC (RW, extcmd); /* CF+ call into extensions/plugins */
126 bool ACC (RW, extmap); /* CF+ extend map comamnd with extra data */
127 bool ACC (RW, buggy_mapscroll); /* CF+ client crashes on large mapscrolls */
128 bool ACC (RW, darkness); /* True if client wants darkness information */
129 bool ACC (RW, image2); /* Client wants image2/face2 commands */
130 bool ACC (RW, update_look); /* If true, we need to send the look window */
131 bool ACC (RW, has_readable_type); /* If true client accept additional text information */
132 /* used to arrange text in books, scrolls, or scripted dialogs */
133 bool ACC (RW, monitor_spells); /* Client wishes to be informed when their spell list changes */
134 bool ACC (RW, ext_mapinfos); /* If true client accept additionnal info on maps */
135 /* Below are flags for extedend infos to pass to client
136 * with S->C mapextended command */
137 bool ACC (RW, EMI_smooth); /* Send smooth in extendmapinfos */
138
139 uint32 ACC (RW, supported_readables); /* each bit is a readable supported by client */
140 uint32 ACC (RW, cs_version), ACC (RW, sc_version); /* versions of the client */
141 enum MapMode mapmode; /* Type of map commands the client wants. */
142 uint16 ACC (RW, look_position); /* start of drawing of look window */
143 uint8 ACC (RW, mapx), ACC (RW, mapy); /* How large a map the client wants */
144 uint8 ACC (RW, itemcmd); /* What version of the 'item' protocol command to use */
145 uint8 ACC (RW, faceset); /* Set the client is using, default 0 */
146
147 maptile *ACC (RW, current_map); // CF+ last/current player map
148 int ACC (RW, current_x), ACC (RW, current_y); // CF+ last/current map position
149 char ACC (RW, client)[64]; // CF+ client name/version
150
115 /* If we get an incomplete packet, this is used to hold the data. */ 151 /* If we get an incomplete packet, this is used to hold the data. */
116 SockList inbuf; 152 uint8 inbuf[MAXSOCKBUF];
117 char *host; /* Which host it is connected from (ip address) */ 153 player *pl;//TODO should not be here, preferably
118 uint8 password_fails; /* how many times the player has failed to give the right password */
119 Buffer outputbuffer; /* For undeliverable data */
120 uint32 facecache:1; /* If true, client is caching images */
121 uint32 sent_scroll:1;
122 uint32 sound:1; /* does the client want sound */
123 uint32 exp64:1; /* Client wants 64 bit exp data, as well as skill data */
124 uint32 newmapcmd:1; /* Send newmap command when entering new map SMACFIGGEN */
125 uint32 plugincmd:1; /* CF+ extend the protocol through a plug-in */
126 uint32 mapinfocmd:1; /* CF+ return map info and send map change info */
127 uint32 extcmd:1; /* CF+ call into extensions/plugins */
128 uint32 extmap:1; /* CF+ extend map comamnd with extra data */
129 uint32 buggy_mapscroll:1; /* CF+ client crashes on large mapscrolls */
130 uint32 darkness:1; /* True if client wants darkness information */
131 uint32 image2:1; /* Client wants image2/face2 commands */
132 uint32 update_look:1; /* If true, we need to send the look window */
133 uint32 can_write:1; /* Can we write to this socket? */
134 uint32 has_readable_type:1; /* If true client accept additional text information
135 used to arrange text in books, scrolls, or scripted dialogs */
136 uint32 monitor_spells:1; /* Client wishes to be informed when their spell list changes */
137 uint32 supported_readables; /* each bit is a readable supported by client */
138 uint32 cs_version, sc_version; /* versions of the client */
139 enum MapMode mapmode; /* Type of map commands the client wants. */
140 uint16 look_position; /* start of drawing of look window */
141 uint8 mapx, mapy; /* How large a map the client wants */
142 uint8 itemcmd; /* What version of the 'item' protocol command to use */
143 uint8 faceset; /* Set the client is using, default 0 */
144 uint32 ext_mapinfos:1; /* If true client accept additionnal info on maps */
145 /* Below are flags for extedend infos to pass to client
146 * with S->C mapextended command */
147 uint32 EMI_smooth:1; /* Send smooth in extendmapinfos */
148 154
149 maptile *current_map; // CF+ last/current player map 155 iow socket_ev; void socket_cb (iow &w, int got);
150 int current_x, current_y; // CF+ last/current map position
151 char client[64]; // CF+ client name/version
152 156
153 /* Below here is information only relevant for old sockets */ 157 client_socket (int fd, const char *from_ip);
154 char *comment; /* name or listen comment */ 158 ~client_socket ();
155 enum Old_Mode old_mode; 159
160 int read_packet (); // returns length of packet or 0
161 void skip_packet (int len); // we have processed the packet, skip it
162
163 void flush ();
164 void write_outputbuffer ();
165 void send (void *buf_, int len);
166
167 void send_packet (const char *buf);
168 void send_packet (const char *buf, int len);
169 void send_packet (packet &sl);
156}; 170};
157 171
158#define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\ 172#define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\
159 ( ((__type)>0) &&\ 173 ( ((__type)>0) &&\
160 ((__sockPtr)->has_readable_type) && \ 174 ((__sockPtr)->has_readable_type) && \
193#define EMI_HASMOREBITS 0x80 207#define EMI_HASMOREBITS 0x80
194 208
195#define FACE_TYPES 1 209#define FACE_TYPES 1
196#define PNG_FACE_INDEX 0 210#define PNG_FACE_INDEX 0
197 211
198struct Socket_Info
199{
200 struct timeval timeout; /* Timeout for select */
201 int max_filedescriptor; /* max filedescriptor on the system */
202 int nconns; /* Number of connections */
203 int allocated_sockets; /* number of allocated in init_sockets */
204};
205
206extern Socket_Info socket_info;
207
208#define VERSION_CS 1023 /* version >= 1023 understand setup cmd */ 212#define VERSION_CS 1023 /* version >= 1023 understand setup cmd */
209#define VERSION_SC 1027 213#define VERSION_SC 1027
210#define VERSION_INFO "Crossfire+ Server" 214#define VERSION_INFO "Crossfire+ Server"
211 215
216typedef unordered_vector<client_socket *> sockvec;
217
218extern sockvec client_sockets;
219extern int nrofpixmaps; //TODO: hrmpf, should go
220
212#endif 221#endif
213 222

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines