File indexing completed on 2024-05-05 05:40:33
0001 #include "network/messagedispatcher.h" 0002 #include "network/networkmessagereader.h" 0003 0004 #include "network/channel.h" 0005 0006 MessageDispatcher::MessageDispatcher(QObject* parent) : QObject(parent) {} 0007 0008 void MessageDispatcher::dispatchMessage(QByteArray data, Channel* channel, ServerConnection* emitter) 0009 { 0010 if(data.isEmpty()) 0011 return; 0012 0013 bool sendToAll= true; 0014 bool saveIt= true; 0015 NetworkMessageReader* msg= new NetworkMessageReader(); 0016 0017 msg->setData(data); 0018 0019 if(channel == nullptr && msg->category() != NetMsg::AdministrationCategory) 0020 { 0021 qWarning() << "####\nchannel is nullptr\n####"; 0022 } 0023 0024 if(emitter) 0025 qInfo() << "[Server][Received Message]" << cat2String(msg->header()) << act2String(msg->header()) << channel 0026 << emitter->name() << msg->getSize(); 0027 0028 if(msg->category() == NetMsg::AdministrationCategory) 0029 { 0030 emit messageForAdmin(msg, channel, emitter); 0031 sendToAll= false; 0032 if((NetMsg::ClearTable == msg->action()) || (NetMsg::AddChannel == msg->action())) 0033 { 0034 sendToAll= true; 0035 saveIt= false; 0036 } 0037 } 0038 else if(msg->category() == NetMsg::UserCategory) 0039 { 0040 if(msg->action() == NetMsg::PlayerConnectionAction) 0041 { 0042 emitter->setInfoPlayer(msg); 0043 saveIt= false; 0044 sendToAll= false; 0045 } 0046 else if(msg->action() == NetMsg::DelPlayerAction) 0047 { 0048 saveIt= false; 0049 sendToAll= false; 0050 if(channel != nullptr) 0051 channel->removeClient(emitter); 0052 } 0053 0054 } 0055 else if(msg->category() == NetMsg::PlayerCharacterCategory) 0056 { 0057 if(msg->action() == NetMsg::ChangePlayerPropertyAct) 0058 { 0059 auto uuid= msg->string8(); 0060 auto property= msg->string16(); 0061 if(property == "name") 0062 { 0063 auto name= msg->string16(); 0064 0065 if(channel != nullptr) 0066 { 0067 QMetaObject::invokeMethod(channel, "renamePlayer", Qt::QueuedConnection, Q_ARG(QString, uuid), 0068 Q_ARG(QString, name)); 0069 } 0070 } 0071 } 0072 } 0073 else if(msg->category() == NetMsg::SetupCategory) 0074 { 0075 saveIt= false; 0076 } 0077 0078 if((sendToAll) && (nullptr != channel)) 0079 { 0080 channel->sendMessage(msg, emitter, saveIt); 0081 } 0082 } 0083 0084 QString MessageDispatcher::cat2String(NetworkMessageHeader* head) 0085 { 0086 QString str; 0087 NetMsg::Category cat= NetMsg::Category(head->category); 0088 switch(cat) 0089 { 0090 case NetMsg::AdministrationCategory: 0091 str= QStringLiteral("AdministrationCategory"); 0092 break; 0093 case NetMsg::UserCategory: 0094 str= QStringLiteral("UserCategory"); 0095 break; 0096 case NetMsg::PlayerCharacterCategory: 0097 str= QStringLiteral("PlayerCharacterCategory"); 0098 break; 0099 case NetMsg::CharacterSheetCategory: 0100 str= QStringLiteral("CharacterSheetCategory"); 0101 break; 0102 case NetMsg::InstantMessageCategory: 0103 str= QStringLiteral("InstantMessageCategory"); 0104 break; 0105 case NetMsg::MusicCategory: 0106 str= QStringLiteral("MusicCategory"); 0107 break; 0108 case NetMsg::SetupCategory: 0109 str= QStringLiteral("SetupCategory"); 0110 break; 0111 case NetMsg::CampaignCategory: 0112 str= QStringLiteral("CampaignCategory"); 0113 break; 0114 case NetMsg::VMapCategory: 0115 str= QStringLiteral("VMapCategory"); 0116 break; 0117 case NetMsg::MediaCategory: 0118 str= QStringLiteral("MediaCategory"); 0119 break; 0120 case NetMsg::SharedNoteCategory: 0121 str= QStringLiteral("SharedNoteCategory"); 0122 break; 0123 case NetMsg::WebPageCategory: 0124 str= QStringLiteral("WebPageCategory"); 0125 break; 0126 case NetMsg::MindMapCategory: 0127 str= QStringLiteral("MindMapCategory"); 0128 break; 0129 default: 0130 str= QStringLiteral("UnknownCategory"); 0131 break; 0132 } 0133 return str; 0134 } 0135 0136 QString MessageDispatcher::act2String(NetworkMessageHeader* head) 0137 { 0138 QString str("Unknown Action"); 0139 NetMsg::Action act= NetMsg::Action(head->action); 0140 NetMsg::Category cat= NetMsg::Category(head->category); 0141 if(cat == NetMsg::AdministrationCategory) 0142 { 0143 switch(act) 0144 { 0145 case NetMsg::EndConnectionAction: 0146 str= QStringLiteral("EndConnectionAction"); 0147 break; 0148 case NetMsg::Heartbeat: 0149 str= QStringLiteral("Heartbeat"); 0150 break; 0151 case NetMsg::ConnectionInfo: 0152 str= QStringLiteral("ConnectionInfo"); 0153 break; 0154 case NetMsg::Goodbye: 0155 str= QStringLiteral("Goodbye"); 0156 break; 0157 case NetMsg::Kicked: 0158 str= QStringLiteral("Kicked"); 0159 break; 0160 case NetMsg::RenameChannel: 0161 str= QStringLiteral("RenameChannel"); 0162 break; 0163 case NetMsg::MoveChannel: 0164 str= QStringLiteral("MoveChannel"); 0165 break; 0166 case NetMsg::NeedPassword: 0167 str= QStringLiteral("NeedPassword"); 0168 break; 0169 case NetMsg::SetChannelList: 0170 str= QStringLiteral("SetChannelList"); 0171 break; 0172 case NetMsg::ChannelPassword: 0173 str= QStringLiteral("ChannelPassword"); 0174 break; 0175 case NetMsg::JoinChannel: 0176 str= QStringLiteral("JoinChannel"); 0177 break; 0178 case NetMsg::ClearTable: 0179 str= QStringLiteral("ClearTable"); 0180 break; 0181 case NetMsg::AddChannel: 0182 str= QStringLiteral("AddChannel"); 0183 break; 0184 case NetMsg::DeleteChannel: 0185 str= QStringLiteral("DeleteChannel"); 0186 break; 0187 case NetMsg::AuthentificationSucessed: 0188 str= QStringLiteral("AuthentificationSucessed"); 0189 break; 0190 case NetMsg::AuthentificationFail: 0191 str= QStringLiteral("AuthentificationFail"); 0192 break; 0193 case NetMsg::LockChannel: 0194 str= QStringLiteral("LockChannel"); 0195 break; 0196 case NetMsg::UnlockChannel: 0197 str= QStringLiteral("UnlockChannel"); 0198 break; 0199 case NetMsg::BanUser: 0200 str= QStringLiteral("BanUser"); 0201 break; 0202 case NetMsg::AdminPassword: 0203 str= QStringLiteral("AdminPassword"); 0204 break; 0205 case NetMsg::AdminAuthSucessed: 0206 str= QStringLiteral("AdminAuthSucessed"); 0207 break; 0208 case NetMsg::AdminAuthFail: 0209 str= QStringLiteral("AdminAuthFail"); 0210 break; 0211 case NetMsg::MovedIntoChannel: 0212 str= QStringLiteral("MovedIntoChannel"); 0213 break; 0214 case NetMsg::GMStatus: 0215 str= QStringLiteral("GMStatus"); 0216 break; 0217 case NetMsg::ResetChannel: 0218 str= QStringLiteral("ResetChannel"); 0219 break; 0220 case NetMsg::ResetChannelPassword: 0221 str= QStringLiteral("ResetChannelPassword"); 0222 break; 0223 default: 0224 str= QStringLiteral("Unknown Action"); 0225 break; 0226 } 0227 } 0228 else if(cat == NetMsg::UserCategory) 0229 { 0230 switch(act) 0231 { 0232 case NetMsg::PlayerConnectionAction: 0233 str= QStringLiteral("PlayerConnectionAction"); 0234 break; 0235 case NetMsg::DelPlayerAction: 0236 str= QStringLiteral("DelPlayerAction"); 0237 break; 0238 default: 0239 str= QStringLiteral("Unknown Action"); 0240 break; 0241 } 0242 } 0243 else if(cat == NetMsg::PlayerCharacterCategory) 0244 { 0245 switch(act) 0246 { 0247 case NetMsg::AddCharacterToPlayerAct: 0248 str= QStringLiteral("AddCharacterToPlayerAct"); 0249 break; 0250 case NetMsg::RemoveCharacterToPlayerAct: 0251 str= QStringLiteral("RemoveCharacterToPlayerAct"); 0252 break; 0253 case NetMsg::ChangePlayerPropertyAct: 0254 str= QStringLiteral("ChangePlayerPropertyAct"); 0255 break; 0256 case NetMsg::ChangeCharacterPropertyAct: 0257 str= QStringLiteral("ChangeCharacterPropertyAct"); 0258 break; 0259 default: 0260 str= QStringLiteral("Unknown Action"); 0261 break; 0262 } 0263 } 0264 else if(cat == NetMsg::CharacterSheetCategory) 0265 { 0266 switch(act) 0267 { 0268 case NetMsg::addCharacterSheet: 0269 str= QStringLiteral("addCharacterList"); 0270 break; 0271 case NetMsg::updateFieldCharacterSheet: 0272 str= QStringLiteral("moveCharacter"); 0273 break; 0274 case NetMsg::closeCharacterSheet: 0275 str= QStringLiteral("changeCharacterState"); 0276 break; 0277 default: 0278 str= QStringLiteral("Unknown Action"); 0279 break; 0280 } 0281 } 0282 else if(cat == NetMsg::InstantMessageCategory) 0283 { 0284 switch(act) 0285 { 0286 case NetMsg::InstantMessageAction: 0287 str= QStringLiteral("InstantMessageAction"); 0288 break; 0289 case NetMsg::UpdateChatAction: 0290 str= QStringLiteral("UpdateChatAction"); 0291 break; 0292 case NetMsg::RemoveChatroomAction: 0293 str= QStringLiteral("RemoveChatroomAction"); 0294 break; 0295 case NetMsg::AddChatroomAction: 0296 str= QStringLiteral("AddChatroomAction"); 0297 break; 0298 default: 0299 str= QStringLiteral("Unknown Action"); 0300 break; 0301 } 0302 } 0303 else if(cat == NetMsg::MusicCategory) 0304 { 0305 switch(act) 0306 { 0307 case NetMsg::StopSong: 0308 str= QStringLiteral("StopSong"); 0309 break; 0310 case NetMsg::PlaySong: 0311 str= QStringLiteral("PlaySong"); 0312 break; 0313 case NetMsg::PauseSong: 0314 str= QStringLiteral("PauseSong"); 0315 break; 0316 case NetMsg::NewSong: 0317 str= QStringLiteral("NewSong"); 0318 break; 0319 case NetMsg::ChangePositionSong: 0320 str= QStringLiteral("ChangePositionSong"); 0321 break; 0322 default: 0323 str= QStringLiteral("Unknown Action"); 0324 break; 0325 } 0326 } 0327 else if(cat == NetMsg::SetupCategory) 0328 { 0329 switch(act) 0330 { 0331 case NetMsg::AddFeatureAction: 0332 str= QStringLiteral("AddFeatureAction"); 0333 break; 0334 0335 default: 0336 str= QStringLiteral("Unknown Action"); 0337 break; 0338 } 0339 } 0340 else if(cat == NetMsg::CampaignCategory) 0341 { 0342 switch(act) 0343 { 0344 case NetMsg::addDiceAlias: 0345 str= QStringLiteral("addDiceAlias"); 0346 break; 0347 case NetMsg::moveDiceAlias: 0348 str= QStringLiteral("moveDiceAlias"); 0349 break; 0350 case NetMsg::removeDiceAlias: 0351 str= QStringLiteral("removeDiceAlias"); 0352 break; 0353 case NetMsg::addCharacterState: 0354 str= QStringLiteral("addCharacterState"); 0355 break; 0356 case NetMsg::moveCharacterState: 0357 str= QStringLiteral("moveCharacterState"); 0358 break; 0359 case NetMsg::removeCharacterState: 0360 str= QStringLiteral("removeCharacterState"); 0361 break; 0362 case NetMsg::CharactereStateModel: 0363 str= QStringLiteral("CharactereStateModel"); 0364 break; 0365 case NetMsg::DiceAliasModel: 0366 str= QStringLiteral("DiceAliasModel"); 0367 break; 0368 default: 0369 str= QStringLiteral("Unknown Action"); 0370 break; 0371 } 0372 } 0373 else if(cat == NetMsg::VMapCategory) 0374 { 0375 switch(act) 0376 { 0377 case NetMsg::UpdateItem: 0378 str= QStringLiteral("UpdateItem"); 0379 break; 0380 case NetMsg::AddItem: 0381 str= QStringLiteral("AddItem"); 0382 break; 0383 case NetMsg::DeleteItem: 0384 str= QStringLiteral("DeleteItem"); 0385 break; 0386 case NetMsg::DeletePoint: 0387 str= QStringLiteral("DeletePoint"); 0388 break; 0389 case NetMsg::AddPoint: 0390 str= QStringLiteral("AddPoint"); 0391 break; 0392 case NetMsg::CharacterVisionChanged: 0393 str= QStringLiteral("CharacterVisionChanged"); 0394 break; 0395 case NetMsg::CharacterStateChanged: 0396 str= QStringLiteral("CharacterStateChanged"); 0397 break; 0398 case NetMsg::CharacterChanged: 0399 str= QStringLiteral("CharacterChanged"); 0400 break; 0401 case NetMsg::SetParentItem: 0402 str= QStringLiteral("SetParentItem"); 0403 break; 0404 case NetMsg::MovePoint: 0405 str= QStringLiteral("MovePoint"); 0406 break; 0407 case NetMsg::HighLightPosition: 0408 str= QStringLiteral("HighLightPosition"); 0409 break; 0410 default: 0411 str= QStringLiteral("Unknown Action"); 0412 break; 0413 } 0414 } 0415 else if(cat == NetMsg::MediaCategory) 0416 { 0417 switch(act) 0418 { 0419 case NetMsg::AddMedia: 0420 str= QStringLiteral("AddMedia"); 0421 break; 0422 case NetMsg::UpdateMediaProperty: 0423 str= QStringLiteral("UpdateMediaProperty"); 0424 break; 0425 case NetMsg::CloseMedia: 0426 str= QStringLiteral("CloseMedia"); 0427 break; 0428 case NetMsg::AddSubImage: 0429 str= QStringLiteral("AddSubImage"); 0430 break; 0431 case NetMsg::RemoveSubImage: 0432 str= QStringLiteral("RemoveSubImage"); 0433 break; 0434 default: 0435 str= QStringLiteral("Unknown Action"); 0436 break; 0437 } 0438 } 0439 else if(cat == NetMsg::SharedNoteCategory) 0440 { 0441 switch(act) 0442 { 0443 case NetMsg::updateText: 0444 str= QStringLiteral("updateText"); 0445 break; 0446 case NetMsg::updateTextAndPermission: 0447 str= QStringLiteral("updateTextAndPermission"); 0448 break; 0449 case NetMsg::updatePermissionOneUser: 0450 str= QStringLiteral("updatePermissionOneUser"); 0451 break; 0452 0453 default: 0454 str= QStringLiteral("Unknown Action"); 0455 break; 0456 } 0457 } 0458 else if(cat == NetMsg::WebPageCategory) 0459 { 0460 switch(act) 0461 { 0462 case NetMsg::UpdateContent: 0463 str= QStringLiteral("UpdateContent"); 0464 break; 0465 default: 0466 str= QStringLiteral("Unknown Action"); 0467 break; 0468 } 0469 } 0470 else if(cat == NetMsg::MindMapCategory) 0471 { 0472 switch(act) 0473 { 0474 case NetMsg::AddMessage: 0475 str= QStringLiteral("AddMessage"); 0476 break; 0477 case NetMsg::RemoveMessage: 0478 str= QStringLiteral("RemoveMessage"); 0479 break; 0480 case NetMsg::UpdateNode: 0481 str= QStringLiteral("UpdateNode"); 0482 break; 0483 case NetMsg::UpdateLink: 0484 str= QStringLiteral("UpdateLink"); 0485 break; 0486 case NetMsg::UpdateMindMapPermission: 0487 str= QStringLiteral("UpdateMindMapPermission"); 0488 break; 0489 case NetMsg::UpdatePackage: 0490 str= QStringLiteral("UpdatePackage"); 0491 break; 0492 default: 0493 str= QStringLiteral("Unknown Action"); 0494 break; 0495 } 0496 } 0497 return str; 0498 }