AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
Acore::Impl::ChatCommands::CommandInvoker Struct Reference

#include "ChatCommand.h"

Public Member Functions

 CommandInvoker ()
 
template<typename TypedHandler >
 CommandInvoker (TypedHandler &handler)
 
 CommandInvoker (bool(&handler)(ChatHandler *, char const *))
 
 operator bool () const
 
bool operator() (ChatHandler *chatHandler, std::string_view args) const
 

Private Types

using wrapper_func = bool(void *, ChatHandler *, std::string_view)
 

Private Attributes

wrapper_func_wrapper
 
void * _handler
 

Detailed Description

Member Typedef Documentation

◆ wrapper_func

using Acore::Impl::ChatCommands::CommandInvoker::wrapper_func = bool(void*, ChatHandler*, std::string_view)
private

Constructor & Destructor Documentation

◆ CommandInvoker() [1/3]

Acore::Impl::ChatCommands::CommandInvoker::CommandInvoker ( )
inline
122: _wrapper(nullptr), _handler(nullptr) {}
wrapper_func * _wrapper
Definition: ChatCommand.h:165
void * _handler
Definition: ChatCommand.h:166

◆ CommandInvoker() [2/3]

template<typename TypedHandler >
Acore::Impl::ChatCommands::CommandInvoker::CommandInvoker ( TypedHandler &  handler)
inline
125 {
126 _wrapper = [](void* handler, ChatHandler* chatHandler, std::string_view argsStr)
127 {
128 using Tuple = TupleType<TypedHandler>;
129
130 Tuple arguments;
131 std::get<0>(arguments) = chatHandler;
132 ChatCommandResult result = ConsumeFromOffset<Tuple, 1>(arguments, chatHandler, argsStr);
133 if (result)
134 return std::apply(reinterpret_cast<TypedHandler*>(handler), std::move(arguments));
135 else
136 {
137 if (result.HasErrorMessage())
138 SendErrorMessageToHandler(chatHandler, result.GetErrorMessage());
139 return false;
140 }
141 };
142 _handler = reinterpret_cast<void*>(handler);
143 }
AC_GAME_API void SendErrorMessageToHandler(ChatHandler *handler, std::string_view str)
Definition: ChatCommandHelpers.cpp:22
Definition: Chat.h:38
Definition: ChatCommandHelpers.h:101
bool HasErrorMessage() const
Definition: ChatCommandHelpers.h:116
std::string const & GetErrorMessage() const
Definition: ChatCommandHelpers.h:117

References _handler, _wrapper, Acore::Impl::ChatCommands::ChatCommandResult::GetErrorMessage(), Acore::Impl::ChatCommands::ChatCommandResult::HasErrorMessage(), and Acore::Impl::ChatCommands::SendErrorMessageToHandler().

◆ CommandInvoker() [3/3]

Acore::Impl::ChatCommands::CommandInvoker::CommandInvoker ( bool(&)(ChatHandler *, char const *)  handler)
inline
145 {
146 _wrapper = [](void* handler, ChatHandler* chatHandler, std::string_view argsStr)
147 {
148 // make a copy of the argument string
149 // legacy handlers can destroy input strings with strtok
150 std::string argsStrCopy(argsStr);
151 return reinterpret_cast<bool(*)(ChatHandler*, char const*)>(handler)(chatHandler, argsStrCopy.c_str());
152 };
153 _handler = reinterpret_cast<void*>(handler);
154 }

References _handler, and _wrapper.

Member Function Documentation

◆ operator bool()

Acore::Impl::ChatCommands::CommandInvoker::operator bool ( ) const
inlineexplicit
156{ return (_wrapper != nullptr); }

References _wrapper.

◆ operator()()

bool Acore::Impl::ChatCommands::CommandInvoker::operator() ( ChatHandler chatHandler,
std::string_view  args 
) const
inline
158 {
160 return _wrapper(_handler, chatHandler, args);
161 }
#define ASSERT
Definition: Errors.h:68

References _handler, _wrapper, and ASSERT.

Member Data Documentation

◆ _handler

void* Acore::Impl::ChatCommands::CommandInvoker::_handler
private

Referenced by CommandInvoker(), and operator()().

◆ _wrapper

wrapper_func* Acore::Impl::ChatCommands::CommandInvoker::_wrapper
private