-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add ASIO Socket Transport Implementation (#21)
* Add socket transport implementation * Add framed socket transport implementation
- Loading branch information
1 parent
5d0149a
commit 1ac4ac2
Showing
29 changed files
with
599 additions
and
429 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
CompileFlags: | ||
Add: | ||
- "-std=c++20" | ||
- "-Wall" | ||
- "-Wextra" | ||
CompilationDatabase: build/Release | ||
|
||
Diagnostics: | ||
ClangTidy: | ||
Remove: bugprone-unused-return-value |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,25 @@ | ||
"""This is the MODULE.bazel file for the jsonrpc module.""" | ||
""" | ||
MODULE.bazel file for the jsonrpc module | ||
""" | ||
|
||
module( | ||
name = "jsonrpc", | ||
version = "1.0.0", | ||
) | ||
|
||
# Register the rules_foreign_cc and rules_cc dependencies | ||
bazel_dep(name = "rules_foreign_cc", version = "0.11.1") | ||
# Dependencies from the Bazel Central Registry | ||
bazel_dep(name = "rules_cc", version = "0.0.9") | ||
|
||
# Register the nlohmann_json dependency | ||
bazel_dep(name = "nlohmann_json", version = "3.11.3") | ||
|
||
# Register the spdlog dependency | ||
bazel_dep(name = "spdlog", version = "1.14.1") | ||
|
||
# Register the asio dependency | ||
bazel_dep(name = "asio", version = "1.28.2") | ||
|
||
# Register the catch2 dependency | ||
bazel_dep(name = "catch2", version = "3.6.0") | ||
|
||
# Dependency using traditional HTTP archive | ||
http_archive = use_repo_rule("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") | ||
http_archive( | ||
name = "thread_pool", | ||
build_file = "//third_party/thread_pool:BUILD.bazel", | ||
sha256 = "be7abecbc420bb87919eeef729b13ff7c29d5ce547bdae284923296c695415bd", | ||
strip_prefix = "thread-pool-4.1.0", | ||
urls = ["https://github.com/bshoshany/thread-pool/archive/refs/tags/v4.1.0.tar.gz"], | ||
) |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +0,0 @@ | ||
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") | ||
|
||
http_archive( | ||
name = "thread_pool", | ||
build_file = "//third_party/thread_pool:BUILD.bazel", | ||
sha256 = "be7abecbc420bb87919eeef729b13ff7c29d5ce547bdae284923296c695415bd", | ||
strip_prefix = "thread-pool-4.1.0", | ||
urls = ["https://github.com/bshoshany/thread-pool/archive/refs/tags/v4.1.0.tar.gz"], | ||
) | ||
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,3 @@ | ||
#include <iostream> | ||
#include <memory> | ||
|
||
#include <jsonrpc/client/client.hpp> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
#include <memory> | ||
|
||
#include <jsonrpc/client/client.hpp> | ||
#include <jsonrpc/transport/framed_pipe_transport.hpp> | ||
#include <nlohmann/json.hpp> | ||
#include <spdlog/sinks/basic_file_sink.h> | ||
#include <spdlog/spdlog.h> | ||
|
||
#include "jsonrpc/transport/framed_socket_transport.hpp" | ||
|
||
using namespace jsonrpc::client; | ||
using namespace jsonrpc::transport; | ||
using Json = nlohmann::json; | ||
|
||
int main() { | ||
auto logger = spdlog::basic_logger_mt("client", "logs/client.log", true); | ||
spdlog::set_default_logger(logger); | ||
spdlog::set_level(spdlog::level::debug); | ||
spdlog::flush_on(spdlog::level::debug); | ||
|
||
std::string host = "127.0.0.1"; | ||
uint16_t port = 12345; | ||
auto transport = std::make_unique<FramedSocketTransport>(host, port, false); | ||
Client client(std::move(transport)); | ||
client.Start(); | ||
|
||
Json addRes = client.SendMethodCall("add", Json({{"a", 10}, {"b", 5}})); | ||
spdlog::info("Add result: {}", addRes.dump()); | ||
|
||
Json divRes = client.SendMethodCall("divide", Json({{"a", 10}, {"b", 0}})); | ||
spdlog::info("Divide result: {}", divRes.dump()); | ||
|
||
client.SendNotification("stop"); | ||
|
||
client.Stop(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
#include <memory> | ||
|
||
#include <jsonrpc/server/server.hpp> | ||
#include <jsonrpc/transport/framed_pipe_transport.hpp> | ||
#include <nlohmann/json.hpp> | ||
#include <spdlog/sinks/basic_file_sink.h> | ||
#include <spdlog/spdlog.h> | ||
|
||
#include "jsonrpc/transport/framed_socket_transport.hpp" | ||
|
||
#include "calculator.hpp" | ||
|
||
using namespace jsonrpc::server; | ||
using namespace jsonrpc::transport; | ||
using Json = nlohmann::json; | ||
|
||
int main() { | ||
auto logger = spdlog::basic_logger_mt("server", "logs/server.log", true); | ||
spdlog::set_default_logger(logger); | ||
spdlog::set_level(spdlog::level::debug); | ||
spdlog::flush_on(spdlog::level::debug); | ||
|
||
std::string host = "0.0.0.0"; | ||
uint16_t port = 12345; | ||
auto transport = std::make_unique<FramedSocketTransport>(host, port, true); | ||
Server server(std::move(transport)); | ||
Calculator calculator; | ||
|
||
server.RegisterMethodCall( | ||
"add", [&calculator](const std::optional<Json> ¶ms) { | ||
return calculator.Add(params.value()); | ||
}); | ||
|
||
server.RegisterMethodCall( | ||
"divide", [&calculator](const std::optional<Json> ¶ms) { | ||
return calculator.Divide(params.value()); | ||
}); | ||
|
||
server.RegisterNotification( | ||
"stop", [&server](const std::optional<Json> &) { server.Stop(); }); | ||
|
||
server.Start(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,3 @@ | ||
#include <iostream> | ||
#include <memory> | ||
|
||
#include <jsonrpc/client/client.hpp> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
#include <memory> | ||
|
||
#include <jsonrpc/client/client.hpp> | ||
#include <jsonrpc/transport/socket_transport.hpp> | ||
#include <nlohmann/json.hpp> | ||
#include <spdlog/sinks/basic_file_sink.h> | ||
#include <spdlog/spdlog.h> | ||
|
||
using namespace jsonrpc::client; | ||
using namespace jsonrpc::transport; | ||
using Json = nlohmann::json; | ||
|
||
int main() { | ||
auto logger = spdlog::basic_logger_mt("client", "logs/client.log", true); | ||
spdlog::set_default_logger(logger); | ||
spdlog::set_level(spdlog::level::debug); | ||
spdlog::flush_on(spdlog::level::debug); | ||
|
||
std::string host = "127.0.0.1"; | ||
uint16_t port = 12345; | ||
auto transport = std::make_unique<SocketTransport>(host, port, false); | ||
Client client(std::move(transport)); | ||
client.Start(); | ||
|
||
Json addRes = client.SendMethodCall("add", Json({{"a", 10}, {"b", 5}})); | ||
spdlog::info("Add result: {}", addRes.dump()); | ||
|
||
Json divRes = client.SendMethodCall("divide", Json({{"a", 10}, {"b", 0}})); | ||
spdlog::info("Divide result: {}", divRes.dump()); | ||
|
||
client.SendNotification("stop"); | ||
|
||
client.Stop(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
#include <memory> | ||
|
||
#include <jsonrpc/server/server.hpp> | ||
#include <jsonrpc/transport/socket_transport.hpp> | ||
#include <nlohmann/json.hpp> | ||
#include <spdlog/sinks/basic_file_sink.h> | ||
#include <spdlog/spdlog.h> | ||
|
||
#include "calculator.hpp" | ||
|
||
using namespace jsonrpc::server; | ||
using namespace jsonrpc::transport; | ||
using Json = nlohmann::json; | ||
|
||
int main() { | ||
auto logger = spdlog::basic_logger_mt("server", "logs/server.log", true); | ||
spdlog::set_default_logger(logger); | ||
spdlog::set_level(spdlog::level::debug); | ||
spdlog::flush_on(spdlog::level::debug); | ||
|
||
std::string host = "0.0.0.0"; | ||
uint16_t port = 12345; | ||
|
||
auto transport = std::make_unique<SocketTransport>(host, port, true); | ||
Server server(std::move(transport)); | ||
Calculator calculator; | ||
|
||
server.RegisterMethodCall( | ||
"add", [&calculator](const std::optional<Json> ¶ms) { | ||
return calculator.Add(params.value()); | ||
}); | ||
|
||
server.RegisterMethodCall( | ||
"divide", [&calculator](const std::optional<Json> ¶ms) { | ||
return calculator.Divide(params.value()); | ||
}); | ||
|
||
server.RegisterNotification( | ||
"stop", [&server](const std::optional<Json> &) { server.Stop(); }); | ||
|
||
server.Start(); | ||
return 0; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,3 @@ | ||
#include <iostream> | ||
#include <memory> | ||
|
||
#include <jsonrpc/client/client.hpp> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
#pragma once | ||
|
||
#include <asio.hpp> | ||
#include <asio/local/stream_protocol.hpp> | ||
#include <cstdint> | ||
#include <string> | ||
|
||
#include "jsonrpc/transport/framed_transport.hpp" | ||
#include "jsonrpc/transport/socket_transport.hpp" | ||
|
||
namespace jsonrpc::transport { | ||
|
||
/** | ||
* @brief Transport layer using Asio sockets for JSON-RPC | ||
* communication with framing. | ||
*/ | ||
class FramedSocketTransport : | ||
public SocketTransport, | ||
protected FramedTransport { | ||
public: | ||
FramedSocketTransport(const std::string &host, uint16_t port, bool isServer); | ||
|
||
void SendMessage(const std::string &message) override; | ||
std::string ReceiveMessage() override; | ||
}; | ||
|
||
} // namespace jsonrpc::transport |
Oops, something went wrong.