Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
gjasny committed Jan 22, 2019
1 parent 77f7871 commit 56d9577
Show file tree
Hide file tree
Showing 11 changed files with 888 additions and 348 deletions.
2 changes: 1 addition & 1 deletion pull/CMakeLists.txt
Expand Up @@ -15,7 +15,7 @@ add_library(pull
#src/handler.cc
#src/handler.h
#$<$<BOOL:${USE_THIRDPARTY_LIBRARIES}>:$<TARGET_OBJECTS:civetweb>>
src/beast_exposer.cc src/beast_session.h)
src/beast_exposer.cc src/old_beast_session.h src/beast_listener.cpp src/beast_listener.h src/beast_shared_state.h src/beast_shared_state.cpp src/beast_session.cpp src/beast_session.h src/metric_collector.cpp src/metric_collector.h)

add_library(${PROJECT_NAME}::pull ALIAS pull)

Expand Down
15 changes: 6 additions & 9 deletions pull/src/beast_exposer.cc
Expand Up @@ -6,12 +6,8 @@

#include <boost/asio.hpp>

#include "beast_session.h"

//#include "prometheus/client_metric.h"

//#include "CivetServer.h"
//#include "handler.h"
#include "beast_listener.h"
#include "beast_shared_state.h"

namespace prometheus {

Expand All @@ -28,12 +24,13 @@ namespace prometheus {
auto const address = boost::asio::ip::make_address(host);
boost::asio::ip::tcp::endpoint endpoint{address, port};

auto shared_state = std::make_shared<BeastSharedState>(uri, collectables_);

// Create and launch a listening port
std::make_shared<listener>(
std::make_shared<BeastListener>(
ioc,
endpoint,
uri_,
collectables_)->run();
shared_state)->run();

// Run the I/O service on the requested number of threads
worker_.reserve(num_threads - 1);
Expand Down
94 changes: 94 additions & 0 deletions pull/src/beast_listener.cpp
@@ -0,0 +1,94 @@
#include "beast_listener.h"
#include "beast_session.h"
#include <iostream>

BeastListener::
BeastListener(
boost::asio::io_context& ioc,
boost::asio::ip::tcp::endpoint endpoint,
std::shared_ptr<BeastSharedState> const& state)
: acceptor_(ioc)
, socket_(ioc)
, state_(state)
{
boost::beast::error_code ec;

// Open the acceptor
acceptor_.open(endpoint.protocol(), ec);
if(ec)
{
fail(ec, "open");
return;
}

// Allow address reuse
acceptor_.set_option(boost::asio::socket_base::reuse_address(true), ec);
if(ec)
{
fail(ec, "set_option");
return;
}

// Bind to the server address
acceptor_.bind(endpoint, ec);
if(ec)
{
fail(ec, "bind");
return;
}

// Start listening for connections
acceptor_.listen(
boost::asio::socket_base::max_listen_connections, ec);
if(ec)
{
fail(ec, "listen");
return;
}
}

void
BeastListener::
run()
{
// Start accepting a connection
acceptor_.async_accept(
socket_,
std::bind(
&BeastListener::on_accept,
shared_from_this(),
std::placeholders::_1));
}

// Report a failure
void
BeastListener::
fail(boost::beast::error_code ec, char const* what)
{
// Don't report on canceled operations
if(ec == boost::asio::error::operation_aborted)
return;
std::cerr << what << ": " << ec.message() << "\n";
}

// Handle a connection
void
BeastListener::
on_accept(boost::beast::error_code ec)
{
if(ec)
return fail(ec, "accept");
else
// Launch a new session for this connection
std::make_shared<http_session>(
std::move(socket_),
state_)->run();

// Accept another connection
acceptor_.async_accept(
socket_,
std::bind(
&BeastListener::on_accept,
shared_from_this(),
std::placeholders::_1));
}
26 changes: 26 additions & 0 deletions pull/src/beast_listener.h
@@ -0,0 +1,26 @@
#pragma once

#include <memory>
#include <boost/asio.hpp>
#include <boost/beast.hpp>

class BeastSharedState;

class BeastListener : public std::enable_shared_from_this<BeastListener>
{
boost::asio::ip::tcp::acceptor acceptor_;
boost::asio::ip::tcp::socket socket_;
std::shared_ptr<BeastSharedState> state_;

void fail(boost::beast::error_code ec, char const* what);
void on_accept(boost::beast::error_code ec);

public:
BeastListener(
boost::asio::io_context& ioc,
boost::asio::ip::tcp::endpoint endpoint,
std::shared_ptr<BeastSharedState> const& state);

// Start accepting incoming connections
void run();
};

0 comments on commit 56d9577

Please sign in to comment.