// // Created by SunnyQjm on 2020/12/8 上午9:06. // #include #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 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 = make_shared(); // //data->setName(dataName); // data->setFreshnessPeriod(0_s); // 10 seconds // // 数据缓存在节点中,立即变旧 // data->setContent(reinterpret_cast(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 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 = make_shared(); // //data->setName(dataName); // data->setFreshnessPeriod(0_s); // 10 seconds // // 数据缓存在节点中,立即变旧 // for (int i = 0; i < sendSeq; i++) { // data->setContent(reinterpret_cast(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 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 &request, std::shared_ptr &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(request); // this->listener(requestPtr);