2022-05-08 12:12:15 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
|
|
|
|
#include <uv.h>
|
2022-05-12 19:19:11 +00:00
|
|
|
#include <boost/noncopyable.hpp>
|
2022-05-08 12:12:15 +00:00
|
|
|
|
|
|
|
#include <Common/Exception.h>
|
|
|
|
|
|
|
|
namespace DB
|
|
|
|
{
|
|
|
|
|
|
|
|
namespace ErrorCodes
|
|
|
|
{
|
|
|
|
extern const int SYSTEM_ERROR;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// RAII wrapper around uv event loop
|
|
|
|
class UVLoop : public boost::noncopyable
|
|
|
|
{
|
|
|
|
public:
|
2022-05-12 19:19:11 +00:00
|
|
|
UVLoop() : loop_ptr(new uv_loop_t())
|
2022-05-08 12:12:15 +00:00
|
|
|
{
|
|
|
|
int res = uv_loop_init(loop_ptr.get());
|
|
|
|
|
|
|
|
if (res != 0)
|
|
|
|
throw Exception("UVLoop could not initialize", ErrorCodes::SYSTEM_ERROR);
|
|
|
|
}
|
|
|
|
|
|
|
|
~UVLoop()
|
|
|
|
{
|
|
|
|
if (loop_ptr)
|
|
|
|
uv_loop_close(loop_ptr.get());
|
|
|
|
}
|
|
|
|
|
|
|
|
inline uv_loop_t * getLoop() { return loop_ptr.get(); }
|
|
|
|
|
|
|
|
inline const uv_loop_t * getLoop() const { return loop_ptr.get(); }
|
|
|
|
|
|
|
|
private:
|
|
|
|
std::unique_ptr<uv_loop_t> loop_ptr;
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|