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.8 by root, Mon Aug 21 07:13:32 2006 UTC vs.
Revision 1.18 by root, Thu Dec 14 01:12:34 2006 UTC

1
1/* 2/*
2 * static char *rcsid_newserver_h =
3 * "$Id: newserver.h,v 1.8 2006/08/21 07:13:32 root Exp $";
4 */
5
6/*
7 CrossFire, A Multiplayer game for X-windows 3 CrossFire, A Multiplayer game for the X Window System
8 4
9 Copyright (C) 2002 Mark Wedel & Crossfire Development Team 5 Copyright (C) 2002 Mark Wedel & Crossfire Development Team
10 Copyright (C) 1992 Frank Tore Johansen 6 Copyright (C) 1992 Frank Tore Johansen
11 7
12 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
31 new client server communication method. Values defined here are only 27 new client server communication method. Values defined here are only
32 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
33 newclient.h 29 newclient.h
34*/ 30*/
35 31
36
37#ifndef NEWSERVER_H 32#ifndef NEWSERVER_H
38#define NEWSERVER_H 33#define NEWSERVER_H
39 34
40/* 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
41 * than 3 anyways. 36 * than 3 anyways.
42 */ 37 */
43 38
44#define NUM_LOOK_OBJECTS 50 39#define NUM_LOOK_OBJECTS 50
45 40
46struct MapCell { 41struct 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 */
47 short faces[MAP_LAYERS]; 45 uint16 faces[MAP_LAYERS];
48 uint16 smooth[MAP_LAYERS]; 46 uint16 smooth[MAP_LAYERS];
49 int count; /* This is really darkness in the map1 command */
50 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
48 unsigned char flags;
51}; 49};
52 50
53/* This basically defines the largest size an 51/* This basically defines the largest size an
54 * archetype may be - it is used for allocation of 52 * archetype may be - it is used for allocation of
55 * some structures, as well as determining how far 53 * some structures, as well as determining how far
58#define MAX_HEAD_OFFSET 8 56#define MAX_HEAD_OFFSET 8
59 57
60#define MAX_CLIENT_X (MAP_CLIENT_X + MAX_HEAD_OFFSET) 58#define MAX_CLIENT_X (MAP_CLIENT_X + MAX_HEAD_OFFSET)
61#define MAX_CLIENT_Y (MAP_CLIENT_Y + MAX_HEAD_OFFSET) 59#define MAX_CLIENT_Y (MAP_CLIENT_Y + MAX_HEAD_OFFSET)
62 60
63struct Map { 61struct Map
62{
64 struct MapCell cells[MAX_CLIENT_X][MAX_CLIENT_Y]; 63 struct MapCell cells[MAX_CLIENT_X][MAX_CLIENT_Y];
65}; 64};
66 65
67/* True max is 16383 given current map compaction method */ 66/* True max is 16383 given current map compaction method */
68#define MAXANIMNUM 2000 67# define MAXANIMNUM 2000
69 68
70struct statsinfo { 69struct statsinfo
70{
71 char *range, *title; 71 char *range, *title;
72}; 72};
73
74 73
75/* This contains basic information on the socket structure. status is its 74/* This contains basic information on the socket structure. status is its
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_Avail, Ns_Add, Ns_Dead, Ns_Old };
82 81
83/* Reserver 0 for neither of these being set */ 82/* Reserver 0 for neither of these being set */
84enum Old_Mode {Old_Listen=1, Old_Player=2}; 83enum Old_Mode { Old_Listen = 1, Old_Player = 2 };
85 84
86/* Only one map mode can actually be used, so lets make it a switch 85/* 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 86 * instead of having a bunch of different fields that needed to
88 * get toggled. 87 * get toggled.
89 */ 88 */
90enum MapMode {Map0Cmd = 0, Map1Cmd = 1, Map1aCmd=2 }; 89enum MapMode { Map0Cmd = 0, Map1Cmd = 1, Map1aCmd = 2 };
91 90
92/* The following is the setup for a ring buffer for storing outbut 91/* The following is the setup for a ring buffer for storing outbut
93 * data that the OS can't handle right away. 92 * data that the OS can't handle right away.
94 */ 93 */
95 94
96typedef struct Buffer { 95struct Buffer
96{
97 char data[SOCKETBUFSIZE]; 97 char data[SOCKETBUFSIZE];
98 int start; 98 int start;
99 int len; 99 int len;
100} Buffer; 100};
101 101
102/* how many times we are allowed to give the wrong password before being kicked. */ 102/* how many times we are allowed to give the wrong password before being kicked. */
103#define MAX_PASSWORD_FAILURES 5 103# define MAX_PASSWORD_FAILURES 5
104 104
105typedef struct NewSocket { 105ACC_CLASS (client_socket) // should become player when newsocket is a baseclass of player
106struct NewSocket : zero_initialised
107{
106 enum Sock_Status status; 108 enum Sock_Status status;
107 int fd; 109 int ACC (RW, fd);
110 unsigned int inbuf_len; // number of bytes valid in inbuf
108 struct Map lastmap; 111 struct Map lastmap;
109 size_t faces_sent_len; /* This is the number of elements allocated in faces_sent[] */ 112 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 */ 113 uint8 *faces_sent; /* This is a bitmap on sent face status */
111 uint8 anims_sent[MAXANIMNUM]; 114 uint8 anims_sent[MAXANIMNUM];
112 struct statsinfo stats; 115 struct statsinfo stats;
113 /* If we get an incomplete packet, this is used to hold the data. */ 116
114 SockList inbuf;
115 char *host; /* Which host it is connected from (ip address)*/ 117 char *ACC (RW, host); /* Which host it is connected from (ip address) */
116 uint8 password_fails; /* how many times the player has failed to give the right password */ 118 uint8 ACC (RW, password_fails); /* how many times the player has failed to give the right password */
117 Buffer outputbuffer; /* For undeliverable data */ 119 Buffer outputbuffer; /* For undeliverable data */
118 uint32 facecache:1; /* If true, client is caching images */ 120 uint32 ACC (RO, facecache):1; /* If true, client is caching images */
119 uint32 sent_scroll:1; 121 uint32 ACC (RO, sent_scroll):1;
120 uint32 sound:1; /* does the client want sound */ 122 uint32 ACC (RO, sound):1; /* does the client want sound */
121 uint32 exp64:1; /* Client wants 64 bit exp data, as well as skill data */ 123 uint32 ACC (RO, exp64):1; /* Client wants 64 bit exp data, as well as skill data */
122 uint32 newmapcmd:1; /* Send newmap command when entering new map SMACFIGGEN*/ 124 uint32 ACC (RO, newmapcmd):1; /* Send newmap command when entering new map SMACFIGGEN */
123 uint32 plugincmd:1; /* CF+ extend the protocol through a plug-in */ 125 uint32 ACC (RO, plugincmd):1; /* CF+ extend the protocol through a plug-in */
124 uint32 mapinfocmd:1; /* CF+ return map info and send map change info */ 126 uint32 ACC (RO, mapinfocmd):1; /* CF+ return map info and send map change info */
125 uint32 extcmd:1; /* CF+ call into extensions/plugins */ 127 uint32 ACC (RO, extcmd):1; /* CF+ call into extensions/plugins */
126 uint32 extmap:1; /* CF+ extend map comamnd with extra data */ 128 uint32 ACC (RO, extmap):1; /* CF+ extend map comamnd with extra data */
127 uint32 buggy_mapscroll:1; /* CF+ client crashes on large mapscrolls */ 129 uint32 ACC (RO, buggy_mapscroll):1; /* CF+ client crashes on large mapscrolls */
128 uint32 darkness:1; /* True if client wants darkness information */ 130 uint32 ACC (RO, darkness):1; /* True if client wants darkness information */
129 uint32 image2:1; /* Client wants image2/face2 commands */ 131 uint32 ACC (RO, image2):1; /* Client wants image2/face2 commands */
130 uint32 update_look:1; /* If true, we need to send the look window */ 132 uint32 ACC (RO, update_look):1; /* If true, we need to send the look window */
131 uint32 can_write:1; /* Can we write to this socket? */ 133 uint32 ACC (RO, can_write):1; /* Can we write to this socket? */
132 uint32 has_readable_type:1; /* If true client accept additional text information 134 uint32 ACC (RO, has_readable_type):1; /* If true client accept additional text information
133 used to arrange text in books, scrolls, or scripted dialogs */ 135 used to arrange text in books, scrolls, or scripted dialogs */
134 uint32 monitor_spells:1; /* Client wishes to be informed when their spell list changes */ 136 uint32 ACC (RO, monitor_spells):1; /* Client wishes to be informed when their spell list changes */
135 uint32 supported_readables; /* each bit is a readable supported by client */
136 uint32 cs_version, sc_version; /* versions of the client */
137 enum MapMode mapmode; /* Type of map commands the client wants. */
138 uint16 look_position; /* start of drawing of look window */
139 uint8 mapx, mapy; /* How large a map the client wants */
140 uint8 itemcmd; /* What version of the 'item' protocol command to use */
141 uint8 faceset; /* Set the client is using, default 0 */
142 uint32 ext_mapinfos:1; /* If true client accept additionnal info on maps*/ 137 uint32 ACC (RO, ext_mapinfos):1; /* If true client accept additionnal info on maps */
143 /* Below are flags for extedend infos to pass to client 138 /* Below are flags for extedend infos to pass to client
144 * with S->C mapextended command */ 139 * with S->C mapextended command */
145 uint32 EMI_smooth:1; /* Send smooth in extendmapinfos*/ 140 uint32 ACC (RO, EMI_smooth):1; /* Send smooth in extendmapinfos */
141 uint32 ACC (RW, supported_readables); /* each bit is a readable supported by client */
142 uint32 ACC (RW, cs_version), ACC (RW, sc_version); /* versions of the client */
143 enum MapMode mapmode; /* Type of map commands the client wants. */
144 uint16 ACC (RW, look_position); /* start of drawing of look window */
145 uint8 ACC (RW, mapx), ACC (RW, mapy); /* How large a map the client wants */
146 uint8 ACC (RW, itemcmd); /* What version of the 'item' protocol command to use */
147 uint8 ACC (RW, faceset); /* Set the client is using, default 0 */
146 148
147 struct mapstruct *current_map; // CF+ last/current player map 149 maptile *ACC (RW, current_map); // CF+ last/current player map
148 int current_x, current_y; // CF+ last/current map position 150 int ACC (RW, current_x), ACC (RW, current_y); // CF+ last/current map position
149 char client[64]; // CF+ client name/version 151 char ACC (RW, client)[64]; // CF+ client name/version
150 152
151 /* Below here is information only relevant for old sockets */ 153 /* If we get an incomplete packet, this is used to hold the data. */
152 char *comment; /* name or listen comment */ 154 uint8 inbuf[MAXSOCKBUF];
153 enum Old_Mode old_mode;
154} NewSocket;
155 155
156 int read_packet (); // returns length of packet or 0
157 void skip_packet (int len); // we have processed the packet, skip it
158
159 void send_packet (const char *buf);
160 void send_packet (const char *buf, int len);
161 void send_packet (SockList &sl);
162};
156 163
157#define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\ 164#define CLIENT_SUPPORT_READABLES(__sockPtr,__type)\
158 ( ((__type)>0) &&\ 165 ( ((__type)>0) &&\
159 ((__sockPtr)->has_readable_type) && \ 166 ((__sockPtr)->has_readable_type) && \
160 ((__sockPtr)->supported_readables & (1<<(__type))) ) 167 ((__sockPtr)->supported_readables & (1<<(__type))) )
161
162 168
163/* Bitmask for the faces_sent[] array - what 169/* Bitmask for the faces_sent[] array - what
164 * portion of the face have we sent? 170 * portion of the face have we sent?
165 */ 171 */
166#define NS_FACESENT_FACE 0x1 172#define NS_FACESENT_FACE 0x1
174 * a visible object and another info related to a 4 square 180 * a visible object and another info related to a 4 square
175 * width and height area). At the begin of an extended info packet 181 * width and height area). At the begin of an extended info packet
176 * is a bit field. A bit is activated for each extended info 182 * is a bit field. A bit is activated for each extended info
177 * present in the data 183 * present in the data
178 */ 184 */
185
179/* Meanings: 186/* Meanings:
180 * EMI_NOREDRAW Take extended infos into account but don't redraw, 187 * EMI_NOREDRAW Take extended infos into account but don't redraw,
181 * some additionnal datas will follow in a new packet 188 * some additionnal datas will follow in a new packet
182 * EMI_SMOOTH Datas about smoothing 189 * EMI_SMOOTH Datas about smoothing
183 */ 190 */
184#define EMI_NOREDRAW 0x01 191#define EMI_NOREDRAW 0x01
185#define EMI_SMOOTH 0x02 192#define EMI_SMOOTH 0x02
186 193
187/* this last one says the bitfield continue un next byte 194/* this last one says the bitfield continue un next byte
188 * There may be several on contiguous bytes. So there is 7 195 * There may be several on contiguous bytes. So there is 7
189 * actual bits used per byte, and the number of bytes 196 * actual bits used per byte, and the number of bytes
192#define EMI_HASMOREBITS 0x80 199#define EMI_HASMOREBITS 0x80
193 200
194#define FACE_TYPES 1 201#define FACE_TYPES 1
195#define PNG_FACE_INDEX 0 202#define PNG_FACE_INDEX 0
196 203
197typedef struct Socket_Info { 204struct Socket_Info
205{
198 struct timeval timeout; /* Timeout for select */ 206 struct timeval timeout; /* Timeout for select */
199 int max_filedescriptor; /* max filedescriptor on the system */ 207 int max_filedescriptor; /* max filedescriptor on the system */
200 int nconns; /* Number of connections */ 208 int nconns; /* Number of connections */
201 int allocated_sockets; /* number of allocated in init_sockets */ 209 int allocated_sockets; /* number of allocated in init_sockets */
202} Socket_Info; 210};
203 211
204extern Socket_Info socket_info; 212extern Socket_Info socket_info;
205 213
206#define VERSION_CS 1023 /* version >= 1023 understand setup cmd */ 214#define VERSION_CS 1023 /* version >= 1023 understand setup cmd */
207#define VERSION_SC 1027 215#define VERSION_SC 1027
208#define VERSION_INFO "Crossfire+ Server" 216#define VERSION_INFO "Crossfire+ Server"
209 217
210#endif 218#endif
219

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines