libertaria-stack/l2_session/heartbeat.zig

40 lines
1.1 KiB
Zig

//! Heartbeat and TTL management
//!
//! Keeps sessions alive through cooperative heartbeats.
const std = @import("std");
const Session = @import("session.zig").Session;
/// Heartbeat manager
pub const Heartbeat = struct {
/// Send a heartbeat to the peer
pub fn send(session: *Session, ctx: anytype) !void {
// TODO: Implement heartbeat sending
_ = session;
_ = ctx;
}
/// Process received heartbeat
pub fn receive(session: *Session, ctx: anytype) !void {
// TODO: Update last_activity, reset missed count
_ = session;
_ = ctx;
}
/// Check if heartbeat is due
pub fn isDue(session: *Session, now: i64) bool {
const elapsed = now - session.last_activity;
return elapsed >= session.config.heartbeat_interval.seconds();
}
/// Handle missed heartbeat
pub fn handleMissed(session: *Session) void {
session.missed_heartbeats += 1;
if (session.missed_heartbeats >= session.config.heartbeat_tolerance) {
// Transition to degraded state
session.state = .degraded;
}
}
};