From cb6661b10d989b2c716b467f23414a54b66e1905 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Fri, 14 Feb 2014 18:36:15 +0100 Subject: [PATCH] Fix for excessive inlining of npc chat serialization, issue #97 --- .../ryzom/common/src/game_share/send_chat.cpp | 186 ++++++++++++++++++ code/ryzom/common/src/game_share/send_chat.h | 117 +---------- 2 files changed, 196 insertions(+), 107 deletions(-) create mode 100644 code/ryzom/common/src/game_share/send_chat.cpp diff --git a/code/ryzom/common/src/game_share/send_chat.cpp b/code/ryzom/common/src/game_share/send_chat.cpp new file mode 100644 index 000000000..064e223fe --- /dev/null +++ b/code/ryzom/common/src/game_share/send_chat.cpp @@ -0,0 +1,186 @@ +// Ryzom - MMORPG Framework +// Copyright (C) 2010 Winch Gate Property Limited +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero 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 Affero General Public License for more details. +// +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +#include "nel/misc/types_nl.h" +#include "send_chat.h" + +/** + * Send a chat line from system to a player that will be displayed as a normal chat sentence + * Sentence will be formated using "" as prefix of chat string + */ +void chatToPlayer(const NLMISC::CEntityId &id, const std::string &chatString) +{ + NLNET::CMessage msgout("CHAT"); + bool talkToPlayer = true; + msgout.serial(talkToPlayer, const_cast(id), const_cast(chatString)); + sendMessageViaMirror("IOS", msgout); +} + +/** + * Send a chat line from system to a group of player that will be displayed as a normal chat sentence + * Sentence will be formated using "" as prefix of chat string + */ +void chatToGroup(const NLMISC::CEntityId &id, const std::string &chatString) +{ + NLNET::CMessage msgout("CHAT"); + bool talkToPlayer = false; + msgout.serial(talkToPlayer, const_cast(id), const_cast(chatString)); + sendMessageViaMirror("IOS", msgout); +} + +/** + * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group). + * Chat group can be constructed from CChatGroup class. + * phraseId is a phrase identifier in the phrase translation file. + * param are the parameter of the phrase + */ +void npcChatParamToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId, const std::vector ¶ms) +{ + NLNET::CMessage msgout("NPC_CHAT_PARAM"); + msgout.serial(const_cast(senderId)); + msgout.serialEnum(groupType); + msgout.serial(const_cast(phraseId)); + + uint32 size = (uint32)params.size(); + msgout.serial(size); +// params.resize(size); + for ( uint i = 0; i < size; i++ ) + { + uint8 type8 = params[i].Type; + msgout.serial( type8 ); + const_cast(params[i]).serialParam( false, msgout, (STRING_MANAGER::TParamType) type8 ); + } + + sendMessageViaMirror("IOS", msgout); +} + +/** + * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group). + * Chat group can be constructed from CChatGroup class. + * phraseId is a phrase identifier in the phrase translation file. + */ +void npcChatToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId) +{ + NLNET::CMessage msgout("NPC_CHAT"); + msgout.serial(const_cast(senderId)); + msgout.serialEnum(groupType); + msgout.serial(const_cast(phraseId)); + sendMessageViaMirror("IOS", msgout); +} + + +/** + * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group). + * Chat group can be constructed from CChatGroup class. + * phraseId is a phrase identifier in the phrase translation file. + */ +void npcChatToChannelEx(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, uint32 phraseId) +{ + NLNET::CMessage msgout("NPC_CHAT_EX"); + msgout.serial(const_cast(senderId)); + msgout.serialEnum(groupType); + msgout.serial(phraseId); + sendMessageViaMirror("IOS", msgout); +} + +/** + * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group). + * Chat group can be constructed from CChatGroup class. + * sentence is the sentence to be sent. + */ +void npcChatToChannelSentence(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, ucstring& sentence) +{ + NLNET::CMessage msgout("NPC_CHAT_SENTENCE"); + msgout.serial(const_cast(senderId)); + msgout.serialEnum(groupType); + msgout.serial(sentence); + sendMessageViaMirror("IOS", msgout); +} + +/** + * Request to the DSS to send a chat line from a bot in a chat channel + * Chat group can be constructed from CChatGroup class. + * sentenceId is the id of the sentence that must be sent by the DSS + */ +void forwardToDss(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId) +{ + nlinfo( ("forwarding to DSS : id: "+sentenceId).c_str()); + NLNET::CMessage msgout("translateAndForward"); + msgout.serial(const_cast(senderId)); + msgout.serialEnum(groupType); + msgout.serial(sentenceId); + msgout.serial(scenarioId); + NLNET::CUnifiedNetwork::getInstance()->send("DSS",msgout); +} + +/** + * Request to the DSS to send a chat line from a bot in a chat channel + * Chat group can be constructed from CChatGroup class. + * sentenceId is the id of the sentence that must be sent by the DSS + */ +void forwardToDssArg(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId,std::vector& argValues) +{ + nlinfo( ("forwarding to DSS : id: "+sentenceId).c_str()); + NLNET::CMessage msgout("translateAndForwardArg"); + msgout.serial(const_cast(senderId)); + msgout.serialEnum(groupType); + msgout.serial(sentenceId); + msgout.serial(scenarioId); + uint32 size=(uint32)argValues.size(),i=0; + msgout.serial(size); + for(;isend("DSS",msgout); +} + +/** + * Send a tell line from a bot (mainly NPC) to a player + * phraseId is a phrase identifier in the phrase translation file. + */ +void npcTellToPlayer(const TDataSetRow &senderId, const TDataSetRow &receiverId, const std::string &phraseId, bool needSenderNpc) +{ + NLNET::CMessage msgout; + if ( needSenderNpc ) + { + msgout.setType("NPC_TELL"); + msgout.serial(const_cast(senderId)); + } + else + { + msgout.setType("GHOST_TELL"); + } + msgout.serial(const_cast(receiverId)); + msgout.serial(const_cast(phraseId)); + sendMessageViaMirror("IOS", msgout); +} + + +/** + * Send a tell line from a bot (mainly NPC) to a player. Accept parametered strings + * phraseId is a phrase id obtained through the string manager + */ +void npcTellToPlayerEx(const TDataSetRow &senderId, const TDataSetRow &receiverId, uint32 phraseId) +{ + NLNET::CMessage msgout("NPC_TELL_EX"); + msgout.serial(const_cast(senderId)); + msgout.serial(const_cast(receiverId)); + msgout.serial(phraseId); + sendMessageViaMirror("IOS", msgout); +} + +/* End of send_chat.cpp */ diff --git a/code/ryzom/common/src/game_share/send_chat.h b/code/ryzom/common/src/game_share/send_chat.h index a6b8bd364..1acc9799e 100644 --- a/code/ryzom/common/src/game_share/send_chat.h +++ b/code/ryzom/common/src/game_share/send_chat.h @@ -35,25 +35,13 @@ * Send a chat line from system to a player that will be displayed as a normal chat sentence * Sentence will be formated using "" as prefix of chat string */ -inline void chatToPlayer(const NLMISC::CEntityId &id, const std::string &chatString) -{ - NLNET::CMessage msgout("CHAT"); - bool talkToPlayer = true; - msgout.serial(talkToPlayer, const_cast(id), const_cast(chatString)); - sendMessageViaMirror("IOS", msgout); -} +void chatToPlayer(const NLMISC::CEntityId &id, const std::string &chatString); /** * Send a chat line from system to a group of player that will be displayed as a normal chat sentence * Sentence will be formated using "" as prefix of chat string */ -inline void chatToGroup(const NLMISC::CEntityId &id, const std::string &chatString) -{ - NLNET::CMessage msgout("CHAT"); - bool talkToPlayer = false; - msgout.serial(talkToPlayer, const_cast(id), const_cast(chatString)); - sendMessageViaMirror("IOS", msgout); -} +void chatToGroup(const NLMISC::CEntityId &id, const std::string &chatString); /** * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group). @@ -61,39 +49,14 @@ inline void chatToGroup(const NLMISC::CEntityId &id, const std::string &chatStri * phraseId is a phrase identifier in the phrase translation file. * param are the parameter of the phrase */ -inline void npcChatParamToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId, const std::vector ¶ms) -{ - NLNET::CMessage msgout("NPC_CHAT_PARAM"); - msgout.serial(const_cast(senderId)); - msgout.serialEnum(groupType); - msgout.serial(const_cast(phraseId)); - - uint32 size = (uint32)params.size(); - msgout.serial(size); -// params.resize(size); - for ( uint i = 0; i < size; i++ ) - { - uint8 type8 = params[i].Type; - msgout.serial( type8 ); - const_cast(params[i]).serialParam( false, msgout, (STRING_MANAGER::TParamType) type8 ); - } - - sendMessageViaMirror("IOS", msgout); -} +void npcChatParamToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId, const std::vector ¶ms); /** * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group). * Chat group can be constructed from CChatGroup class. * phraseId is a phrase identifier in the phrase translation file. */ -inline void npcChatToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId) -{ - NLNET::CMessage msgout("NPC_CHAT"); - msgout.serial(const_cast(senderId)); - msgout.serialEnum(groupType); - msgout.serial(const_cast(phraseId)); - sendMessageViaMirror("IOS", msgout); -} +void npcChatToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, const std::string &phraseId); /** @@ -101,101 +64,41 @@ inline void npcChatToChannel(const TDataSetRow &senderId, CChatGroup::TGroupType * Chat group can be constructed from CChatGroup class. * phraseId is a phrase identifier in the phrase translation file. */ -inline void npcChatToChannelEx(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, uint32 phraseId) -{ - NLNET::CMessage msgout("NPC_CHAT_EX"); - msgout.serial(const_cast(senderId)); - msgout.serialEnum(groupType); - msgout.serial(phraseId); - sendMessageViaMirror("IOS", msgout); -} +void npcChatToChannelEx(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, uint32 phraseId); /** * Send a chat line from a bot (mainly NPC) in a chat channel (know as chat group). * Chat group can be constructed from CChatGroup class. * sentence is the sentence to be sent. */ -inline void npcChatToChannelSentence(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, ucstring& sentence) -{ - NLNET::CMessage msgout("NPC_CHAT_SENTENCE"); - msgout.serial(const_cast(senderId)); - msgout.serialEnum(groupType); - msgout.serial(sentence); - sendMessageViaMirror("IOS", msgout); -} +void npcChatToChannelSentence(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, ucstring& sentence); /** * Request to the DSS to send a chat line from a bot in a chat channel * Chat group can be constructed from CChatGroup class. * sentenceId is the id of the sentence that must be sent by the DSS */ -inline void forwardToDss(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId) -{ - nlinfo( ("forwarding to DSS : id: "+sentenceId).c_str()); - NLNET::CMessage msgout("translateAndForward"); - msgout.serial(const_cast(senderId)); - msgout.serialEnum(groupType); - msgout.serial(sentenceId); - msgout.serial(scenarioId); - NLNET::CUnifiedNetwork::getInstance()->send("DSS",msgout); -} +void forwardToDss(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId); /** * Request to the DSS to send a chat line from a bot in a chat channel * Chat group can be constructed from CChatGroup class. * sentenceId is the id of the sentence that must be sent by the DSS */ -inline void forwardToDssArg(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId,std::vector& argValues) -{ - nlinfo( ("forwarding to DSS : id: "+sentenceId).c_str()); - NLNET::CMessage msgout("translateAndForwardArg"); - msgout.serial(const_cast(senderId)); - msgout.serialEnum(groupType); - msgout.serial(sentenceId); - msgout.serial(scenarioId); - uint32 size=(uint32)argValues.size(),i=0; - msgout.serial(size); - for(;isend("DSS",msgout); -} +void forwardToDssArg(const TDataSetRow &senderId, CChatGroup::TGroupType groupType, std::string& sentenceId,uint32 scenarioId,std::vector& argValues); /** * Send a tell line from a bot (mainly NPC) to a player * phraseId is a phrase identifier in the phrase translation file. */ -inline void npcTellToPlayer(const TDataSetRow &senderId, const TDataSetRow &receiverId, const std::string &phraseId, bool needSenderNpc=true) -{ - NLNET::CMessage msgout; - if ( needSenderNpc ) - { - msgout.setType("NPC_TELL"); - msgout.serial(const_cast(senderId)); - } - else - { - msgout.setType("GHOST_TELL"); - } - msgout.serial(const_cast(receiverId)); - msgout.serial(const_cast(phraseId)); - sendMessageViaMirror("IOS", msgout); -} +void npcTellToPlayer(const TDataSetRow &senderId, const TDataSetRow &receiverId, const std::string &phraseId, bool needSenderNpc=true); /** * Send a tell line from a bot (mainly NPC) to a player. Accept parametered strings * phraseId is a phrase id obtained through the string manager */ -inline void npcTellToPlayerEx(const TDataSetRow &senderId, const TDataSetRow &receiverId, uint32 phraseId) -{ - NLNET::CMessage msgout("NPC_TELL_EX"); - msgout.serial(const_cast(senderId)); - msgout.serial(const_cast(receiverId)); - msgout.serial(phraseId); - sendMessageViaMirror("IOS", msgout); -} +void npcTellToPlayerEx(const TDataSetRow &senderId, const TDataSetRow &receiverId, uint32 phraseId); #endif // SEND_CHAT_H