WIP interface design
parent
ecb3045562
commit
416deb89a7
|
@ -2,16 +2,47 @@
|
|||
|
||||
#include <string_view>
|
||||
|
||||
namespace saw {
|
||||
HttpNetwork::HttpNetwork(Network& internal_):
|
||||
internal{&internal_}{}
|
||||
#include <cassert>
|
||||
|
||||
Own<HttpNetworkAddress> HttpNetwork::parseAddress(const std::string& addr){
|
||||
namespace saw {
|
||||
HttpNetwork::HttpNetwork(Network& network):
|
||||
internal{&network}{}
|
||||
|
||||
|
||||
Own<HttpServer> HttpNetwork::listen(NetworkAddress& address){
|
||||
assert(internal);
|
||||
|
||||
auto eov = internal->listen(address);
|
||||
/// @todo unimplemented
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Conveyor<Own<HttpNetworkAddress>> HttpNetwork::resolveAddress(const std::string& addr){
|
||||
std::string_view view{addr};
|
||||
namespace {
|
||||
struct HttpClientStreamHelper {
|
||||
Own<ConveyorFeeder<Own<HttpStream>>
|
||||
|
||||
Own<IoStream> stream = nullptr;
|
||||
};
|
||||
}
|
||||
|
||||
Conveyor<Own<HttpStream>> HttpNetwork::connect(NetworkAddress& address){
|
||||
assert(internal);
|
||||
|
||||
Own<HttpClientStreamHelper> helper = heap<HttpClientStreamHelper>();
|
||||
|
||||
// Create a type of break point
|
||||
helper->sink = internal->connect(address).then([help_ptr = helper.get()](Own<IoStream> stream) -> ErrorOr<void> {
|
||||
assert(stream);
|
||||
|
||||
help_ptr->stream = std::move(stream);
|
||||
|
||||
return;
|
||||
}).sink();
|
||||
|
||||
auto caf = newConveyorAndFeeder<Own<HttpStream>>();
|
||||
helper->feeder = std::move(caf.feeder);
|
||||
|
||||
return caf.conveyor.attach(std::move(helper));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,20 +49,12 @@ public:
|
|||
Conveyor<Own<HttpStream>> accept();
|
||||
};
|
||||
|
||||
class HttpNetworkAddress {
|
||||
private:
|
||||
Own<NetworkAddress> network_address;
|
||||
public:
|
||||
Own<HttpServer> listen();
|
||||
Conveyor<Own<HttpStream>> connect();
|
||||
};
|
||||
|
||||
class HttpNetwork {
|
||||
public:
|
||||
HttpNetwork(Network& network);
|
||||
|
||||
Own<HttpNetworkAddress> parseAddress(const std::string& addr);
|
||||
Conveyor<Own<HttpNetworkAddress>> resolveAddress(const std::string& addr);
|
||||
Own<HttpServer> listen(NetworkAddress& address);
|
||||
Conveyor<Own<HttpStream>> connect(NetworkAddress& address);
|
||||
private:
|
||||
Network* internal;
|
||||
};
|
||||
|
@ -80,11 +72,18 @@ class HttpResponse {
|
|||
*/
|
||||
class HttpRequest {
|
||||
public:
|
||||
HttpRequest(Own<ConveyorFeeder>
|
||||
|
||||
Conveyor<HttpResponse> response();
|
||||
private:
|
||||
Own<ConveyorFeeder<HttpResponse>> feeder;
|
||||
|
||||
};
|
||||
|
||||
class HttpClient {
|
||||
Own<HttpRequest> request(Http::Method::Variant method, const std::string& url);
|
||||
public:
|
||||
Own<HttpRequest> request(Http::Method::Variant method, const HttpNetworkAddress& address);
|
||||
|
||||
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue