Files
MINWebServer/test_minweb_server_library.cpp
T
2020-12-22 19:25:54 -08:00

129 lines
4.8 KiB
C++

//
// Created by SunnyQjm on 2020/12/8 上午9:06.
//
#include <iostream>
#include "MINWebServer/server/Service.h"
#include "MINWebServer/server/Server.h"
#include "MINWebServer/message/MINWebRequest.h"
#include "MINWebServer/message/MINWebResponse.h"
#include "MINWebServer/http/MINHttpSession.h"
#include "MINWebServer/http/MINHttpServerImpl.h"
using namespace MIN;
using namespace MIN::MINWebServer;
class MINHttpServerImpl1 : public MINHttpServer {
public:
void setOnRequestListener(const OnRequestReceiveListener &onRequestReceiveListener) override {
this->listener = onRequestReceiveListener;
}
void replyResponse(std::shared_ptr<MIN::MINWebResponse> response) override{
// TODO deal response
sessionpro.replyResponse(response);
// std::string responseStr;
// responseStr.append("MIN-HTTP/1.0").append(" ").append(MIN::MINWebServer::getMINHttpStatusStr(response->status)).append(" ").append(MIN::MINWebServer::getMINHttpStatusStr(response->status));//get status code;
// responseStr.append("\r\n");
// responseStr.append("Content-Type").append(" ").append(MIN::MINWebServer::getMINHttpContentTypeStr(response->contentType));
// responseStr.append("Content-Length").append(" ").append(" ");
// responseStr.append("\r\n\r\n");
// responseStr.append(response->body);
//
// /*
// * SEND RESPONSE TO BROWSER CLIENT
// */
// if(responseStr.length()<=7000){
// ndn::KeyChain m_keyChain;
// ndn::Face m_face;
// //Name dataName(interest.getName()); //TODO: need requestId
// shared_ptr<Data> data = make_shared<Data>();
// //data->setName(dataName);
// data->setFreshnessPeriod(0_s); // 10 seconds
// // 数据缓存在节点中,立即变旧
// data->setContent(reinterpret_cast<const uint8_t*>(responseStr.data()), responseStr.size());
// m_keyChain.sign(*data);
// std::cout << ">> D: " << "data packet :" << " " << *data << std::endl;
// m_face.put(*data);
// }
// else {
// size_t sendSeq = responseStr.length() / 7000;
// std::vector<std::string> responseSeq;
// for (int i = 0; i < sendSeq; i++) {
// if (i == 0)
// responseSeq[i] = responseStr.substr(0, 7000);
// else
// responseSeq[i] = responseStr.substr((7000 * i) + 1, 7000 * (i + 1));
// }
// ndn::KeyChain m_keyChain;
// ndn::Face m_face;
// //Name dataName(interest.getName()); //TODO: need requestId
// shared_ptr<Data> data = make_shared<Data>();
// //data->setName(dataName);
// data->setFreshnessPeriod(0_s); // 10 seconds
// // 数据缓存在节点中,立即变旧
// for (int i = 0; i < sendSeq; i++) {
// data->setContent(reinterpret_cast<const uint8_t *>(responseSeq[i].data()), responseSeq[i].size());
// m_keyChain.sign(*data);
// std::cout << ">> D: " << "data packet :" << i << " " << *data << std::endl;
// m_face.put(*data);
// }
// }
}
// void replyResponse(std::shared_ptr<MIN::MINWebResponse> response) override {
// std::cout << "-----------------------------------reply" << endl;
// std::cout << std::string((char *)response->content, response->contentLength) << std::endl;
// std::cout << response->body << std::endl;
// }
void start(bool wait) override {
sessionpro.setOnRequestListener(this->listener);
sessionpro.run();
}
private:
Sessionpro sessionpro;
OnRequestReceiveListener listener;
};
int main () {
Service service;
service.documentRoot = "/var/www";
service.indexOf = "/sunnyqjm.github.io";
service.homePage = "index.html";
service.baseUrl = "/MIN/Web/test";
std::cout << getMINHttpMethodEnumFromStr("GET") << std::endl;
std::cout << getMINHttpStatusEnumFromStr("Continue") << std::endl;
service.GET("/getUserInfo", [](std::shared_ptr<MINWebRequest> &request,
std::shared_ptr<MINWebResponse> &response) {
nlohmann::json result = {
{"username", "qjm253"},
{"description", "What?"}
};
response->contentType = APPLICATION_JSON;
response->body = result.dump();
return 0;
});
MINHttpServerImpl1 minHttpServer;
Server::ServerConfig serverConfig;
serverConfig.service = &service;
serverConfig.minHttpServer = &minHttpServer;
Server server(serverConfig);
server.run();
}
// MINWebRequest request;
// request.service = "/MIN/Web/test";
// request.url = "/MIN/Web/test/getUserInfo";
//// request.path = "/sunnyqjm.github.io/2017/";
// request.path = "/getUserInfo";
// request.method = MIN_HTTP_GET;
// auto requestPtr = make_shared<MINWebRequest>(request);
// this->listener(requestPtr);