From c8a641dd784c071f83a0d90c35f617607fd0811b Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期日, 20 十月 2024 02:26:01 +0800
Subject: [PATCH] 修改楼层缓存为双向链表

---
 nvcs/cache.go |   29 +++++++++++++++++++++--------
 1 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/nvcs/cache.go b/nvcs/cache.go
index e792c55..1c78d93 100644
--- a/nvcs/cache.go
+++ b/nvcs/cache.go
@@ -1,6 +1,7 @@
 package nvcs
 
 import (
+	"container/list"
 	"fmt"
 	"time"
 
@@ -10,13 +11,13 @@
 )
 
 type simpleCache struct {
-	data       map[int64]elevatorRunData
+	data       *list.List
 	expiration time.Duration
 }
 
 func newCache(expiration time.Duration) *simpleCache {
 	return &simpleCache{
-		data:       make(map[int64]elevatorRunData),
+		data:       list.New(),
 		expiration: expiration,
 	}
 }
@@ -31,9 +32,12 @@
 		data.Floor = gRFIDFloor
 	}
 
+	lastData := c.data.Back()
+
+	c.data.PushBack(data)
 	// 濡傛灉妤煎眰鐩稿悓锛屽苟涓旀暟鎹湪1绉掑唴锛屽垯蹇界暐
-	if existingData, ok := c.data[data.Timestamp]; ok {
-		if existingData.Floor == data.Floor {
+	if lastData.Value.(elevatorRunData).Timestamp == data.Timestamp {
+		if lastData.Value.(elevatorRunData).Floor == data.Floor {
 			return
 		}
 	}
@@ -72,14 +76,23 @@
 		go addFloorToOSD(floorText)
 	}
 
-	c.data[data.Timestamp] = data
+	c.data.PushBack(data)
 }
 
 // 鍒犻櫎杩囨湡鏁版嵁
 func (c *simpleCache) cleanExpired() {
-	for t := range c.data {
-		if time.Since(time.Unix(t, 0)) > c.expiration {
-			delete(c.data, t)
+	now := time.Now()
+
+	// 浠庨槦鍒楀ご閮ㄥ紑濮嬫鏌ユ槸鍚︽湁杩囨湡鏁版嵁
+	for c.data.Len() > 0 {
+		elem := c.data.Front() // 鑾峰彇闃熷垪澶撮儴鐨勫厓绱�
+		item := elem.Value.(elevatorRunData)
+		if now.Sub(time.Unix(item.Timestamp, 0)) > c.expiration {
+			// 濡傛灉鏁版嵁宸茬粡杩囨湡锛屽垯浠庨槦鍒椾腑鍒犻櫎
+			c.data.Remove(elem)
+		} else {
+			// 鍥犱负鏁版嵁鎸夋椂闂撮『搴忓瓨鍌紝閬囧埌涓嶈繃鏈熺殑鏁版嵁鍚庡氨鍙互鍋滄妫�鏌�
+			break
 		}
 	}
 }

--
Gitblit v1.8.0