aboutsummaryrefslogtreecommitdiff
path: root/hotline
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2022-05-27 10:44:52 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2022-05-27 10:44:52 -0700
commit61c272e101b6f0444c7b2a666b0b5e828ba6db03 (patch)
treec9bc0c571cbfb63c70b37eb5e39ae797714fc756 /hotline
parent6f0f1ef7c51f8d495a5818c4864650a7e1cfc8ef (diff)
Simplify user idle check
Diffstat (limited to 'hotline')
-rw-r--r--hotline/client_conn.go38
-rw-r--r--hotline/client_conn_test.go3
-rw-r--r--hotline/server.go7
-rw-r--r--hotline/transaction_handlers.go6
4 files changed, 25 insertions, 29 deletions
diff --git a/hotline/client_conn.go b/hotline/client_conn.go
index 8e9a614..b43a6ff 100644
--- a/hotline/client_conn.go
+++ b/hotline/client_conn.go
@@ -31,7 +31,7 @@ type ClientConn struct {
Flags *[]byte
UserName []byte
Account *Account
- IdleTime *int
+ IdleTime int
Server *Server
Version *[]byte
Idle bool
@@ -103,28 +103,28 @@ func (cc *ClientConn) handleTransaction(transaction *Transaction) error {
cc.Server.mux.Lock()
defer cc.Server.mux.Unlock()
- // if user was idle and this is a non-keepalive transaction
- if *cc.IdleTime > userIdleSeconds && requestNum != tranKeepAlive {
- flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(*cc.Flags)))
- flagBitmap.SetBit(flagBitmap, userFlagAway, 0)
- binary.BigEndian.PutUint16(*cc.Flags, uint16(flagBitmap.Int64()))
- cc.Idle = false
- //*cc.IdleTime = 0
+ if requestNum != tranKeepAlive {
+ // reset the user idle timer
+ cc.IdleTime = 0
- cc.sendAll(
- tranNotifyChangeUser,
- NewField(fieldUserID, *cc.ID),
- NewField(fieldUserFlags, *cc.Flags),
- NewField(fieldUserName, cc.UserName),
- NewField(fieldUserIconID, *cc.Icon),
- )
+ // if user was previously idle, mark as not idle and notify other connected clients that
+ // the user is no longer away
+ if cc.Idle {
+ flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(*cc.Flags)))
+ flagBitmap.SetBit(flagBitmap, userFlagAway, 0)
+ binary.BigEndian.PutUint16(*cc.Flags, uint16(flagBitmap.Int64()))
+ cc.Idle = false
- //return nil
+ cc.sendAll(
+ tranNotifyChangeUser,
+ NewField(fieldUserID, *cc.ID),
+ NewField(fieldUserFlags, *cc.Flags),
+ NewField(fieldUserName, cc.UserName),
+ NewField(fieldUserIconID, *cc.Icon),
+ )
+ }
}
- // TODO: Don't we need to skip this if requestNum == tranKeepalive ??
- *cc.IdleTime = 0
-
return nil
}
diff --git a/hotline/client_conn_test.go b/hotline/client_conn_test.go
index 6e3464f..2176185 100644
--- a/hotline/client_conn_test.go
+++ b/hotline/client_conn_test.go
@@ -13,7 +13,7 @@ func TestClientConn_handleTransaction(t *testing.T) {
Flags *[]byte
UserName []byte
Account *Account
- IdleTime *int
+ IdleTime int
Server *Server
Version *[]byte
Idle bool
@@ -39,7 +39,6 @@ func TestClientConn_handleTransaction(t *testing.T) {
Flags: tt.fields.Flags,
UserName: tt.fields.UserName,
Account: tt.fields.Account,
- IdleTime: tt.fields.IdleTime,
Server: tt.fields.Server,
Version: tt.fields.Version,
Idle: tt.fields.Idle,
diff --git a/hotline/server.go b/hotline/server.go
index 61cd7fa..c5a29ba 100644
--- a/hotline/server.go
+++ b/hotline/server.go
@@ -278,8 +278,8 @@ func (s *Server) keepaliveHandler() {
s.mux.Lock()
for _, c := range s.Clients {
- *c.IdleTime += idleCheckInterval
- if *c.IdleTime > userIdleSeconds && !c.Idle {
+ c.IdleTime += idleCheckInterval
+ if c.IdleTime > userIdleSeconds && !c.Idle {
c.Idle = true
flagBitmap := big.NewInt(int64(binary.BigEndian.Uint16(*c.Flags)))
@@ -327,7 +327,6 @@ func (s *Server) NewClientConn(conn net.Conn) *ClientConn {
Connection: conn,
Server: s,
Version: &[]byte{},
- IdleTime: new(int),
AutoReply: &[]byte{},
Transfers: make(map[int][]*FileTransfer),
Agreed: false,
@@ -335,8 +334,6 @@ func (s *Server) NewClientConn(conn net.Conn) *ClientConn {
*s.NextGuestID++
ID := *s.NextGuestID
- *clientConn.IdleTime = 0
-
binary.BigEndian.PutUint16(*clientConn.ID, ID)
s.Clients[ID] = clientConn
diff --git a/hotline/transaction_handlers.go b/hotline/transaction_handlers.go
index ade024c..5aa6984 100644
--- a/hotline/transaction_handlers.go
+++ b/hotline/transaction_handlers.go
@@ -1399,9 +1399,9 @@ func HandleSetClientUserInfo(cc *ClientConn, t *Transaction) (res []Transaction,
return res, err
}
-// HandleKeepAlive response to keepalive transactions with an empty reply
-// HL 1.9.2 Client sends keepalive msg every 3 minutes
-// HL 1.2.3 Client doesn't send keepalives
+// HandleKeepAlive responds to keepalive transactions with an empty reply
+// * HL 1.9.2 Client sends keepalive msg every 3 minutes
+// * HL 1.2.3 Client doesn't send keepalives
func HandleKeepAlive(cc *ClientConn, t *Transaction) (res []Transaction, err error) {
res = append(res, cc.NewReply(t))