From c8a641dd784c071f83a0d90c35f617607fd0811b Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期日, 20 十月 2024 02:26:01 +0800
Subject: [PATCH] 修改楼层缓存为双向链表
---
controller/nvcsCtl.go | 6 ++++--
nvcs/nvcs.go | 9 +++++++++
nvcs/cache.go | 29 +++++++++++++++++++++--------
3 files changed, 34 insertions(+), 10 deletions(-)
diff --git a/controller/nvcsCtl.go b/controller/nvcsCtl.go
index c1ef35d..f3ed2bc 100644
--- a/controller/nvcsCtl.go
+++ b/controller/nvcsCtl.go
@@ -18,9 +18,11 @@
func (n NVCSController) RunStatus(c *gin.Context) {
var runStatus = make(map[string]string, 0)
- runStatus["floor"] = nvcs.ElevatorRunFloor
+ var floor, runState = nvcs.CurrentRunState()
- switch nvcs.ElevatorRunState {
+ runStatus["floor"] = floor
+
+ switch runState {
case 0:
runStatus["status"] = "鍋�"
case 1:
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
}
}
}
diff --git a/nvcs/nvcs.go b/nvcs/nvcs.go
index bf6ccd8..a6d5c0b 100644
--- a/nvcs/nvcs.go
+++ b/nvcs/nvcs.go
@@ -44,6 +44,15 @@
}
}
+func CurrentRunState() (string, int) {
+ runState := cache.data.Back().Value
+ if runState == nil {
+ return "", 0
+ }
+
+ return runState.(elevatorRunData).Floor, runState.(elevatorRunData).RunState
+}
+
func listenQueue() {
for {
data := queue.dequeue()
--
Gitblit v1.8.0