Testing threads with http server

multi_plaform
ambigipathyv ago%!(EXTRA string=1 year)
parent 291c92cc41
commit 27290c54de
  1. 24
      bakanet/src/bakanet/http/http_server.cpp
  2. 8
      bakanet/src/bakanet/http/http_server.h

@ -10,23 +10,23 @@ namespace Bk::Net {
bool running = socket->init() && socket->start(5); bool running = socket->init() && socket->start(5);
while (running) while (running)
{ {
Connection conn = socket->ack(); auto conn = socket->ack();
if(conn >= 0)
{ threads.emplace_back(std::thread([&](Socket& conn)
route_request(conn, recv_request(conn)); {
closesocket(conn); log("Caca")
} route_request(conn, recv_request(conn));
}, std::ref(*conn)));
} }
} }
HttpRequest HttpServer::recv_request(Connection conn) HttpRequest HttpServer::recv_request(Socket& conn)
{ {
Packet req; Packet req;
bool reading = true; bool reading = true;
while(reading) while(reading)
{ {
auto data = socket->obtain(conn, 1024); auto data = conn.obtain(1024);
int size = data.size(); int size = data.size();
log("SIZE " << data.size()) log("SIZE " << data.size())
req.append_data(data); req.append_data(data);
@ -37,15 +37,15 @@ namespace Bk::Net {
return HttpRequest("", "", ""); return HttpRequest("", "", "");
} }
void HttpServer::send_reponse(Connection conn, HttpReponse res) void HttpServer::send_reponse(Socket& conn, HttpReponse res)
{ {
Packet res_packet; Packet res_packet;
std::string str_res = res.to_string(); std::string str_res = res.to_string();
res_packet.push<char>(str_res.c_str(), str_res.length()); res_packet.push<char>(str_res.c_str(), str_res.length());
socket->emit(conn, res_packet.payload); conn.emit(res_packet.payload);
} }
void HttpServer::route_request(Connection conn, HttpRequest req) void HttpServer::route_request(Socket& conn, HttpRequest req)
{ {
log("to string") log("to string")
log(req.to_string()) log(req.to_string())

@ -9,6 +9,7 @@
namespace Bk::Net { namespace Bk::Net {
class HttpServer class HttpServer
{ {
using ThreadPool = std::vector<std::thread>;
using RequestHandler = std::function<HttpReponse(HttpRequest& req)>; using RequestHandler = std::function<HttpReponse(HttpRequest& req)>;
public: public:
HttpServer(IpAddress ip, int port); HttpServer(IpAddress ip, int port);
@ -18,9 +19,10 @@ namespace Bk::Net {
private: private:
std::unique_ptr<Socket> socket; std::unique_ptr<Socket> socket;
std::unordered_map<std::string, RequestHandler> req_mapper; std::unordered_map<std::string, RequestHandler> req_mapper;
ThreadPool threads;
HttpRequest recv_request(Connection conn); HttpRequest recv_request(Socket& conn);
void send_reponse(Connection conn, HttpReponse res); void send_reponse(Socket& conn, HttpReponse res);
void route_request(Connection conn, HttpRequest req); void route_request(Socket& conn, HttpRequest req);
}; };
} }
Loading…
Cancel
Save