ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/include/newserver.h
Revision: 1.11
Committed: Sat Sep 16 22:06:17 2006 UTC (17 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.10: +86 -85 lines
Log Message:
indent

File Contents

# User Rev Content
1 root 1.1
2     /*
3 root 1.11 CrossFire, A Multiplayer game for the X Window System
4 root 1.1
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    
33     #ifndef NEWSERVER_H
34     #define NEWSERVER_H
35    
36     /* Reduce this from 50 to 5 - as it is now, there will never be more
37     * than 3 anyways.
38     */
39    
40     #define NUM_LOOK_OBJECTS 50
41    
42 root 1.11 struct MapCell
43     {
44 root 1.1 short faces[MAP_LAYERS];
45     uint16 smooth[MAP_LAYERS];
46 root 1.11 int count; /* This is really darkness in the map1 command */
47     unsigned char stat_hp; // health of something in this space, or 0
48     tag_t player; // this is, unfortunately, very wasteful of memory space, but pretty bandwidth-efficient
49 root 1.1 };
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 root 1.11 # define MAX_CLIENT_X (MAP_CLIENT_X + MAX_HEAD_OFFSET)
59 root 1.1 #define MAX_CLIENT_Y (MAP_CLIENT_Y + MAX_HEAD_OFFSET)
60    
61 root 1.11 struct Map
62     {
63 root 1.1 struct MapCell cells[MAX_CLIENT_X][MAX_CLIENT_Y];
64     };
65    
66     /* True max is 16383 given current map compaction method */
67 root 1.11 # define MAXANIMNUM 2000
68 root 1.1
69 root 1.11 struct statsinfo
70     {
71     char *range, *title;
72 root 1.1 };
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 root 1.11 enum Sock_Status { Ns_Avail, Ns_Add, Ns_Dead, Ns_Old };
81 root 1.1
82     /* Reserver 0 for neither of these being set */
83 root 1.11 enum Old_Mode { Old_Listen = 1, Old_Player = 2 };
84 root 1.1
85     /* Only one map mode can actually be used, so lets make it a switch
86     * instead of having a bunch of different fields that needed to
87     * get toggled.
88     */
89 root 1.11 enum MapMode { Map0Cmd = 0, Map1Cmd = 1, Map1aCmd = 2 };
90 root 1.1
91     /* The following is the setup for a ring buffer for storing outbut
92     * data that the OS can't handle right away.
93     */
94    
95 root 1.11 struct Buffer
96     {
97     char data[SOCKETBUFSIZE];
98     int start;
99     int len;
100     };
101 root 1.1
102     /* how many times we are allowed to give the wrong password before being kicked. */
103 root 1.11 # define MAX_PASSWORD_FAILURES 5
104 root 1.1
105 root 1.11 struct NewSocket
106     {
107     enum Sock_Status status;
108     int fd;
109     struct Map lastmap;
110     size_t faces_sent_len; /* This is the number of elements allocated in faces_sent[] */
111     uint8 *faces_sent; /* This is a bitmap on sent face status */
112     uint8 anims_sent[MAXANIMNUM];
113     struct statsinfo stats;
114     /* If we get an incomplete packet, this is used to hold the data. */
115     SockList inbuf;
116     char *host; /* Which host it is connected from (ip address) */
117     uint8 password_fails; /* how many times the player has failed to give the right password */
118     Buffer outputbuffer; /* For undeliverable data */
119     uint32 facecache:1; /* If true, client is caching images */
120     uint32 sent_scroll:1;
121     uint32 sound:1; /* does the client want sound */
122     uint32 exp64:1; /* Client wants 64 bit exp data, as well as skill data */
123     uint32 newmapcmd:1; /* Send newmap command when entering new map SMACFIGGEN */
124     uint32 plugincmd:1; /* CF+ extend the protocol through a plug-in */
125     uint32 mapinfocmd:1; /* CF+ return map info and send map change info */
126     uint32 extcmd:1; /* CF+ call into extensions/plugins */
127     uint32 extmap:1; /* CF+ extend map comamnd with extra data */
128     uint32 buggy_mapscroll:1; /* CF+ client crashes on large mapscrolls */
129     uint32 darkness:1; /* True if client wants darkness information */
130     uint32 image2:1; /* Client wants image2/face2 commands */
131     uint32 update_look:1; /* If true, we need to send the look window */
132     uint32 can_write:1; /* Can we write to this socket? */
133     uint32 has_readable_type:1; /* If true client accept additional text information
134     used to arrange text in books, scrolls, or scripted dialogs */
135     uint32 monitor_spells:1; /* Client wishes to be informed when their spell list changes */
136     uint32 supported_readables; /* each bit is a readable supported by client */
137     uint32 cs_version, sc_version; /* versions of the client */
138     enum MapMode mapmode; /* Type of map commands the client wants. */
139     uint16 look_position; /* start of drawing of look window */
140     uint8 mapx, mapy; /* How large a map the client wants */
141     uint8 itemcmd; /* What version of the 'item' protocol command to use */
142     uint8 faceset; /* Set the client is using, default 0 */
143     uint32 ext_mapinfos:1; /* If true client accept additionnal info on maps */
144     /* Below are flags for extedend infos to pass to client
145     * with S->C mapextended command */
146     uint32 EMI_smooth:1; /* Send smooth in extendmapinfos */
147    
148     struct mapstruct *current_map; // CF+ last/current player map
149     int current_x, current_y; // CF+ last/current map position
150     char client[64]; // CF+ client name/version
151    
152     /* Below here is information only relevant for old sockets */
153     char *comment; /* name or listen comment */
154     enum Old_Mode old_mode;
155     };
156 root 1.1
157     #define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\
158 root 1.10 ( ((__type)>0) &&\
159     ((__sockPtr)->has_readable_type) && \
160     ((__sockPtr)->supported_readables & (1<<(__type))) )
161 root 1.1
162     /* Bitmask for the faces_sent[] array - what
163     * portion of the face have we sent?
164     */
165     #define NS_FACESENT_FACE 0x1
166     #define NS_FACESENT_SMOOTH 0x2
167    
168     /* Constants in the form EMI_ is for extended map infos.
169     * Even if the client select the additionnal infos it wants
170     * on the map, there may exist cases where this whole info
171     * is not given in one buch but in separate bunches. This
172     * is done performance reasons (imagine some info related to
173     * a visible object and another info related to a 4 square
174     * width and height area). At the begin of an extended info packet
175     * is a bit field. A bit is activated for each extended info
176     * present in the data
177     */
178 root 1.11
179 root 1.1 /* Meanings:
180     * EMI_NOREDRAW Take extended infos into account but don't redraw,
181     * some additionnal datas will follow in a new packet
182     * EMI_SMOOTH Datas about smoothing
183 root 1.11 */
184     #define EMI_NOREDRAW 0x01
185 root 1.1 #define EMI_SMOOTH 0x02
186    
187     /* this last one says the bitfield continue un next byte
188     * There may be several on contiguous bytes. So there is 7
189     * actual bits used per byte, and the number of bytes
190     * is not fixed in protocol
191     */
192     #define EMI_HASMOREBITS 0x80
193    
194     #define FACE_TYPES 1
195     #define PNG_FACE_INDEX 0
196    
197 root 1.11 struct Socket_Info
198     {
199     struct timeval timeout; /* Timeout for select */
200     int max_filedescriptor; /* max filedescriptor on the system */
201     int nconns; /* Number of connections */
202     int allocated_sockets; /* number of allocated in init_sockets */
203     };
204 root 1.1
205     extern Socket_Info socket_info;
206    
207 root 1.11 #define VERSION_CS 1023 /* version >= 1023 understand setup cmd */
208 root 1.1 #define VERSION_SC 1027
209 root 1.4 #define VERSION_INFO "Crossfire+ Server"
210 root 1.1
211     #endif
212 root 1.11