mirror of
https://github.com/zigzap/zap.git
synced 2025-10-21 15:44:10 +00:00
Merge branch 'master' of github.com:alexpyattaev/contrib_zap
This commit is contained in:
commit
c17d75d1ef
5 changed files with 123 additions and 0 deletions
39
wrk/cpp/build.zig
Normal file
39
wrk/cpp/build.zig
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
const std = @import("std");
|
||||||
|
|
||||||
|
pub fn build(b: *std.Build) void {
|
||||||
|
const target = b.standardTargetOptions(.{});
|
||||||
|
|
||||||
|
const optimize = b.standardOptimizeOption(.{});
|
||||||
|
|
||||||
|
const exe = b.addExecutable(.{
|
||||||
|
.name = "cpp-beast",
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
exe.addIncludePath(.{ .path = "." });
|
||||||
|
exe.addCSourceFiles(&.{"main.cpp"}, &.{
|
||||||
|
"-Wall",
|
||||||
|
"-Wextra",
|
||||||
|
"-Wshadow",
|
||||||
|
});
|
||||||
|
const libasio_dep = b.dependency("beast", .{
|
||||||
|
.target = target,
|
||||||
|
.optimize = optimize,
|
||||||
|
});
|
||||||
|
const libasio = libasio_dep.artifact("beast");
|
||||||
|
for (libasio.include_dirs.items) |include| {
|
||||||
|
exe.include_dirs.append(include) catch {};
|
||||||
|
}
|
||||||
|
exe.linkLibrary(libasio);
|
||||||
|
exe.linkLibCpp();
|
||||||
|
|
||||||
|
b.installArtifact(exe);
|
||||||
|
const run_cmd = b.addRunArtifact(exe);
|
||||||
|
run_cmd.step.dependOn(b.getInstallStep());
|
||||||
|
if (b.args) |args| {
|
||||||
|
run_cmd.addArgs(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
const run_step = b.step("run", "Run C++ Http Server");
|
||||||
|
run_step.dependOn(&run_cmd.step);
|
||||||
|
}
|
10
wrk/cpp/build.zig.zon
Normal file
10
wrk/cpp/build.zig.zon
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
.{
|
||||||
|
.name = "cpp-beast",
|
||||||
|
.version = "0.1.0",
|
||||||
|
.dependencies = .{
|
||||||
|
.beast = .{
|
||||||
|
.url = "https://github.com/kassane/beast/archive/df69ba4d48fbe874730f6a28e9528d9ef7a9547c.tar.gz",
|
||||||
|
.hash = "1220548f8727394522081ab48ed2f7111c20fa5f051ff287ec3c3f82340faa5d68c2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
1
wrk/cpp/hello.html
Normal file
1
wrk/cpp/hello.html
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Hello from C++!!
|
66
wrk/cpp/main.cpp
Normal file
66
wrk/cpp/main.cpp
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <fstream>
|
||||||
|
#include <string>
|
||||||
|
#include <boost/beast.hpp>
|
||||||
|
|
||||||
|
namespace beast = boost::beast;
|
||||||
|
namespace http = beast::http;
|
||||||
|
namespace net = boost::asio;
|
||||||
|
using tcp = net::ip::tcp;
|
||||||
|
|
||||||
|
std::string read_html_file(const std::string& file_path) {
|
||||||
|
std::ifstream file(file_path);
|
||||||
|
if (!file) {
|
||||||
|
return "File not found: " + file_path;
|
||||||
|
}
|
||||||
|
std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
|
||||||
|
file.close();
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
try {
|
||||||
|
net::io_context io_context;
|
||||||
|
|
||||||
|
// Create an endpoint to bind to
|
||||||
|
tcp::endpoint endpoint(tcp::v4(), 8070);
|
||||||
|
|
||||||
|
// Create and bind the acceptor
|
||||||
|
tcp::acceptor acceptor(io_context, endpoint);
|
||||||
|
std::cout << "Server listening on port 8070..." << std::endl;
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
// Wait for a client to connect
|
||||||
|
tcp::socket socket(io_context);
|
||||||
|
acceptor.accept(socket);
|
||||||
|
|
||||||
|
// static 17-byte string
|
||||||
|
|
||||||
|
// Read HTML content from a file (e.g., "index.html")
|
||||||
|
// std::string html_content = read_html_file("hello.html");
|
||||||
|
// or
|
||||||
|
std::string msg = "Hello from C++!!!";
|
||||||
|
|
||||||
|
// std::cout << "str len: " << (html_content.length() == msg.length()) << std::boolalpha << "\n";
|
||||||
|
|
||||||
|
// Construct an HTTP response with the HTML content
|
||||||
|
http::response<http::string_body> response;
|
||||||
|
response.version(11);
|
||||||
|
response.result(http::status::ok);
|
||||||
|
response.reason("OK");
|
||||||
|
response.set(http::field::server, "C++ Server");
|
||||||
|
response.set(http::field::content_type, "text/html");
|
||||||
|
|
||||||
|
// response.body() = html_content;
|
||||||
|
response.body() = msg;
|
||||||
|
response.prepare_payload();
|
||||||
|
|
||||||
|
// Send the response to the client
|
||||||
|
http::write(socket, response);
|
||||||
|
}
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
std::cerr << "Error: " << e.what() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -68,6 +68,13 @@ if [ "$SUBJECT" = "csharp" ] ; then
|
||||||
URL=http://127.0.0.1:5026
|
URL=http://127.0.0.1:5026
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ "$SUBJECT" = "cpp" ] ; then
|
||||||
|
cd wrk/cpp && zig build -Doptimize=ReleaseFast
|
||||||
|
./zig-out/bin/cpp-beast 127.0.0.1 8070 . &
|
||||||
|
PID=$!
|
||||||
|
URL=http://127.0.0.1:8070
|
||||||
|
fi
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
echo "========================================================================"
|
echo "========================================================================"
|
||||||
echo " $SUBJECT"
|
echo " $SUBJECT"
|
||||||
|
|
Loading…
Add table
Reference in a new issue