58 lines
1.6 KiB
Zig
58 lines
1.6 KiB
Zig
const std = @import("std");
|
|
const serde = @import("serde.zig");
|
|
const packet = @import("packet.zig");
|
|
|
|
pub fn main() !void {
|
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
|
const allocator = gpa.allocator();
|
|
|
|
var socket = std.net.StreamServer.init(.{ .reuse_address = true, .reuse_port = true });
|
|
defer socket.deinit();
|
|
|
|
try socket.listen(std.net.Address.initIp4(.{ 127, 0, 0, 1 }, 4949));
|
|
|
|
while (true) {
|
|
const server = try allocator.create(Server);
|
|
server.* = Server{
|
|
.allocator = allocator,
|
|
.conn = try socket.accept(),
|
|
};
|
|
const thread = try std.Thread.spawn(.{ .allocator = allocator }, Server.run, .{server});
|
|
thread.detach();
|
|
}
|
|
}
|
|
|
|
const Server = struct {
|
|
allocator: std.mem.Allocator,
|
|
conn: std.net.StreamServer.Connection,
|
|
|
|
const Self = @This();
|
|
|
|
pub fn run(self: *Self) !void {
|
|
std.debug.print("starting: {}\n", .{self.conn.address});
|
|
defer self.deinit();
|
|
|
|
while (true) {
|
|
var buffer: [@sizeOf(packet.Header)]u8 = undefined;
|
|
const len = try self.conn.stream.read(buffer[0..]);
|
|
// if (len < @sizeOf(packet.Header)) break;
|
|
if (len == 0) break;
|
|
std.debug.print("{}\n", .{len});
|
|
_ = try self.conn.stream.write(buffer[0..len]);
|
|
}
|
|
|
|
std.debug.print("finished\n", .{});
|
|
}
|
|
|
|
fn deinit(self: *Self) void {
|
|
std.debug.print("start deinit\n", .{});
|
|
self.conn.stream.close();
|
|
self.allocator.destroy(self);
|
|
std.debug.print("end deinit\n", .{});
|
|
}
|
|
};
|
|
|
|
test "main" {
|
|
std.debug.print("hello\n", .{});
|
|
}
|