lokinet/libabyss/include/abyss/server.hpp

87 lines
1.7 KiB
C++
Raw Normal View History

#ifndef __ABYSS_SERVER_HPP__
#define __ABYSS_SERVER_HPP__
#include <llarp/ev.h>
2018-11-19 23:57:28 +00:00
#include <llarp/logic.hpp>
2018-11-19 22:45:37 +00:00
#include <llarp/string_view.hpp>
#include <llarp/time.hpp>
#include <list>
#include <memory>
#include <string>
#include <abyss/json.hpp>
2018-10-25 17:03:25 +00:00
#include <unordered_map>
namespace abyss
{
2018-11-01 12:47:14 +00:00
namespace httpd
{
struct ConnImpl;
struct IRPCHandler
{
typedef std::string Method_t;
2018-10-25 17:03:25 +00:00
typedef json::Value Params;
typedef json::Document Response;
IRPCHandler(ConnImpl* impl);
virtual bool
HandleJSONRPC(Method_t method, const Params& params,
Response& response) = 0;
virtual ~IRPCHandler();
bool
ShouldClose(llarp_time_t now) const;
private:
ConnImpl* m_Impl;
};
struct BaseReqHandler
{
BaseReqHandler(llarp_time_t req_timeout);
~BaseReqHandler();
bool
ServeAsync(llarp_ev_loop* loop, llarp_logic* logic,
const sockaddr* bindaddr);
void
RemoveConn(IRPCHandler* handler);
2018-11-02 17:08:01 +00:00
/// close the handler and acceptor
void
Close();
2018-10-29 16:48:36 +00:00
llarp_time_t
now() const
{
return llarp_ev_loop_time_now_ms(m_loop);
}
protected:
virtual IRPCHandler*
CreateHandler(ConnImpl* connimpl) = 0;
private:
static void
OnTick(llarp_tcp_acceptor*);
void
Tick();
static void
OnAccept(struct llarp_tcp_acceptor*, struct llarp_tcp_conn*);
llarp_ev_loop* m_loop;
llarp_logic* m_Logic;
llarp_tcp_acceptor m_acceptor;
std::list< std::unique_ptr< IRPCHandler > > m_Conns;
llarp_time_t m_ReqTimeout;
};
2018-11-01 12:47:14 +00:00
} // namespace httpd
} // namespace abyss
#endif