$treeview $search $mathjax
Stratagus
2.2.6
$projectbrief
|
$projectbrief
|
$searchbox |
_________ __ __ / _____// |_____________ _/ |______ ____ __ __ ______ \_____ \\ __\_ __ \__ \\ __\__ \ / ___\| | \/ ___/ / \| | | | \// __ \| | / __ \_/ /_/ > | /\___ \ /_______ /|__| |__| (____ /__| (____ /\___ /|____//____ > \/ \/ \//_____/ \/ ______________________ ______________________ T H E W A R B E G I N S Stratagus - A free fantasy real time strategy game engine
00001 // _________ __ __ 00002 // / _____// |_____________ _/ |______ ____ __ __ ______ 00003 // \_____ \\ __\_ __ \__ \\ __\__ \ / ___\| | \/ ___/ 00004 // / \| | | | \// __ \| | / __ \_/ /_/ > | /\___ | 00005 // /_______ /|__| |__| (____ /__| (____ /\___ /|____//____ > 00006 // \/ \/ \//_____/ \/ 00007 // ______________________ ______________________ 00008 // T H E W A R B E G I N S 00009 // Stratagus - A free fantasy real time strategy game engine 00010 // 00012 // 00013 // (c) Copyright 1998-2007 by Lutz Sammer, Russell Smith, and Jimmy Salmon 00014 // 00015 // This program is free software; you can redistribute it and/or modify 00016 // it under the terms of the GNU General Public License as published by 00017 // the Free Software Foundation; only version 2 of the License. 00018 // 00019 // This program is distributed in the hope that it will be useful, 00020 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00021 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00022 // GNU General Public License for more details. 00023 // 00024 // You should have received a copy of the GNU General Public License 00025 // along with this program; if not, write to the Free Software 00026 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 00027 // 02111-1307, USA. 00028 00029 #ifndef __NETWORK_H__ 00030 #define __NETWORK_H__ 00031 00033 00034 /*---------------------------------------------------------------------------- 00035 -- Includes 00036 ----------------------------------------------------------------------------*/ 00037 00038 #include <SDL_stdinc.h> 00039 #include "net_lowlevel.h" 00040 00041 /*---------------------------------------------------------------------------- 00042 -- Defines 00043 ----------------------------------------------------------------------------*/ 00044 00045 #define MaxNetworkCommands 9 00046 00047 #define IsNetworkGame() (NetworkFildes != (Socket)-1) 00048 00049 /*---------------------------------------------------------------------------- 00050 -- Declarations 00051 ----------------------------------------------------------------------------*/ 00052 00053 class CUnit; 00054 class CUnitType; 00055 00061 enum _message_type_ { 00062 MessageNone, 00063 MessageInitHello, 00064 MessageInitReply, 00065 MessageInitConfig, 00066 00067 MessageSync, 00068 MessageSelection, 00069 MessageQuit, 00070 MessageQuitAck, 00071 MessageResend, 00072 00073 MessageChat, 00074 MessageChatTerm, 00075 00076 MessageCommandStop, 00077 MessageCommandStand, 00078 MessageCommandFollow, 00079 MessageCommandMove, 00080 MessageCommandRepair, 00081 MessageCommandAutoRepair, 00082 MessageCommandAttack, 00083 MessageCommandGround, 00084 MessageCommandPatrol, 00085 MessageCommandBoard, 00086 MessageCommandUnload, 00087 MessageCommandBuild, 00088 MessageCommandDismiss, 00089 MessageCommandResourceLoc, 00090 MessageCommandResource, 00091 MessageCommandReturn, 00092 MessageCommandTrain, 00093 MessageCommandCancelTrain, 00094 MessageCommandUpgrade, 00095 MessageCommandCancelUpgrade, 00096 MessageCommandResearch, 00097 MessageCommandCancelResearch, 00098 00099 MessageExtendedCommand, 00100 00101 // ATTN: __MUST__ be last due to spellid encoding!!! 00102 MessageCommandSpellCast 00103 }; 00104 00108 enum _extended_message_type_ { 00109 ExtendedMessageDiplomacy, 00110 ExtendedMessageSharedVision, 00111 ExtendedMessageSetResource 00112 }; 00113 00117 class CNetworkCommand { 00118 public: 00119 CNetworkCommand() : Unit(0), X(0), Y(0), Dest(0) {} 00120 void Clear() { this->Unit = this->X = this->Y = this->Dest = 0; } 00121 00122 void Serialize(unsigned char *p) const; 00123 void Deserialize(unsigned char *p); 00124 static size_t Size() { return 2+2+2+2; } 00125 00126 Uint16 Unit; 00127 Uint16 X; 00128 Uint16 Y; 00129 Uint16 Dest; 00130 }; 00131 00135 class CNetworkExtendedCommand { 00136 public: 00137 CNetworkExtendedCommand() : ExtendedType(0), Arg1(0), Arg2(0), Arg3(0), Arg4(0) {} 00138 00139 void Serialize(unsigned char *p); 00140 void Deserialize(unsigned char *p); 00141 static size_t Size() { return 1+1+2+2+2; } 00142 00143 Uint8 ExtendedType; 00144 Uint8 Arg1; 00145 Uint16 Arg2; 00146 Uint16 Arg3; 00147 Uint16 Arg4; 00148 }; 00149 00153 class CNetworkChat { 00154 public: 00155 CNetworkChat() { 00156 Player = 0; 00157 memset(Text, 0, sizeof(Text)); 00158 } 00159 00160 void Serialize(unsigned char *p); 00161 void Deserialize(unsigned char *p); 00162 static size_t Size() { return 1+7; } 00163 00164 Uint8 Player; 00165 char Text[7]; 00166 }; 00167 00171 typedef struct _network_selection_header_ { 00172 unsigned NumberSent : 6; 00173 unsigned Add : 1; 00174 unsigned Remove : 1; 00175 unsigned char Type[MaxNetworkCommands]; 00176 } NetworkSelectionHeader; 00177 00181 class CNetworkSelection { 00182 public: 00183 CNetworkSelection() { 00184 memset(Unit, 0, sizeof(Unit)); 00185 } 00186 00187 void Serialize(unsigned char *p); 00188 void Deserialize(unsigned char *p); 00189 static size_t Size() { return 2*4; } 00190 00191 Uint16 Unit[4]; 00192 }; 00193 00199 class CNetworkPacketHeader { 00200 public: 00201 CNetworkPacketHeader() { 00202 Cycle = 0; 00203 memset(Type, 0, sizeof(Type)); 00204 } 00205 00206 void Serialize(unsigned char *p) const; 00207 void Deserialize(unsigned char *p); 00208 static size_t Size() { return 1 + 1 * MaxNetworkCommands; } 00209 00210 Uint8 Cycle; 00211 Uint8 Type[MaxNetworkCommands]; 00212 }; 00213 00219 class CNetworkPacket { 00220 public: 00221 unsigned char *Serialize(int numcommands) const; 00222 int Deserialize(unsigned char *p, unsigned int len); 00223 static size_t Size(int numcommands) { 00224 return CNetworkPacketHeader::Size() + numcommands * CNetworkCommand::Size(); 00225 } 00226 00227 CNetworkPacketHeader Header; 00228 CNetworkCommand Command[MaxNetworkCommands]; 00229 }; 00230 00231 /*---------------------------------------------------------------------------- 00232 -- Variables 00233 ----------------------------------------------------------------------------*/ 00234 00235 extern int NetworkNumInterfaces; 00236 extern Socket NetworkFildes; 00237 extern int NetworkInSync; 00238 extern int NetworkUpdates; 00239 extern int NetworkLag; 00240 extern unsigned long NetworkStatus[PlayerMax]; 00241 extern int NoRandomPlacementMultiplayer; 00242 00243 /*---------------------------------------------------------------------------- 00244 -- Functions 00245 ----------------------------------------------------------------------------*/ 00246 00247 extern void InitNetwork1(); 00248 extern void InitNetwork2(); 00249 extern void ExitNetwork1(); 00250 extern void NetworkEvent(); 00251 extern void NetworkSync(); 00252 extern void NetworkQuit(); 00253 extern void NetworkRecover(); 00254 extern void NetworkCommands(); 00255 extern void NetworkChatMessage(const std::string &msg); 00256 00257 extern void NetworkSendCommand(int command, const CUnit &unit, int x, 00258 int y, const CUnit *dest, const CUnitType *type, int status); 00260 extern void NetworkSendExtendedCommand(int command, int arg1, int arg2, 00261 int arg3, int arg4, int status); 00263 extern void NetworkSendSelection(CUnit **units, int count); 00264 00266 00267 #endif // !__NETWORK_H__