40 lines
1.1 KiB
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;
|
|
}
|
|
}
|
|
};
|