ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/newserver.h
Revision: 1.27
Committed: Fri Dec 15 19:59:20 2006 UTC (17 years, 5 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.26: +0 -0 lines
State: FILE REMOVED
Log Message:
the rename for sanity campaign hits
you died
- renamed stuff
- partially updated copyrights
- some cleanups

File Contents

# Content
1
2 /*
3 CrossFire, A Multiplayer game for the X Window System
4
5 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
6 Copyright (C) 1992 Frank Tore Johansen
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21
22 The author can be reached via e-mail to crossfire-devel@real-time.com
23 */
24
25 /*
26 newserver.h defines various structures and values that are use for the
27 new client server communication method. Values defined here are only
28 used on the server side code. For shared client/server values, see
29 newclient.h
30 */
31
32 #ifndef NEWSERVER_H
33 #define NEWSERVER_H
34
35 /* Reduce this from 50 to 5 - as it is now, there will never be more
36 * than 3 anyways.
37 */
38
39 #define NUM_LOOK_OBJECTS 50
40
41 struct MapCell
42 {
43 UUID player; // this is, unfortunately, very wasteful of memory space, but pretty bandwidth-efficient
44 int count; /* This is really darkness in the map1 command */
45 uint16 faces[MAP_LAYERS];
46 uint16 smooth[MAP_LAYERS];
47 unsigned char stat_hp; // health of something in this space, or 0
48 unsigned char flags;
49 };
50
51 /* This basically defines the largest size an
52 * archetype may be - it is used for allocation of
53 * some structures, as well as determining how far
54 * we should look for the heads of big images.
55 */
56 #define MAX_HEAD_OFFSET 8
57
58 #define MAX_CLIENT_X (MAP_CLIENT_X + MAX_HEAD_OFFSET)
59 #define MAX_CLIENT_Y (MAP_CLIENT_Y + MAX_HEAD_OFFSET)
60
61 struct Map
62 {
63 struct MapCell cells[MAX_CLIENT_X][MAX_CLIENT_Y];
64 };
65
66 /* True max is 16383 given current map compaction method */
67 # define MAXANIMNUM 2000
68
69 struct statsinfo
70 {
71 char *range, *title;
72 };
73
74 /* This contains basic information on the socket structure. status is its
75 * current state. we set up our on buffers for sending/receiving, so we can
76 * handle some higher level functions. fd is the actual file descriptor we
77 * are using.
78 */
79
80 enum Sock_Status { Ns_Add, Ns_Dead };
81
82 /* Only one map mode can actually be used, so lets make it a switch
83 * instead of having a bunch of different fields that needed to
84 * get toggled.
85 */
86 enum MapMode { Map0Cmd = 0, Map1Cmd = 1, Map1aCmd = 2 };
87
88 /* The following is the setup for a ring buffer for storing outbut
89 * data that the OS can't handle right away.
90 */
91
92 struct Buffer
93 {
94 char data[SOCKETBUFSIZE];
95 int start;
96 int len;
97 };
98
99 /* how many times we are allowed to give the wrong password before being kicked. */
100 #define MAX_PASSWORD_FAILURES 5
101
102 ACC_CLASS (client_socket) // should become player when newsocket is a baseclass of player
103 struct client_socket : zero_initialised, attachable_base
104 {
105 enum Sock_Status status;
106 int ACC (RW, fd);
107 unsigned int inbuf_len; // number of bytes valid in inbuf
108 struct Map lastmap;
109 size_t faces_sent_len; /* This is the number of elements allocated in faces_sent[] */
110 uint8 *faces_sent; /* This is a bitmap on sent face status */
111 uint8 anims_sent[MAXANIMNUM];
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
151 /* If we get an incomplete packet, this is used to hold the data. */
152 uint8 inbuf[MAXSOCKBUF];
153 player *ACC (RO, pl);//TODO should not be here, preferably
154
155 int ACC (RW, rtt), ACC (RW, rttvar); /* round-trip time and -variance, if known */
156
157 iow socket_ev; void socket_cb (iow &w, int got);
158
159 client_socket (int fd, const char *from_ip);
160 ~client_socket ();
161
162 int read_packet (); // returns length of packet or 0
163 void skip_packet (int len); // we have processed the packet, skip it
164
165 void flush ();
166 void write_outputbuffer ();
167 void send (void *buf_, int len);
168
169 void send_packet (const char *buf);
170 void send_packet (const char *buf, int len);
171 void send_packet (packet &sl);
172 };
173
174 #define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\
175 ( ((__type)>0) &&\
176 ((__sockPtr)->has_readable_type) && \
177 ((__sockPtr)->supported_readables & (1<<(__type))) )
178
179 /* Bitmask for the faces_sent[] array - what
180 * portion of the face have we sent?
181 */
182 #define NS_FACESENT_FACE 0x1
183 #define NS_FACESENT_SMOOTH 0x2
184
185 /* Constants in the form EMI_ is for extended map infos.
186 * Even if the client select the additionnal infos it wants
187 * on the map, there may exist cases where this whole info
188 * is not given in one buch but in separate bunches. This
189 * is done performance reasons (imagine some info related to
190 * a visible object and another info related to a 4 square
191 * width and height area). At the begin of an extended info packet
192 * is a bit field. A bit is activated for each extended info
193 * present in the data
194 */
195
196 /* Meanings:
197 * EMI_NOREDRAW Take extended infos into account but don't redraw,
198 * some additionnal datas will follow in a new packet
199 * EMI_SMOOTH Datas about smoothing
200 */
201 #define EMI_NOREDRAW 0x01
202 #define EMI_SMOOTH 0x02
203
204 /* this last one says the bitfield continue un next byte
205 * There may be several on contiguous bytes. So there is 7
206 * actual bits used per byte, and the number of bytes
207 * is not fixed in protocol
208 */
209 #define EMI_HASMOREBITS 0x80
210
211 #define FACE_TYPES 1
212 #define PNG_FACE_INDEX 0
213
214 #define VERSION_CS 1023 /* version >= 1023 understand setup cmd */
215 #define VERSION_SC 1027
216 #define VERSION_INFO "Crossfire+ Server"
217
218 typedef unordered_vector<client_socket *> sockvec;
219
220 extern sockvec client_sockets;
221 extern int nrofpixmaps; //TODO: hrmpf, should go
222
223 #endif
224