mirror of
https://github.com/renorris/openfsd
synced 2026-04-14 13:55:35 +08:00
individually tick heartbeat for each client
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user