-
Notifications
You must be signed in to change notification settings - Fork 759
Create common, polymorphic base class for HTTP/HTTPSServer #208
base: master
Are you sure you want to change the base?
Conversation
To support a common base class for HTTP and HTTPS
Sorry for the late reply, but thank you for this. I have not yet had time to study the changes, but hopefully I will get a look at it soon. |
I went a slightly different direction in https://github.com/eidheim/Simple-Web-Server/tree/base_class. Not sure what solution is best, but at least I know it is doable:) |
Your method looks cleaner. I like that there is minimal duplicated code. That's something I hadn't given enough effort to avoiding. So to make sure, I'd do something like this to create the server
and then access the methods like before
|
Yes, for instance: #include "client_https.hpp"
#include "server_https.hpp"
#include <vector>
int main() {
auto io_service = std::make_shared<SimpleWeb::asio::io_service>();
std::vector<std::unique_ptr<SimpleWeb::ServerInterface>> servers;
servers.emplace_back(new SimpleWeb::Server<SimpleWeb::HTTP>());
servers.back()->io_service = io_service;
servers.back()->config.port = 8080;
servers.back()->default_resource["GET"] = [](std::shared_ptr<SimpleWeb::ServerInterface::Response> response,
std::shared_ptr<SimpleWeb::ServerInterface::Request> /*request*/) {
response->write("Hello World");
};
servers.emplace_back(new SimpleWeb::Server<SimpleWeb::HTTPS>("server.crt", "server.key"));
servers.back()->io_service = io_service;
servers.back()->config.port = 8081;
servers.back()->default_resource["GET"] = servers[0]->default_resource["GET"];
for(auto &server : servers)
server->start();
io_service->run();
} Although I'll probably change the names |
For the time being, I changed it so that one now can write: #include "client_https.hpp"
#include "server_https.hpp"
#include <vector>
int main() {
auto io_service = std::make_shared<SimpleWeb::asio::io_service>();
std::vector<std::unique_ptr<SimpleWeb::ServerBase>> servers;
servers.emplace_back(new SimpleWeb::Server<SimpleWeb::HTTP>());
servers.back()->io_service = io_service;
servers.back()->config.port = 8080;
servers.back()->default_resource["GET"] = [](std::shared_ptr<SimpleWeb::Server<>::Response> response,
std::shared_ptr<SimpleWeb::Server<>::Request> /*request*/) {
response->write("Hello World");
};
servers.emplace_back(new SimpleWeb::Server<SimpleWeb::HTTPS>("server.crt", "server.key"));
servers.back()->io_service = io_service;
servers.back()->config.port = 8081;
servers.back()->default_resource["GET"] = servers[0]->default_resource["GET"];
for(auto &server : servers)
server->start();
io_service->run();
} The class name |
I managed to simplify https://github.com/eidheim/Simple-Web-Server/tree/base_class further by splitting the Response class instead of the Connection class. |
Addresses Issue #168
Removed templating on ServerBase and inner classes.
Created virtual methods for those using sockets
Subclassed Response and Connection for HTTP/HTTPS
All code and functionality should be identical, just reorganized to make the base class possible