00001 #ifndef CLIENTDATARECERVER_H_ 00002 #define CLIENTDATARECERVER_H_ 00003 #include "BaseConfigFile.h" 00004 #include "ServerConfig.h" 00005 #include <map> 00006 #include <list> 00007 #include <vector> 00008 #include <string> 00009 #include "XML/Server.h" 00010 //Модуль обработки запросов между сервером и клиентом 00011 //Он вызывает опердиленные модули для обработки каждой из пришедших станз, для сервера модули будут выполнять 00012 //Действия над файлами, для клиента операции над ФС через Fuse 00013 00014 typedef void* funcGetData(int datacount); 00015 typedef void funcSendData(void* data, int datacount); 00016 //Указатель такого типа обрабатывает вызовы всех станз, модуль сам должен их заполнить в список и после прихода станзы 00017 //вызывается каждый раз последовательно до тех пор пока не будет возвращено значение true 00018 typedef bool moduleFunc(void* stanza, funcSendData *sendd,funcGetData *getd); 00019 typedef list<moduleFunc*> moduleFuncListType; 00020 //Тип вызывается при нахождении файла 00021 typedef void findedFileT(char * filename); 00022 //Функция расширений принимает данные профодит их через расширение передает дальше. 00023 //typedef extendFunc(datain char* ); 00024 //Расширения 00025 struct ExtendInfo{ 00026 int number;//Порядковый номер расширения, в последовательности как они обрабатываются 00027 00028 }; 00029 class ClientServerDataTransfer; 00030 //Структура передается в каждый поток где обрабатывается каждый подключеный клиент 00031 struct ThreadStruct{ 00032 ClientServerDataTransfer* self;//Сам класс внутри которого преедача данных 00033 int clientSocket;//Сокет через который конкретный клиент будет совершать подключения 00034 unsigned int clientIP; //IP адрес клиента с которым в данный момент соединены 00035 }; 00036 00037 class ClientServerDataTransfer{ 00038 protected: 00039 //Расширения которыеидут поверх протокола 00040 //Название расширения 00041 //map<String name, > 00042 // map<String stanza,moduleFunc*> moduleFuncMap; 00043 //Список функций обрабатывающих станзы 00044 moduleFuncListType moduleFuncList; 00045 //Конфигурационный файл сервера, он же будет передаваться во все расширения чтобы они могли прочесть необходимые им данные из конфигурационнного файла 00046 ServerConfig* conf; 00047 void findModules(){};//Поиск модулей 00048 void findExtends(){};//поиск расширений 00049 //Метод для поиска файлов и добавления их в списки модулей и в списки расширений 00050 void findFiles(char* path, findedFileT * file); 00051 //Список экземпляров протокола для клиентов подключенных к серверу 00052 list <Server*/*<ClientServerDataTransfer>*/> connectionList; 00053 public: 00054 //Выполняет поиск модулей и регистрирует вызовы их для обработки станз, ожидает подключение клиентов. 00055 //Модули передают в класс указатель на функцию, которая обрабатывает станзу, ей передается станза и 00056 //2 метода один для чтения данных жругой для записи ответов, 00057 //и она возвращает логическое значение принимает ли модуль данную станзу. 00058 //В которую передается, если не принимает то производится поиск следующего модуля. 00059 //Так же тут должны быть расширения такие как методы, аутентификации, сжатия, шифрования. 00060 ClientServerDataTransfer(ServerConfig& c); 00061 void waiteClentConnections();//Метод который ожидает подключения клиентов 00062 //Выполняет последовательно чтение целой станзы и вызывает каждый модуль до тех пор, 00063 // пока станза не будет отвергнута всеми, либо не найдется такой модуль который ее примет 00064 void recevedStanza(Node* stanza); 00065 void moduleProcess(); 00066 virtual ~ClientServerDataTransfer(); 00067 }; 00068 00069 #endif /*CLIENTDATARECERVER_H_*/
1.7.1