Я в целях обучения пишу протокол клиент-сервер UDP на c ++, где связь между серверным компонентом моего приложения и остальной частью приложения осуществляется с помощью обработчиков.
Например, я мог бы зарегистрировать компонент Authorization для значения 1, а компонент TextMessage для значения 2. Затем клиент сначала отправляет одно или два сообщения в компонент Authorization для входа в систему, а затем начинает отправку текстовых сообщений в обработчик TextMessage. .
Вот что у меня сейчас:
class NetworkHandler {
virtual void handleMessage(const endpoint & endpoint, const buffer & message) = 0;
};
Любой класс, который хочет зарегистрироваться в качестве компонента, просто создает подкласс NetworkHandler и вызывает
udpServer.addHandler(handler);
Тем не менее, у меня есть несколько проблем с решением, как я должен передать обработчики, будучи новичком и все.
Должен ли я передать обработчик по ссылке? Это легко и удобно, но в игру вступает вопрос о праве собственности - вызывающей функции, вероятно, не нужно беспокоиться о том, чтобы хранить ссылки без причины.
Должен ли я скопировать обработчик? Это также легко и удобно, но здесь возникает вопрос, является ли мой обработчик копируемым или нужно ли мне сохранять ссылку на мой обработчик вне класса.
Что меня интересует, так это то, что является наилучшей практикой для такого рода ситуаций? Извините за стену текста.