File indexing completed on 2024-05-12 05:39:52

0001 /*************************************************************************
0002  *   Copyright (C) 2011 by Joseph Boudou                                 *
0003  *   Copyright (C) 2015 by Renaud Guezennec                              *
0004  *                                                                       *
0005  *   https://rolisteam.org/                                           *
0006  *                                                                       *
0007  *   Rolisteam is free software; you can redistribute it and/or modify   *
0008  *   it under the terms of the GNU General Public License as published   *
0009  *   by the Free Software Foundation; either version 2 of the License,   *
0010  *   or (at your option) any later version.                              *
0011  *                                                                       *
0012  *   This program is distributed in the hope that it will be useful,     *
0013  *   but WITHOUT ANY WARRANTY; without even the implied warranty of      *
0014  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the       *
0015  *   GNU General Public License for more details.                        *
0016  *                                                                       *
0017  *   You should have received a copy of the GNU General Public License   *
0018  *   along with this program; if not, write to the                       *
0019  *   Free Software Foundation, Inc.,                                     *
0020  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.           *
0021  *************************************************************************/
0022 
0023 #ifndef NETWORK_MESSAGE_H
0024 #define NETWORK_MESSAGE_H
0025 
0026 #include "network_global.h"
0027 #include <QStringList>
0028 #include <QtGlobal>
0029 //
0030 class NetworkLink;
0031 class ClientManager;
0032 struct NETWORK_EXPORT NetworkMessageHeader
0033 {
0034     quint8 category;
0035     quint8 action;
0036     quint32 dataSize;
0037 };
0038 namespace NetMsg
0039 {
0040 enum Category
0041 {
0042     AdministrationCategory,
0043     UserCategory,
0044     PlayerCharacterCategory,
0045     CharacterSheetCategory,
0046     InstantMessageCategory,
0047     MusicCategory,
0048     SetupCategory,
0049     CampaignCategory,
0050     VMapCategory,
0051     MediaCategory,
0052     SharedNoteCategory,
0053     WebPageCategory,
0054     MindMapCategory,
0055 };
0056 
0057 enum Action
0058 {
0059     // AdministrationCategory
0060     EndConnectionAction= 0,
0061     Heartbeat,
0062     ConnectionInfo,
0063     Goodbye,
0064     Kicked,
0065     MoveChannel,
0066     SetChannelList,
0067     RenameChannel,
0068     NeedPassword,
0069     AuthentificationSucessed,
0070     AuthentificationFail,
0071     LockChannel,
0072     UnlockChannel,
0073     JoinChannel,
0074     DeleteChannel,
0075     AddChannel,
0076     ChannelPassword,
0077     ResetChannelPassword,
0078     BanUser,
0079     ClearTable,
0080     AdminPassword,
0081     AdminAuthSucessed,
0082     AdminAuthFail,
0083     MovedIntoChannel,
0084     GMStatus,
0085     ResetChannel,
0086 
0087     // UserCategory
0088     PlayerConnectionAction= 0,
0089     DelPlayerAction,
0090 
0091     // Player and Character Category
0092     AddCharacterToPlayerAct= 0,
0093     RemoveCharacterToPlayerAct,
0094     ChangePlayerPropertyAct,
0095     ChangeCharacterPropertyAct,
0096 
0097     // CharacterSheetCategory
0098     addCharacterSheet,
0099     updateFieldCharacterSheet,
0100     closeCharacterSheet,
0101 
0102     // InstantMessageCategory
0103     InstantMessageAction= 0,
0104     AddChatroomAction,
0105     RemoveChatroomAction,
0106     UpdateChatAction,
0107 
0108     // MusicCategory
0109     StopSong= 0,
0110     PlaySong,
0111     PauseSong,
0112     NewSong,
0113     ChangePositionSong,
0114 
0115     // SetupCategory
0116     AddFeatureAction= 0,
0117 
0118     // CampaignCategory
0119     addDiceAlias= 0,
0120     moveDiceAlias,
0121     removeDiceAlias,
0122     addCharacterState,
0123     moveCharacterState,
0124     removeCharacterState,
0125     DiceAliasModel,
0126     CharactereStateModel,
0127 
0128     // Vmap
0129     AddItem= 0,
0130     DeleteItem,
0131     UpdateItem,
0132     AddPoint,
0133     DeletePoint,
0134     MovePoint,
0135     SetParentItem,
0136     CharacterVisionChanged,
0137     CharacterStateChanged,
0138     CharacterChanged,
0139     HighLightPosition,
0140 
0141     // mediacategory
0142     AddMedia= 0,
0143     UpdateMediaProperty,
0144     CloseMedia,
0145     AddSubImage,
0146     RemoveSubImage,
0147 
0148     // SharedNoteCategory
0149     updateTextAndPermission= 0,
0150     updateText,
0151     updatePermissionOneUser,
0152 
0153     // WebPage
0154     UpdateContent= 0,
0155 
0156     // Mindmap
0157     AddMessage= 0,
0158     RemoveMessage,
0159     UpdateNode,
0160     UpdatePackage,
0161     UpdateLink,
0162     UpdateMindMapPermission
0163 };
0164 } // namespace NetMsg
0165 
0166 class NetworkMessage;
0167 class NETWORK_EXPORT MessageSenderInterface
0168 {
0169 public:
0170     virtual ~MessageSenderInterface();
0171     virtual void sendMessage(const NetworkMessage* msg)= 0;
0172 };
0173 
0174 /**
0175  * @brief The NetworkMessage class is pure virtual class to manage network message.
0176  */
0177 class NETWORK_EXPORT NetworkMessage
0178 {
0179 public:
0180     enum RecipientMode
0181     {
0182         All,
0183         OneOrMany
0184     };
0185     explicit NetworkMessage();
0186     virtual ~NetworkMessage();
0187     virtual void sendToServer();
0188     virtual NetMsg::Category category() const= 0;
0189     virtual NetMsg::Action action() const= 0;
0190     void setLinkToServer(NetworkLink* server);
0191     virtual NetworkMessage::RecipientMode getRecipientMode() const= 0;
0192     virtual QStringList getRecipientList() const= 0;
0193     quint64 getSize() const;
0194     virtual NetworkMessageHeader* buffer() const= 0;
0195 
0196     static void setMessageSender(MessageSenderInterface*);
0197 
0198 protected:
0199     static MessageSenderInterface* m_sender;
0200 };
0201 #endif