ClientServerDataTransfer.h

См. документацию.
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_*/