ZRColaWS: Initial skeleton
Signed-off-by: Simon Rozman <simon@rozman.si>
This commit is contained in:
parent
a6f0357ad8
commit
a7c7a3f40c
13
README.md
13
README.md
@ -56,6 +56,19 @@ Use Microsoft NMAKE to build the project. The resulting files can be found in ou
|
|||||||
|
|
||||||
The `/ls` flag can be appended to the commands above to reduce NMAKE's verbosity. You can combine multiple targets (e.g. nmake Unregister Clean). Please, see NMAKE reference for further reading.
|
The `/ls` flag can be appended to the commands above to reduce NMAKE's verbosity. You can combine multiple targets (e.g. nmake Unregister Clean). Please, see NMAKE reference for further reading.
|
||||||
|
|
||||||
|
## Building ZRCola webservice
|
||||||
|
|
||||||
|
### Building Environment Requirements
|
||||||
|
- Linux
|
||||||
|
- _gcc_, _make_
|
||||||
|
- [oat++ 1.3.0](https://oatpp.io/)
|
||||||
|
|
||||||
|
### oat++
|
||||||
|
ZRCola webservice is using oat++ library. You have to compile the library and install it to `/usr/local`.
|
||||||
|
|
||||||
|
### Building
|
||||||
|
Use `make -C ZRColaWS all` to build the project.
|
||||||
|
|
||||||
## Translating ZRCola
|
## Translating ZRCola
|
||||||
Instructions how to translate ZRCola to your language can be found [here](LOCALIZATION.md).
|
Instructions how to translate ZRCola to your language can be found [here](LOCALIZATION.md).
|
||||||
|
|
||||||
|
3
ZRColaWS/.gitignore
vendored
Normal file
3
ZRColaWS/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
/*.d
|
||||||
|
/*.o
|
||||||
|
/zrcolad
|
21
ZRColaWS/Makefile
Normal file
21
ZRColaWS/Makefile
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
CPPFLAGS := $(CPPFLAGS) -I../lib/libZRCola/include -I../lib/stdex/include -I/usr/local/include/oatpp-1.3.0/oatpp
|
||||||
|
LDFLAGS := $(LDFLAGS) -lstdc++ -L../lib/libZRCola/lib -lZRCola -L/usr/local/lib64/oatpp-1.3.0 -loatpp
|
||||||
|
SRCS := zrcolaws.cpp
|
||||||
|
|
||||||
|
include ../include/props.mak
|
||||||
|
|
||||||
|
.PHONY: all
|
||||||
|
all: zrcolad
|
||||||
|
|
||||||
|
zrcolad: ../lib/libZRCola/lib/libZRCola.a $(OBJS)
|
||||||
|
$(CC) $(OBJS) -o $@ $(LDFLAGS)
|
||||||
|
|
||||||
|
../lib/libZRCola/lib/libZRCola.a:
|
||||||
|
$(MAKE) $(MFLAGS) -C ../lib/libZRCola/build
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
-rm -r *.{d,o} zrcolad
|
||||||
|
|
||||||
|
include ../include/targets.mak
|
||||||
|
-include $(DEPS)
|
32
ZRColaWS/appcomponent.h
Normal file
32
ZRColaWS/appcomponent.h
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <oatpp/core/macro/component.hpp>
|
||||||
|
#include <oatpp/network/tcp/server/ConnectionProvider.hpp>
|
||||||
|
#include <oatpp/parser/json/mapping/ObjectMapper.hpp>
|
||||||
|
#include <oatpp/web/server/HttpConnectionHandler.hpp>
|
||||||
|
|
||||||
|
class AppComponent
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::ServerConnectionProvider>, serverConnectionProvider)([] {
|
||||||
|
return oatpp::network::tcp::server::ConnectionProvider::createShared({"localhost", 8000, oatpp::network::Address::IP_4});
|
||||||
|
}());
|
||||||
|
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, httpRouter)([] {
|
||||||
|
return oatpp::web::server::HttpRouter::createShared();
|
||||||
|
}());
|
||||||
|
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, serverConnectionHandler)([] {
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, router);
|
||||||
|
return oatpp::web::server::HttpConnectionHandler::createShared(router);
|
||||||
|
}());
|
||||||
|
|
||||||
|
OATPP_CREATE_COMPONENT(std::shared_ptr<oatpp::data::mapping::ObjectMapper>, apiObjectMapper)([] {
|
||||||
|
return oatpp::parser::json::mapping::ObjectMapper::createShared();
|
||||||
|
}());
|
||||||
|
};
|
42
ZRColaWS/controller.h
Normal file
42
ZRColaWS/controller.h
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "dto.h"
|
||||||
|
#include <oatpp/core/macro/codegen.hpp>
|
||||||
|
#include <oatpp/core/macro/component.hpp>
|
||||||
|
#include <oatpp/web/server/api/ApiController.hpp>
|
||||||
|
|
||||||
|
#include OATPP_CODEGEN_BEGIN(ApiController)
|
||||||
|
|
||||||
|
class MyController : public oatpp::web::server::api::ApiController
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MyController(OATPP_COMPONENT(std::shared_ptr<ObjectMapper>, objectMapper)) : oatpp::web::server::api::ApiController(objectMapper) {}
|
||||||
|
|
||||||
|
ENDPOINT("GET", "/hello", hello)
|
||||||
|
{
|
||||||
|
auto dto = MessageDto::createShared();
|
||||||
|
dto->statusCode = 0;
|
||||||
|
dto->message = "Hello World!";
|
||||||
|
return createDtoResponse(Status::CODE_200, dto);
|
||||||
|
}
|
||||||
|
|
||||||
|
ADD_CORS(postUsers)
|
||||||
|
ENDPOINT("POST", "/users", postUsers, BODY_DTO(Object<UserDto>, user))
|
||||||
|
{
|
||||||
|
auto dto = MessageDto::createShared();
|
||||||
|
dto->statusCode = 0;
|
||||||
|
std::string msg;
|
||||||
|
msg = "Hello ";
|
||||||
|
msg += user->name ? user->name->c_str() : "unknown";
|
||||||
|
msg += "!";
|
||||||
|
dto->message = msg;
|
||||||
|
return createDtoResponse(Status::CODE_200, dto);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#include OATPP_CODEGEN_END(ApiController)
|
28
ZRColaWS/dto.h
Normal file
28
ZRColaWS/dto.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <oatpp/core/data/mapping/type/Object.hpp>
|
||||||
|
#include <oatpp/core/macro/codegen.hpp>
|
||||||
|
#include <oatpp/core/Types.hpp>
|
||||||
|
|
||||||
|
#include OATPP_CODEGEN_BEGIN(DTO)
|
||||||
|
|
||||||
|
class MessageDto : public oatpp::DTO
|
||||||
|
{
|
||||||
|
DTO_INIT(MessageDto, DTO)
|
||||||
|
DTO_FIELD(Int32, statusCode);
|
||||||
|
DTO_FIELD(String, message);
|
||||||
|
};
|
||||||
|
|
||||||
|
class UserDto : public oatpp::DTO
|
||||||
|
{
|
||||||
|
DTO_INIT(UserDto, DTO)
|
||||||
|
DTO_FIELD(Int64, id);
|
||||||
|
DTO_FIELD(String, name);
|
||||||
|
};
|
||||||
|
|
||||||
|
#include OATPP_CODEGEN_END(DTO)
|
30
ZRColaWS/test.html
Normal file
30
ZRColaWS/test.html
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<meta http-equiv="Content-Language" content="sl">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
function submitJSON() {
|
||||||
|
var form = document.users;
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
xhr.onreadystatechange = function() {
|
||||||
|
if (xhr.readyState == XMLHttpRequest.DONE)
|
||||||
|
form["res"].value = xhr.responseText;
|
||||||
|
}
|
||||||
|
xhr.open("POST", "http://localhost:8000/users", true);
|
||||||
|
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
|
||||||
|
xhr.send(form["req"].value);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<body>
|
||||||
|
<form name="users">
|
||||||
|
<h1>users</h1>
|
||||||
|
<p>
|
||||||
|
<textarea rows="10" name="req" cols="63">{"id":0, "name":"joe"}</textarea>
|
||||||
|
>>
|
||||||
|
<textarea rows="10" name="res" cols="63"></textarea>
|
||||||
|
</p>
|
||||||
|
<p><input type="submit" value="Submit" onclick="submitJSON(); return false"><input type="reset" value="Reset"></p>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</body>
|
28
ZRColaWS/zrcolaws.cpp
Normal file
28
ZRColaWS/zrcolaws.cpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
Copyright © 2022 Amebis
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "../include/version.h"
|
||||||
|
#include "appcomponent.h"
|
||||||
|
#include "controller.h"
|
||||||
|
#include <oatpp/network/Server.hpp>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
oatpp::base::Environment::init();
|
||||||
|
AppComponent components;
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, router);
|
||||||
|
auto myController = std::make_shared<MyController>();
|
||||||
|
router->addController(myController);
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, connectionHandler);
|
||||||
|
OATPP_COMPONENT(std::shared_ptr<oatpp::network::ServerConnectionProvider>, connectionProvider);
|
||||||
|
oatpp::network::Server server(connectionProvider, connectionHandler);
|
||||||
|
OATPP_LOGI("ZRColaWS", "Server " PRODUCT_VERSION_STR " running on %s:%s",
|
||||||
|
connectionProvider->getProperty("host").getData(), connectionProvider->getProperty("port").getData());
|
||||||
|
server.run();
|
||||||
|
oatpp::base::Environment::destroy();
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user