00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
#ifndef _CCOMMUNICATIONHANDLER
00028
#define _CCOMMUNICATIONHANDLER
00029
#include "libMRML/include/uses-declarations.h"
00030
00031
#include <expat.h>
00032
00033
#include "libMRML/include/CAttributeList.h"
00034
00035
00036
#include "libMRML/include/CSessionManager.h"
00037
#include "libMRML/include/CXMLElement.h"
00038
#include <functional>
00039
#include <iostream>
00040
#include <fstream>
00041
#include "libMRML/include/CMutex.h"
00042
00044
extern void startMRMLElement(
void *userData,
00045
const char *inElementName,
00046
const char **inAttributes);
00047
extern void endMRMLElement(
void *userData,
const char *name);
00048
00052 class CCommunicationHandler{
00053
00058
CSelfDestroyPointer<CXMLElement> mDocumentRoot;
00059
00062 XML_Parser mParser;
00063
00066
CSessionManager& mSessionManager;
00072
CAlgorithm* mAlgorithmTree;
00077
CSelfDestroyPointer<CXMLElement> mCurrentTree;
00078
00084 string mPeerAddressString;
00085
00086
public:
00094 CSelfDestroyPointer<CXMLElement> mMultiResponse;
00095
00096
protected:
00103 int mQueryAtRandomCount;
00104
protected:
00106 int mSocket;
00110 ofstream&
mLog;
00111
public:
00112
00114
00116
void setSocket(
int inSocket);
00117
00118
00120
00122 string
preamble();
00123
00124
00125
00127 string
frame(
const string& inSession,
00128
const string& inString);
00129
00130
00131
00133 string
toAttribute(string inName,
00134 string inString);
00135
00136
00137 string
toAttribute(string inName,
00138
int inInt);
00139
00140
00141 string
toAttribute(string inName,
00142
double inFloat);
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00155
int sendError(
const string& inSession,
00156
const string& inMessage);
00157
00158
00160
void openSession(
const string& inUserName,
00161
const string& inSessionName);
00163
void renameSession(
const string& inSessionID,
00164
const string& inNewName);
00165
00167
void deleteSession(
const string& inName);
00168
00169
00172
void getPropertySheet(
const string& inSessionID,
00173
const string& inAlgorithmID);
00174
00176
int sendHandshake(
const string& inUser);
00177
00179
void getSessions(
const string& inUser);
00181
void getCollections();
00183
void getAlgorithms();
00184
00186
int sendResult(
const string& inSession,
00187
const CXMLElement& inRLL);
00188
00189
00190
00192
int sendRandomImages(
const string& inSession,
00193
const string& inAlgorithm,
00194
const string& inCollection,
00195
const string& inNumberOfImages) ;
00196 ;
00197
00198
00199
00201
00202 CXMLElement*
gQueryImages;
00203 string mSessionID;
00204
int mResultSize;
00205
double mCutoff;
00206 string mCollection;
00207 string mAlgorithm;
00208
00209
00211
void setResultSize(
int inResultSize);
00212
00213
00214
void setResultCutoff(
const string& inCutoff);
00215
00216
void setResultCutoff(
double inCutoff);
00217
00218
00219
void setCollectionID(
const string& inID);
00220
00221
00222
void setAlgorithmID(
const string& inID);
00223
00224
00227
void startTreeBuilding(
const char* inElementName,
00228
const char*
const*
const inAttributes);
00231
void addToCurrentTree(
const char* inElementName,
00232
const char*
const*
const inAttributes);
00236
void moveUpCurrentTree();
00240
bool isBuildingTree()const;
00241
00242
00244
00245
void parseString(const string& inMessage);
00246
00247
00248
00258
void clearAlgorithmElement();
00259
00272
00273
void startAlgorithmElement(const
char* inName,
00274 const
char* const* const inAttributes);
00275
00279
00280
void endAlgorithmElement();
00281
00285
00286
void initAlgorithmElement();
00287
00290
00291
CAlgorithm* readAlgorithmElement();
00292
00298
void endConfiguration();
00299
00300
00304 bool mParsingFinished;
00305
void clearParsingFinished();
00306
void setParsingFinished();
00307
bool isParsingFinished()const;
00308
00309
bool readAndParse();
00310
00311
00312
00313
void makeParser();
00314
00315
00329
void startMultiRequest(const string& inSessionID, const string& inLanguageCode="en");
00331
void endMultiRequest();
00335
void addToMultiResponse(
CXMLElement* inElement);
00336
00337
00338
00339
00342
00343
CSessionManager& getSessionManager();
00344
00346
void incrementQueryAtRandomCount();
00348
int getQueryAtRandomCount()const;
00349
00359
void setPeerAddressString(string);
00361 const string& getPeerAddressString()const;
00362
00363
00365
00366
CCommunicationHandler(
CSessionManager& inSessionManager,
00367 ofstream& inLogFile);
00368
00369 ~
CCommunicationHandler();
00370 };
00371
00372
00373 #endif