Серверное клиентское приложение, у меня возникают проблемы с продуманным способом обработки клиентских данных на стороне сервера.

У меня есть серверное клиентское приложение, написанное на C++ в Linux. Когда клиент подключается к моему серверу, сервер порождает поток, который ждет, пока клиент отправит команды сервера для выполнения. Команды зависят от ОС. поток, с которым клиент общается с сервером, вызывает глобальные функции, которые выполняют требуемую команду, которую хочет клиент. Поэтому мне нужно иметь две функции для каждой зависимой от ОС команды, которую клиент отправляет на сервер для выполнения. Все эти глобальные функции определены в том же заголовке, что и функция основного потока. Это становится немного грязным со всеми этими функциями для разных ОС. Моя идея состоит в том, чтобы написать два класса, которые называются WindowsFuncs и LinuxFuncs, которые имеют статические функции-члены, которые выполняют необходимую команду для той ОС, для которой был разработан класс. Каковы некоторые из идей stackrus о том, как очистить мою логику?

1 ответ

Решение

Это не похоже на проблему с потоками. Похоже, вы можете использовать простое наследование.

Используя что-то вроде

abstract class OSMethods {
  void listDir();
}

class OSMethodsLinux : OSMethods {
  void listDir() { system.exec("ls"); }
} 
class OSMethodsWin : OSMethods {
  void listDir() { system.exec("dir"); }
}

Тогда код обработки клиентского сервера имеет такой метод

  void accept(Socket s, OSMethods m) {
     s.readCommand();
     m.listDir();  // or whatever
  }

Убедитесь, что вы передали правильный экземпляр для принятия класса Linux или Win. Так что никаких статических методов.

Вообще я обнаружил, что вам не понадобятся статические методы в ваших программах (кроме основных), если вы не делаете умные вещи, большинство вещей просто не нуждаются в них, и они приводят к менее гибкому дизайну.

Другие вопросы по тегам