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 }