individually tick heartbeat for each client

This commit is contained in:
Reese Norris
2024-10-22 12:41:35 -07:00
parent c0cc3d218e
commit a683c24300
2 changed files with 12 additions and 29 deletions

View File

@@ -7,6 +7,7 @@ import (
"github.com/renorris/openfsd/protocol"
"github.com/renorris/openfsd/servercontext"
"log"
"time"
)
// EventLoop runs the main event loop for a logged in client
@@ -18,6 +19,11 @@ func (c *FSDClient) EventLoop() error {
log.Printf("client_disconnected total_clients=%d %s", servercontext.PostOffice().NumRegistered()-1, infoStr)
}()
// Set up heartbeat ticker
heartbeatPacket := "#DLSERVER:*:0:0" + protocol.PacketDelimiter
heartbeatTicker := time.NewTicker(30 * time.Second)
defer heartbeatTicker.Stop()
// Post-login FSD client event loop
for {
select {
@@ -43,6 +49,12 @@ func (c *FSDClient) EventLoop() error {
// Handle incoming kill signals
case killPacket := <-c.kill:
return c.connection.WritePacketImmediately(killPacket)
// Listen for heartbeat ticker
case <-heartbeatTicker.C:
if err := c.connection.WritePacket(heartbeatPacket); err != nil {
return err
}
}
}
}