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

Comparing deliantra/server/include/client.h (file contents):
Revision 1.60 by root, Thu Jul 12 08:40:14 2007 UTC vs.
Revision 1.65 by root, Sat Jul 28 00:15:03 2007 UTC

26 26
27#include <deque> 27#include <deque>
28#include <bitset> 28#include <bitset>
29#include <tr1/unordered_set> 29#include <tr1/unordered_set>
30 30
31#if HAVE_TCP_INFO
32# include <netinet/tcp.h>
33#else
34 struct tcpi_info {
35 // dummy
36 char tcpi_state;
37 char tcpi_ca_state;
38 char tcpi_retransmits;
39 char tcpi_probes;
40 char tcpi_backoff;
41 char tcpi_options;
42 char tcpi_snd_wscale;
43 char tcpi_rcv_wscale;
44 char tcpi_rto;
45 char tcpi_ato;
46 char tcpi_snd_mss;
47 char tcpi_rcv_mss;
48 char tcpi_unacked;
49 char tcpi_sacked;
50 char tcpi_lost;
51 char tcpi_retrans;
52 char tcpi_fackets;
53 char tcpi_last_data_sent;
54 char tcpi_last_ack_sent;
55 char tcpi_last_data_recv;
56 char tcpi_last_ack_recv;
57 char tcpi_pmtu;
58 char tcpi_rcv_ssthresh;
59 char tcpi_rtt;
60 char tcpi_rttvar;
61 char tcpi_snd_ssthresh;
62 char tcpi_snd_cwnd;
63 char tcpi_advmss;
64 char tcpi_reordering;
65 };
66#endif
67
31// (possibly) max. number of objects "per page" in the ground container 68// (possibly) max. number of objects "per page" in the ground container
32#define FLOORBOX_PAGESIZE 50 69#define FLOORBOX_PAGESIZE 50
33 70
34struct MapCell 71struct MapCell
35{ 72{
83enum { 120enum {
84 PF_PLAYER = 0x01, // must have valid player / will by synchronised 121 PF_PLAYER = 0x01, // must have valid player / will by synchronised
85 PF_PLAYING = 0x02, // must be in playing state 122 PF_PLAYING = 0x02, // must be in playing state
86 PF_COMMAND0 = 0x04, // command starts at offset 0 123 PF_COMMAND0 = 0x04, // command starts at offset 0
87 PF_COMMAND6 = 0x08, // command starts at offset 6 124 PF_COMMAND6 = 0x08, // command starts at offset 6
125};
126
127// face type.s bit 0 means "has meta info prepended"
128enum {
129 FT_FACE = 0 * 2 + 0, // faces (images)
130 FT_MUSIC = 1 * 2 + 1, // background music
131 FT_SOUND = 2 * 2 + 1, // effects
132 FT_RSRC = 3 * 2 + 0, // generic data files
133 FT_NUM,
88}; 134};
89 135
90struct packet_type 136struct packet_type
91{ 137{
92 const char *name; 138 const char *name;
155 bool ACC (RW, sent_scroll); 201 bool ACC (RW, sent_scroll);
156 bool ACC (RW, sound); /* does the client want sound */ 202 bool ACC (RW, sound); /* does the client want sound */
157 bool ACC (RW, newmapcmd); /* Send newmap command when entering new map SMACFIGGEN */ 203 bool ACC (RW, newmapcmd); /* Send newmap command when entering new map SMACFIGGEN */
158 bool ACC (RW, plugincmd); // extend the protocol through a plug-in */ 204 bool ACC (RW, plugincmd); // extend the protocol through a plug-in */
159 bool ACC (RW, mapinfocmd); // return map info and send map change info 205 bool ACC (RW, mapinfocmd); // return map info and send map change info
160 bool ACC (RW, extcmd); // call into extensions/plugins 206 uint8_t ACC (RW, extcmd); // call into extensions/plugins
161 bool ACC (RW, extmap); // extend map comamnd with extra data 207 bool ACC (RW, extmap); // extend map comamnd with extra data
162 bool ACC (RW, buggy_mapscroll); // client crashes on large mapscrolls 208 bool ACC (RW, buggy_mapscroll); // client crashes on large mapscrolls
163 bool ACC (RW, darkness); /* True if client wants darkness information */ 209 bool ACC (RW, darkness); /* True if client wants darkness information */
164 bool ACC (RW, image2); /* Client wants image2/face2 commands */ 210 bool ACC (RW, image2); /* Client wants image2/face2 commands */
165 uint8_t ACC (RW, fxix); // client implements fx and ix (face|image extended) commands 211 uint8_t ACC (RW, fxix); // client implements fx and ix (face|image extended) commands
189 shstr ACC (RW, version); // CF+ client name/version 235 shstr ACC (RW, version); // CF+ client name/version
190 uint8 ACC (RW, faceset); // CF+ selected faceset 236 uint8 ACC (RW, faceset); // CF+ selected faceset
191 237
192 tstamp ACC (RW, last_send); // last data send on socket. 238 tstamp ACC (RW, last_send); // last data send on socket.
193 239
194 int ACC (RW, rtt), ACC (RW, rttvar); /* round-trip time and -variance, if known */
195
196 int ACC (RW, rate_avail); // current rate balance 240 int ACC (RW, rate_avail); // current rate balance
197 int ACC (RW, max_rate); // max. # of bytes to send per tick 241 int ACC (RW, max_rate); // max. # of bytes to send per tick
198 faceidx ACC (RW, scrub_idx); // which face to send next 242 faceidx ACC (RW, scrub_idx); // which face to send next
199 int ACC (RW, bg_scrub); // how many ticks till the next background face send 243 int ACC (RW, bg_scrub); // how many ticks till the next background face send
244
245 struct tcp_info tcpi;
246 tstamp next_rate_adjust;
247#if FOR_PERL
248 // unfortunately, this emans that we *require* tcp_info now...
249 ACC (RW, tcpi.tcpi_state);
250 ACC (RW, tcpi.tcpi_ca_state);
251 ACC (RW, tcpi.tcpi_retransmits);
252 ACC (RW, tcpi.tcpi_probes);
253 ACC (RW, tcpi.tcpi_backoff);
254 ACC (RW, tcpi.tcpi_options);
255 ACC (RO, tcpi.tcpi_snd_wscale);
256 ACC (RO, tcpi.tcpi_rcv_wscale);
257 ACC (RW, tcpi.tcpi_rto);
258 ACC (RW, tcpi.tcpi_ato);
259 ACC (RW, tcpi.tcpi_snd_mss);
260 ACC (RW, tcpi.tcpi_rcv_mss);
261 ACC (RW, tcpi.tcpi_unacked);
262 ACC (RW, tcpi.tcpi_sacked);
263 ACC (RW, tcpi.tcpi_lost);
264 ACC (RW, tcpi.tcpi_retrans);
265 ACC (RW, tcpi.tcpi_fackets);
266 ACC (RW, tcpi.tcpi_last_data_sent);
267 ACC (RW, tcpi.tcpi_last_ack_sent);
268 ACC (RW, tcpi.tcpi_last_data_recv);
269 ACC (RW, tcpi.tcpi_last_ack_recv);
270 ACC (RW, tcpi.tcpi_pmtu);
271 ACC (RW, tcpi.tcpi_rcv_ssthresh);
272 ACC (RW, tcpi.tcpi_rtt);
273 ACC (RW, tcpi.tcpi_rttvar);
274 ACC (RW, tcpi.tcpi_snd_ssthresh);
275 ACC (RW, tcpi.tcpi_snd_cwnd);
276 ACC (RW, tcpi.tcpi_advmss);
277 ACC (RW, tcpi.tcpi_reordering);
278#endif
200 279
201 struct ixsend { 280 struct ixsend {
202 int16_t pri; // unused 281 int16_t pri; // unused
203 faceidx idx; 282 faceidx idx;
204 uint32_t ofs; // if != 0, need to send remaining bytes of partial_face 283 uint32_t ofs; // if != 0, need to send remaining bytes of partial_face
218 297
219 // large structures at the end please 298 // large structures at the end please
220 struct Map lastmap; 299 struct Map lastmap;
221 std::bitset<MAXANIMNUM> anims_sent; 300 std::bitset<MAXANIMNUM> anims_sent;
222 std::bitset<MAX_FACES> faces_sent; 301 std::bitset<MAX_FACES> faces_sent;
302 std::bitset<FT_NUM> fx_want;
223 303
224 // if we get an incomplete packet, this is used to hold the data. 304 // if we get an incomplete packet, this is used to hold the data.
225 // we add 2 byte for the header, one for the trailing 0 byte 305 // we add 2 byte for the header, one for the trailing 0 byte
226 uint8 inbuf[MAXSOCKBUF + 2 + 1]; 306 uint8 inbuf[MAXSOCKBUF + 2 + 1];
227 307
260 void send_packet_printf (const char *format, ...); 340 void send_packet_printf (const char *format, ...);
261 void send_packet (packet &sl); 341 void send_packet (packet &sl);
262 342
263 void send_drawinfo (const char *msg, int flags = NDI_BLACK); 343 void send_drawinfo (const char *msg, int flags = NDI_BLACK);
264 344
265 MTH bool must_send_face (faceidx facenum)
266 {
267 if (faces_sent[facenum])
268 return false;
269
270 faces_sent[facenum] = true;
271 return true;
272 }
273
274 MTH void send_face (faceidx facenum); 345 MTH void send_face (faceidx facenum, int pri = 0);
275 MTH void send_image (faceidx facenum); 346 MTH void send_image (faceidx facenum);
276 MTH void send_faces (object *ob); 347 MTH void send_faces (object *ob);
277 MTH void send_animation (short anim_num); 348 MTH void send_animation (short anim_num);
278 void send_msg (int color, const char *type, const char *msg); 349 void send_msg (int color, const char *type, const char *msg);
279 350
351 MTH void play_sound (faceidx sound, int dx = 0, int dy = 0);
280 // called when something under the player changes 352 // called when something under the player changes
281 MTH void floorbox_update () { update_look = 1; } 353 MTH void floorbox_update () { update_look = 1; }
282 // called when the player has been moved 354 // called when the player has been moved
283 MTH void floorbox_reset () { look_position = 0; floorbox_update (); } 355 MTH void floorbox_reset () { look_position = 0; floorbox_update (); }
284 356

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines