1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161
|
//
// Http.h
// Player Javascript
//
// Created by Anthony Liot on 23/11/12.
//
#ifndef __HTTP_H__
#define __HTTP_H__
#include <stdarg.h>
#include <string>
/*
*/
class http {
public:
enum Status {
ST_PENDING = 0,
ST_FAILED,
ST_OK,
ST_ABORTED,
};
enum RequestType {
REQUEST_GET = 0,
REQUEST_POST ,
};
enum AssyncMode {
ASSYNC_THREAD
};
// enregistrement sur unigine
static void RegisterAsExtension(bool regis);
// Callback
static void onLoaded(unsigned handle, void* parent, const char * file);
static void onError(unsigned handle, void* parent, int statuserror);
static void onProgress(unsigned handle, void* parent, int progress);
// Constructeur
http(const char* hostname, int requestType, const char* targetFileName = "");
//Destructeur
virtual ~http();
/**
* Effectue la requete
*/
void runRequest(const char* page, int assync);
/**
* Abort the request
*/
void abortRequest();
/**
* Accede a la reponse
*/
const char* getContent();
/**
* Accede a l'erreur
*/
const char* getError();
/**
* Accede au status
*/
int getStatus();
/**
* Accede a la progression
*/
float getProgress();
/**
* Get Id of http Class
*/
int getId();
/**
*
*/
void addValue(const char* key, const char* value);
/**
* Callback
*/
void onProgress(int progress);
void onLoaded(const char* file);
void onError(int error);
// Static parameter
static int uid;
static std::string cross_domain ;
private:
// Id of request
int _uid;
// nom de l'hote
std::string _hostname;
// nom de la page
std::string _page;
// target filename
std::string _targetFileName;
// param
std::string _param;
// resultat
std::string _content;
// probleme
std::string _error;
// request type
RequestType _request;
// status
int _status;
// progress value
int _progressValue;
// mode assyncrone courant
AssyncMode _assync;
// request handle
unsigned _handle;
};
//this is safe and convenient but not exactly efficient
inline std::string format(const char* fmt, ...){
int size = 512;
char* buffer = 0;
buffer = new char[size];
va_list vl;
va_start(vl,fmt);
int nsize = vsnprintf(buffer,size,fmt,vl);
if(size<=nsize){//fail delete buffer and try again
delete buffer; buffer = 0;
buffer = new char[nsize+1];//+1 for /0
nsize = vsnprintf(buffer,size,fmt,vl);
}
std::string ret(buffer);
va_end(vl);
delete buffer;
return ret;
}
#endif /* __HTTP_H__ */
|