CurlManager.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. //
  2. // Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved
  3. // LICENSE: Atomic Game Engine Editor and Tools EULA
  4. // Please see LICENSE_ATOMIC_EDITOR_AND_TOOLS.md in repository root for
  5. // license information: https://github.com/AtomicGameEngine/AtomicGameEngine
  6. //
  7. #pragma once
  8. typedef void CURL;
  9. #include <Atomic/Core/Object.h>
  10. #include <Atomic/Container/Str.h>
  11. #include <Atomic/Core/Mutex.h>
  12. #include <Atomic/Core/Thread.h>
  13. using namespace Atomic;
  14. namespace ToolCore
  15. {
  16. EVENT(E_CURLCOMPLETE, CurlComplete)
  17. {
  18. PARAM(P_CURLREQUEST, Request); // CurlRequest*
  19. }
  20. class CurlRequest : public Object, public Thread
  21. {
  22. friend class CurlManager;
  23. OBJECT(CurlRequest);
  24. public:
  25. CurlRequest(Context* context, const String& url, const String& postData = String::EMPTY);
  26. virtual ~CurlRequest();
  27. const String& GetError() { return error_; }
  28. const String& GetResponse() { return response_; }
  29. private:
  30. void ThreadFunction();
  31. mutable Mutex mutex_;
  32. static size_t Writer(void *ptr, size_t size, size_t nmemb, void *userp);
  33. CURL* curl_;
  34. String response_;
  35. String error_;
  36. String postData_;
  37. String url_;
  38. };
  39. class CurlManager : public Object
  40. {
  41. OBJECT(CurlManager);
  42. public:
  43. /// Construct.
  44. CurlManager(Context* context);
  45. /// Destruct.
  46. virtual ~CurlManager();
  47. SharedPtr<CurlRequest> MakeRequest(const String& url, const String& postData = String::EMPTY);
  48. private:
  49. void HandleUpdate(StringHash eventType, VariantMap& eventData);
  50. Vector< SharedPtr<CurlRequest> > requests_;
  51. };
  52. }