AutoCatGnome/services/Api.cpp
2022-01-05 22:36:47 +03:00

50 lines
1.4 KiB
C++

//
// Created by selim on 03.01.2022.
//
#include "Api.h"
#include <memory>
template<class...Args>
struct callback {
void(*function)(Args..., void*) = nullptr;
std::unique_ptr<void, void(*)(void*)> state;
};
template<typename... Args, typename Lambda>
callback<Args...> voidify(Lambda&& l) {
using Func = typename std::decay<Lambda>::type;
std::unique_ptr<void, void(*)(void*)> data(
new Func(std::forward<Lambda>(l)),
+[](void* ptr){
std::cout << "!!!!!!!!!!!!!!!!! Deleting data" << std::endl;
delete (Func*)ptr;
}
);
return {
+[](Args... args, void* v)->void {
Func* f = static_cast< Func* >(v);
(*f)(std::forward<Args>(args)...);
},
std::move(data)
};
}
const std::string Api::_baseUrl = "https://vps.aliencat.pro:8443/";
SoupSession* Api::_session = soup_session_new();
Task<User> Api::login(std::string email, std::string password) {
std::string url = _baseUrl + "user/login";
auto msg = soup_message_new(SOUP_METHOD_POST, url.c_str());
auto task = Task<User>();
auto callback = voidify<SoupSession*, SoupMessage*>([&](SoupSession* session, SoupMessage* message) {
std::cout << "Callback called" << std::endl;
task.set_result(User("qwe", "asdf"));
});
soup_session_queue_message(_session, msg, callback.function, callback.state.get());
return task;
}