Skip to content

Commit

Permalink
basic example working
Browse files Browse the repository at this point in the history
  • Loading branch information
zachgrayio committed Jul 15, 2022
1 parent 14ead4b commit 5c87f75
Show file tree
Hide file tree
Showing 10 changed files with 62 additions and 22 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ run_greeter_server: build

.PHONY: run_greeter_client
run_greeter_client: build
zig build run_greeter_client -- --port=8000
sleep 3 && zig build run_greeter_client -- --port=8000

.PHONY: clean
clean:
Expand Down
3 changes: 3 additions & 0 deletions build.zig
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ pub fn build(b: *std.build.Builder) void {
greeter_server.addPackagePath("clap", "deps/zig-clap/clap.zig");
greeter_server.linkLibC();
greeter_server.linkLibCpp();
greeter_server.addIncludePath("src/helloworld");
greeter_server.addIncludePath("bazel-bin");
greeter_server.addIncludePath("bazel-bin/src/protos");
greeter_server.addObjectFile("bazel-bin/src/helloworld/libgreeter_server.so");
greeter_server.setTarget(target);
greeter_server.setBuildMode(mode);
greeter_server.install();
Expand Down
4 changes: 4 additions & 0 deletions src/global.zig
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,7 @@ pub const grpc = @cImport({
pub const greeter_client = @cImport({
@cInclude("greeter_client.h");
});

pub const greeter_server = @cImport({
@cInclude("greeter_server.h");
});
21 changes: 14 additions & 7 deletions src/greeter_client.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,24 @@ const cli = @import("cli.zig");
const global = @import("global.zig");
const std = @import("std");

const fmt = std.fmt;
const debug = std.log.debug;
const grpc = global.grpc;
const greeter_client = global.greeter_client;

pub fn main() !void {
debug("Greeter Client", .{});
const alloc = std.heap.c_allocator;
const args = try cli.parseArgs();
debug("port {}", .{args.port});
const target: [*c]const u8 = "localhost:3000";
const user: [*c]const u8 = "world";
debug("calling CC...", .{});
const response: [*c]const u8 = greeter_client.sayHello(target.*, user.*);
debug("response: {s}", .{response});
const target = try fmt.allocPrint(alloc, "0.0.0.0:{any}", .{args.port});
defer alloc.free(target);
debug("Greeter Client - Dialing {s}", .{target});

var i: i16 = 1;
while (i <= 100) : (i += 1) {
const user = try fmt.allocPrint(alloc, "Elfo_{}", .{i});
defer alloc.free(user);
const response: [*c]const u8 = greeter_client.sayHello(target.ptr, user.ptr);
debug("response: {s}", .{response});
}
debug("client finished; kill server with CTRL+C?", .{});
}
11 changes: 9 additions & 2 deletions src/greeter_server.zig
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,17 @@ const cli = @import("cli.zig");
const global = @import("global.zig");
const std = @import("std");

const fmt = std.fmt;
const debug = std.log.debug;
const grpc = global.grpc;
const greeter_server = global.greeter_server;

pub fn main() !void {
std.log.debug("Greeter Server", .{});
const alloc = std.heap.c_allocator;
const args = try cli.parseArgs();
std.log.debug("port {}", .{args.port});
const server_address = try fmt.allocPrint(alloc, "0.0.0.0:{any}", .{args.port});
defer alloc.free(server_address);
debug("Greeter Server - Running on {s}", .{server_address});
const res: c_int = greeter_server.runBlocking(server_address.ptr); // this call blocks
debug("server exited with code {any}", .{res});
}
10 changes: 8 additions & 2 deletions src/helloworld/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,16 @@ cc_binary(
],
)

cc_library(
# cc_library(
cc_binary(
name = "greeter_server",
srcs = ["greeter_server.cc"],
srcs = [
"greeter_server.cc",
"greeter_server.h",
],
defines = ["BAZEL_BUILD"],
linkstatic = 1,
linkshared = True,
deps = [
"@com_github_grpc_grpc//:grpc++",
"@com_github_grpc_grpc//:grpc++_reflection",
Expand Down
4 changes: 2 additions & 2 deletions src/helloworld/greeter_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ class GreeterClient {

const char* sayHello(char* target, char* user) {
// return strdup(std::string("test").c_str());
// std::cout << "test from cc" << std::endl;
auto user_string = strdup(std::string(user).c_str());
GreeterClient greeter(grpc::CreateChannel(std::string(target), grpc::InsecureChannelCredentials()));
std::string reply = greeter.SayHello(std::string(user));
std::string reply = greeter.SayHello(user_string);
return strdup(reply.c_str());
}
6 changes: 3 additions & 3 deletions src/helloworld/greeter_client.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#ifndef ZIG_GRPC_EXAMPLE_FOO_H
#define ZIG_GRPC_EXAMPLE_FOO_H
#ifndef ZIG_GRPC_EXAMPLE_GREETER_CLIENT_H
#define ZIG_GRPC_EXAMPLE_GREETER_CLIENT_H

#ifdef __cplusplus
extern "C" {
Expand All @@ -11,4 +11,4 @@ const char* sayHello(char* target, char* user);
}
#endif

#endif //ZIG_GRPC_EXAMPLE_FOO_H
#endif //ZIG_GRPC_EXAMPLE_GREETER_CLIENT_H
9 changes: 4 additions & 5 deletions src/helloworld/greeter_server.cc
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

#ifdef BAZEL_BUILD
#include "src/protos/helloworld.grpc.pb.h"
#include "src/helloworld/greeter_server.h"
#else
#include "helloworld.grpc.pb.h"
#endif
Expand All @@ -48,8 +49,7 @@ class GreeterServiceImpl final : public Greeter::Service {
}
};

void RunServer() {
std::string server_address("0.0.0.0:50051");
void RunServer(std::string server_address) {
GreeterServiceImpl service;

grpc::EnableDefaultHealthCheckService(true);
Expand All @@ -69,8 +69,7 @@ void RunServer() {
server->Wait();
}

int main(int argc, char** argv) {
RunServer();

int runBlocking(char* server_address) {
RunServer(std::string(server_address));
return 0;
}
14 changes: 14 additions & 0 deletions src/helloworld/greeter_server.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#ifndef ZIG_GRPC_EXAMPLE_GREETER_SERVER_H
#define ZIG_GRPC_EXAMPLE_GREETER_SERVER_H

#ifdef __cplusplus
extern "C" {
#endif

int runBlocking(char* server_address);

#ifdef __cplusplus
}
#endif

#endif //ZIG_GRPC_EXAMPLE_GREETER_SERVER_H

0 comments on commit 5c87f75

Please sign in to comment.