/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ /***************************************************************************** * * $/Plasma20/Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbEchoMsgs.h * ***/ #ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETBASE_PRIVATE_PNNBECHOMSGS_H #error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbEchoMsgs.h included more than once" #endif #define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETBASE_PRIVATE_PNNBECHOMSGS_H //============================================================================ // Begin Echo server data types //============================================================================ namespace Echo { /***************************************************************************** * * @@@: Shared data types for echo server/client demo * ***/ const unsigned kEchoMsgFlagBroadcast = 1<<0; const unsigned kEchoMsgFlagEchoBack = 1<<1; enum EEchoNetBufferType { kEchoNetBufferInvalidType, kEchoNetBufferMsg, kNumEchoNetBufferTypes }; enum EEchoMsgType { kEchoInvalidMsgType, kEchoJoinRequestMsg, kEchoJoinReplyMsg, kEchoPlayerJoinedMsg, kEchoPlayerLeftMsg, kEchoChatMsg, kEchoGameDataBufferMsg, kNumEchoMsgTypes }; COMPILER_ASSERT(kNumEchoMsgTypes < (byte)-1); //============================================================================ // Begin packed data structures //============================================================================ #include struct EchoMsg { EchoMsg (const EEchoMsgType & type, unsigned flags = 0) : type((byte)type) , flags(flags) { } byte type; dword flags; }; struct EchoJoinRequestMsg : EchoMsg { EchoJoinRequestMsg () : EchoMsg(kEchoJoinRequestMsg) { } wchar playerName[64]; }; struct EchoJoinReplyMsg : EchoMsg { EchoJoinReplyMsg () : EchoMsg(kEchoJoinReplyMsg) { } dword playerId; }; struct EchoPlayerJoinedMsg : EchoMsg { EchoPlayerJoinedMsg () : EchoMsg(kEchoPlayerJoinedMsg, kEchoMsgFlagBroadcast) { } dword playerId; wchar playerName[64]; }; struct EchoPlayerLeftMsg : EchoMsg { EchoPlayerLeftMsg () : EchoMsg(kEchoPlayerLeftMsg, kEchoMsgFlagBroadcast) { } dword playerId; }; struct EchoChatMsg : EchoMsg { EchoChatMsg () : EchoMsg(kEchoChatMsg, kEchoMsgFlagBroadcast|kEchoMsgFlagEchoBack) { } dword fromPlayerId; dword msgChars; wchar msgBuffer[1]; // [msgChars], actually // no more fields after variable length allocation }; struct EchoGameDataBufferMsg : EchoMsg { EchoGameDataBufferMsg () : EchoMsg(kEchoGameDataBufferMsg, kEchoMsgFlagBroadcast|kEchoMsgFlagEchoBack) { } dword fromPlayerId; dword bufferBytes; byte bufferData[1]; // [bufferBytes], actually // no more fields after variable length allocation }; //============================================================================ // End packed data structures //============================================================================ #include //============================================================================ // End Echo server data types //============================================================================ } using namespace Echo;