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