artificer/cli/main.zig
2024-09-07 16:37:05 +03:00

49 lines
1.3 KiB
Zig

const std = @import("std");
const builtin = @import("builtin");
const Artificer = @import("artificer");
const Allocator = std.mem.Allocator;
fn getAPITokenFromArgs(allocator: Allocator) !?[]u8 {
const args = try std.process.argsAlloc(allocator);
defer std.process.argsFree(allocator, args);
if (args.len < 2) {
return null;
}
const filename = args[1];
const cwd = std.fs.cwd();
var token_buffer: [256]u8 = undefined;
const token = try cwd.readFile(filename, &token_buffer);
return try allocator.dupe(u8, std.mem.trim(u8,token,"\n\t "));
}
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
const token = (try getAPITokenFromArgs(allocator)) orelse return error.MissingToken;
defer allocator.free(token);
var artificer = try Artificer.init(allocator, token);
defer artificer.deinit();
if (builtin.mode != .Debug) {
std.log.info("Prefetching server data", .{});
try artificer.server.prefetch();
}
std.log.info("Starting main loop", .{});
while (true) {
const waitUntil = artificer.nextStepAt();
const duration = waitUntil - std.time.timestamp();
if (duration > 0) {
std.time.sleep(@intCast(duration));
}
try artificer.step();
}
}