129 lines
4.8 KiB
C++
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);
|