CurlManager.h 1.4 KB

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