Серверное клиентское приложение, у меня возникают проблемы с поиском чистого способа обработки клиентских данных на стороне сервера - PullRequest
0 голосов
/ 11 декабря 2010

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

1 Ответ

0 голосов
/ 11 декабря 2010

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

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

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. Так что никаких статических методов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...