Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C++ Создание списка команд

57K
23 сентября 2012 года
Cr3a70r
7 / / 14.06.2010
Всем привет! Помогите разобраться с поставленной задачей, я уже не знаю что и как лучше делать..
В общем есть класс NEServer - который отвечает за подключение клиента по сокету и у него есть функция Shell, которая обрабатывает полученные данные от клиента.
Мне нужно сделать список команд, полученных от клиентов и в другом месте их выполнять/обрабатывать и некий результат обратно отправлять.
Т.е. есть интерфейс команды:

 
Код:
class ICommand
{
public:
    virtual ~ICommand()
    {

    }
    virtual bool Execute(...)=0;
};
и должен быть список в который добавляются команды, унаследованные от этого интерфейса, затем в другой части программы(отдельный поток) выполняет собранные команды
Каким образом лучше это реализовать? Или вобще стоит взять другую архитектуру обработки команд?
57K
23 сентября 2012 года
Cr3a70r
7 / / 14.06.2010
Суть задачи в общем-то состоит в том, что бы получать данные по сокету и их обрабатывать, выполнять разными компонентами прогрммы(т.к. Database, Resource, Html)
414
23 сентября 2012 года
CassandraDied
763 / / 24.05.2012
Для "команды" можно не делать интерфейса, как мне кажется, достаточно простого перечисления и аргумента, то есть:

Код:
class Command
{
    private:
    CmdEnum _cmd;
    string  _arg;
             public:
    Command(CmdEnum cmd, string arg);
    ~Command();
             CmdEnum GetCommand();
             string* GetArg();
}
Список нужен для сессий. Как только пользователь подключается и передаёт команду, сервер заполняет структуру Command и передаёт её какому-нибудь Execut'ору в новом потоке.
Execut'ор вызовет callback, который передаст результат пользователю.
Очередь для команд необходима в том месте, где будет заполняться структура Command. В случае, если в данный момент для определённой сессии выполняется команда, то поставить новую в очередь.
Тогда на callback возлаживается две функции: первая - сбрасывать флаг выполнения команды в текущий момент, вторая - запускать проверку, находятся ли в очереди ещё команды для определённой сессии.
Все команды получатся однородными - это какой-то Enum, обозначающий действие и строка - аргументы команды, которые можно парсить и отдавать, как массив аргументов.
Схему нарисовать? :)
57K
23 сентября 2012 года
Cr3a70r
7 / / 14.06.2010
Цитата: CassandraDied
Для "команды" можно не делать интерфейса, как мне кажется, достаточно простого перечисления и аргумента, то есть:

Код:
class Command
{
    private:
    CmdEnum _cmd;
    string  _arg;
             public:
    Command(CmdEnum cmd, string arg);
    ~Command();
             CmdEnum GetCommand();
             string* GetArg();
}
Список нужен для сессий. Как только пользователь подключается и передаёт команду, сервер заполняет структуру Command и передаёт её какому-нибудь Execut'ору в новом потоке.
Execut'ор вызовет callback, который передаст результат пользователю.
Очередь для команд необходима в том месте, где будет заполняться структура Command. В случае, если в данный момент для определённой сессии выполняется команда, то поставить новую в очередь.
Тогда на callback возлаживается две функции: первая - сбрасывать флаг выполнения команды в текущий момент, вторая - запускать проверку, находятся ли в очереди ещё команды для определённой сессии.
Все команды получатся однородными - это какой-то Enum, обозначающий действие и строка - аргументы команды, которые можно парсить и отдавать, как массив аргументов.
Схему нарисовать? :)



Как вариант мне нравится, а вот что с быстродействием?

414
23 сентября 2012 года
CassandraDied
763 / / 24.05.2012
Быстродействие зависит от реализации метода, который будет выполнять команду. Все остальные части нересурсоёмки.
Если быстродействие относится к тому, как сервер будет обрабатывать запросы нескольких пользователей одновременно, то моё представление не учитывает этой части. Тут нужно специальную литературу почитать по написанию многопоточных серверов...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог