This commit is contained in:
Yuzu 2024-11-08 19:23:12 +00:00
parent aea624ea64
commit 425c8646d7
2 changed files with 11 additions and 14 deletions

View File

@ -197,7 +197,7 @@ pub fn login(allocator: mem.Allocator, args: struct {
defer parsed.deinit();
const url = parsed.value.url["wss://".len..];
return .{
var self: Self = .{
.allocator = allocator,
.token = args.token,
.intents = args.intents,
@ -210,6 +210,11 @@ pub fn login(allocator: mem.Allocator, args: struct {
.packets = std.ArrayList(u8).init(allocator),
.inflator = try zlib.Decompressor.init(allocator, .{ .header = .zlib_or_gzip }),
};
const event_listener = try std.Thread.spawn(.{}, Self.readMessage, .{ &self, null });
event_listener.join();
return self;
}
inline fn _connect_ws(allocator: mem.Allocator, url: []const u8) !ws.Client {
@ -301,7 +306,7 @@ pub fn readMessage(self: *Self, _: anytype) !void {
var prng = std.Random.DefaultPrng.init(0);
const jitter = std.Random.float(prng.random(), f64);
self.heart.lastBeat = std.time.milliTimestamp();
const heartbeat_writer = try std.Thread.spawn(.{}, Self.heartbeat, .{ self, jitter });
heartbeat_writer.detach();
},
@ -371,7 +376,7 @@ pub fn heartbeat(self: *Self, initial_jitter: f64) !void {
try self.send(.{ .op = @intFromEnum(Opcode.Heartbeat), .d = seq });
self.ws_mutex.unlock();
if (last > (5100 * self.heart.heartbeatInterval)) {
if ((std.time.milliTimestamp() - last) > (5000 * self.heart.heartbeatInterval)) {
self.close(ShardSocketCloseCodes.ZombiedConnection, "Zombied connection") catch unreachable;
@panic("zombied conn\n");
}

View File

@ -21,19 +21,14 @@ fn message_create(session: *Shard, message: Discord.Message) void {
defer session.allocator.free(json);
const path = std.fmt.allocPrint(session.allocator, "/channels/{d}/messages", .{message.channel_id.value()}) catch unreachable;
_ = req.makeRequest(
.POST,
path,
json,
) catch unreachable;
_ = req.makeRequest(.POST, path, json) catch unreachable;
};
}
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
const allocator = gpa.allocator();
var tsa = std.heap.ThreadSafeAllocator{ .child_allocator = std.heap.c_allocator };
var handler = try Shard.login(allocator, .{
var handler = try Shard.login(tsa.allocator(), .{
.token = std.posix.getenv("TOKEN") orelse unreachable,
.intents = Intents.fromRaw(37379),
.run = Internal.GatewayDispatchEvent(*Shard){
@ -43,7 +38,4 @@ pub fn main() !void {
.log = .yes,
});
errdefer handler.deinit();
const event_listener = try std.Thread.spawn(.{}, Shard.readMessage, .{ &handler, null });
event_listener.join();
}