CurlManager.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 ToolCore
  12. {
  13. EVENT(E_CURLCOMPLETE, CurlComplete)
  14. {
  15. PARAM(P_CURLREQUEST, Request); // CurlRequest*
  16. }
  17. class CurlRequest : public Object, public Thread
  18. {
  19. friend class CurlManager;
  20. OBJECT(CurlRequest);
  21. public:
  22. CurlRequest(Context* context, const String& url, const String& postData = String::EMPTY);
  23. virtual ~CurlRequest();
  24. const String& GetError() { return error_; }
  25. const String& GetResponse() { return response_; }
  26. private:
  27. void ThreadFunction();
  28. mutable Mutex mutex_;
  29. static size_t Writer(void *ptr, size_t size, size_t nmemb, void *userp);
  30. CURL* curl_;
  31. String response_;
  32. String error_;
  33. String postData_;
  34. String url_;
  35. };
  36. class CurlManager : public Object
  37. {
  38. OBJECT(CurlManager);
  39. public:
  40. /// Construct.
  41. CurlManager(Context* context);
  42. /// Destruct.
  43. virtual ~CurlManager();
  44. SharedPtr<CurlRequest> MakeRequest(const String& url, const String& postData = String::EMPTY);
  45. private:
  46. void HandleUpdate(StringHash eventType, VariantMap& eventData);
  47. Vector< SharedPtr<CurlRequest> > requests_;
  48. };
  49. }