-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcache.go
More file actions
108 lines (84 loc) · 2.14 KB
/
cache.go
File metadata and controls
108 lines (84 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package main
import (
"bytes"
"encoding/json"
"goFactServView/cwlog"
"os"
"time"
)
const (
CacheFile = "data/cache.json"
CacheVersion = 2
)
func ReadServerCache() {
FetchLock.Lock()
defer FetchLock.Unlock()
_, err := os.Stat(CacheFile)
notfound := os.IsNotExist(err)
if notfound {
return
} else { /* Otherwise just read in the config */
info, err := os.Stat(CacheFile)
lastRefresh := time.Time{}
if err == nil {
lastRefresh = info.ModTime()
}
file, err := os.ReadFile(CacheFile)
if file != nil && err == nil {
tempServerList := CacheData{}
err := json.Unmarshal([]byte(file), &tempServerList)
if err != nil {
cwlog.DoLog(true, "ReadServerList: Unmarshal failure")
return
}
if tempServerList.Version < CacheVersion {
cwlog.DoLog(false, "Cache data is incompatable, skipping.")
return
}
if len(tempServerList.Servers) > MinValidCount {
sParam.ServerList.Servers = sortServers(false, tempServerList.Servers, SORT_PLAYER)
getVersions()
sParam.LastRefresh = lastRefresh
sParam.ServersCount = len(tempServerList.Servers)
cwlog.DoLog(true, "Read cached server list.")
}
totalPlayers := 0
for _, item := range tempServerList.Servers {
totalPlayers = totalPlayers + len(item.Players)
}
sParam.PlayerCount = totalPlayers
return
} else {
cwlog.DoLog(true, "ReadServerList: Read file failure")
return
}
}
}
func WriteServerCache() {
tempPath := CacheFile + ".tmp"
outbuf := new(bytes.Buffer)
enc := json.NewEncoder(outbuf)
enc.SetIndent("", "\t")
if len(sParam.ServerList.Servers) <= MinValidCount {
return
}
sParam.ServerList.Version = CacheVersion
if err := enc.Encode(sParam.ServerList); err != nil {
cwlog.DoLog(true, "WriteServerList: enc.Encode failure")
return
}
_, err := os.Create(tempPath)
if err != nil {
cwlog.DoLog(true, "WriteServerList: os.Create failure")
return
}
err = os.WriteFile(tempPath, outbuf.Bytes(), 0644)
if err != nil {
cwlog.DoLog(true, "WriteServerList: Write file failure")
}
err = os.Rename(tempPath, CacheFile)
if err != nil {
cwlog.DoLog(true, "Couldn't rename cache file.")
return
}
}