1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
const std = @import("std");
const zits = @import("zits");
const yazap = @import("yazap");
const Message = zits.MessageParser.Message;
const Server = zits.Server;
pub fn main() !void {
var dba: std.heap.DebugAllocator(.{}) = .init;
defer _ = dba.deinit();
const gpa = dba.allocator();
var app = yazap.App.init(gpa, "zits", "High performance NATS compatible client and server.");
defer app.deinit();
var zits_app = app.rootCommand();
var server_cmd = app.createCommand("serve", "Run a high performance NATS compatible server.");
try server_cmd.addArgs(&[_]yazap.Arg{
yazap.Arg.singleValueOption(
"addr",
'a',
std.fmt.comptimePrint(
"Address to bind to (default: {s})",
.{std.meta.fieldInfo(zits.Server.ServerInfo, .host).defaultValue().?},
),
),
yazap.Arg.singleValueOption(
"port",
'p',
std.fmt.comptimePrint(
"Port to listen on (default: {d})",
.{std.meta.fieldInfo(zits.Server.ServerInfo, .port).defaultValue().?},
),
),
yazap.Arg.singleValueOption(
"name",
'n',
"Server name (default: auto)",
),
});
try zits_app.addSubcommand(server_cmd);
const pub_cmd = app.createCommand("pub", "Publish a message.");
try zits_app.addSubcommand(pub_cmd);
const matches = try app.parseProcess();
if (matches.subcommandMatches("serve")) |serve_matches| {
var info: zits.Server.ServerInfo = .{
.server_id = zits.Server.createId(),
.server_name = zits.Server.createName(),
.version = "zits-master",
.max_payload = 1048576,
};
if (serve_matches.getSingleValue("port")) |port| {
info.port = std.fmt.parseUnsigned(@TypeOf(info.port), port, 10) catch |err| std.process.fatal("Could not parse port ({s}): {}\n", .{ port, err });
}
if (serve_matches.getSingleValue("name")) |name| {
info.server_name = name;
}
try Server.main(gpa, info);
return;
}
}
// fn serverMain(gpa: std.mem.Allocator, iter: *std.process.ArgIterator, main_args: MainArgs) !void {
// _ = iter;
// _ = main_args;
// var group: std.Io.Group = .init;
// defer group.wait(io);
// for (0..5) |_| {
// const stream = try server.accept(io);
// group.async(io, handleConnection, .{ gpa, io, stream, info });
// }
// }
|