123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- /** @file */
- // -------------------------------------------------------------------------
- // states, (result + error) codes
- // defined in C++
- enum ERestResultState
- {
- EREST_EMPTY, // not initialized
- EREST_PENDING, // awaiting processing
- EREST_FEEDING, // awaiting incoming data
- EREST_SUCCESS, // result and/ or data are ready (success), awaiting data processing to be finished (no longer blocking queue processing)
- EREST_PROCESSED, // finished (either successfully or with failure) and eill be removed ASAP
- EREST_ERROR, // (state >= EREST_ERROR) == error happened
- EREST_ERROR_CLIENTERROR, // (EREST_ERROR == EREST_ERROR_CLIENTERROR)
- EREST_ERROR_SERVERERROR,
- EREST_ERROR_APPERROR,
- EREST_ERROR_TIMEOUT,
- EREST_ERROR_NOTIMPLEMENTED,
- EREST_ERROR_UNKNOWN,
- };
- // -------------------------------------------------------------------------
- // options
- // defined in C++
- enum ERestOption
- {
- ERESTOPTION_UNKNOWN, // invalid option
- ERESTOPTION_READOPERATION, // read operation timeout (default 10sec)
- ERESTOPTION_CONNECTION, // connection timeout (default 10sec)
- // note: limit for timeout is between <3 .. 120> seconds, you cannot exceed this value
- };
- // -------------------------------------------------------------------------
- // object to be used from script for result binding
- //
- // [Example:]
- //
- // RestCallback cbx1 = new RestCallback;
- // RestContext ctx = GetRestApi().GetRestContext("http://somethingsomewhere.com/path/");
- // ctx.GET(cbx1,"RequestPath?Argument=Something");
- //
- // Event are then called upon RestCallback()
- //
- class RestCallback : Managed
- {
- /**
- \brief Called in case request failed (ERestResultState) - Note! May be called multiple times in case of (RetryCount > 1)
- */
- void OnError( int errorCode )
- {
- // override this with your implementation
- Print(" !!! OnError() ");
- };
- /**
- \brief Called in case request timed out or handled improperly (no error, no success, no data)
- */
- void OnTimeout()
- {
- // override this with your implementation
- Print(" !!! OnTimeout() ");
- };
- /**
- \brief Called when data arrived and/ or response processed successfully
- */
- void OnSuccess( string data, int dataSize )
- {
- // override this with your implementation
- Print(" !!! OnSuccess() size=" + dataSize );
- if( dataSize > 0 )
- Print(data); // !!! NOTE: Print() will not output string longer than 1024b, check your dataSize !!!
- };
- /**
- \brief Called when data arrived and/ or file created successfully
- */
- void OnFileCreated( string fileName, int dataSize )
- {
- // override this with your implementation
- Print(" !!! OnFileCreated() file=" + fileName + " size=" + dataSize );
- };
- };
- // -------------------------------------------------------------------------
- // context API and request API
- class RestContext
- {
- private void RestContext() {}
- private void ~RestContext() {}
-
- /**
- \brief Processes GET request and returns result (ERestResultState) and/ or data (timeout, error) when finished
- */
- proto native int GET( RestCallback cb, string request );
- /**
- \brief Processes GET request and returns data immediately (thread blocking operation!)
- */
- proto native string GET_now( string request );
- /**
- \brief Processes GET request and returns result (ERestResultState) and/ or stores data int specified file (timeout, error) when finished
- */
- proto native int FILE( RestCallback cb, string request, string filename );
- /**
- \brief Processes GET request and returns result (ERestResultState) and/ stores data int specified file immediately (thread blocking operation!)
- */
- proto native int FILE_now( string request, string filename );
- /**
- \brief Pushes POST request and returns result (ERestResultState) and/ or data (timeout, error) when finished
- */
- proto native int POST( RestCallback cb, string request, string data );
- /**
- \brief Processes POST request and returns data immediately (thread blocking operation!)
- */
- proto native string POST_now( string request, string data );
- /**
- \brief Clear all pending requests and buffers
- */
- proto native void reset();
- /**
- \brief Set Content-Type header (string)
-
- default content type is "application/octet-stream"
- but you can specify whatever you like, for example "application/json" "application/sql" "text/plain"
- */
- proto native void SetHeader( string value );
- };
- // -------------------------------------------------------------------------
- // RestApi core for context create/ access + debug features
- class RestApi
- {
- private void RestApi() {}
- private void ~RestApi() {}
- /**
- \brief Get new or existing context for http comm GetRestContext("www.server915.com/interface/")
- */
- proto native RestContext GetRestContext( string serverURL );
-
- /**
- \brief Get count of registered contexes
- */
- proto native int GetContextCount();
- /**
- \brief Enable debug output to console (disabled by default)
- */
- proto native void EnableDebug( bool bEnable );
- /**
- \brief List of all currently active contexes and processed (pending) requests
- */
- proto native void DebugList();
- /**
- \brief Set specific option (integer)
- */
- proto native void SetOption( int option, int value );
- };
- // -------------------------------------------------------------------------
- // RestApi create/ access methods out of Hive initialization
- proto native RestApi CreateRestApi();
- proto native void DestroyRestApi();
- proto native RestApi GetRestApi();
|