package plc_address
|
|
import (
|
"apsClient/constvar"
|
"apsClient/pkg/logx"
|
"apsClient/utils/file"
|
"fmt"
|
"github.com/spf13/cast"
|
"os"
|
"strings"
|
"sync"
|
)
|
|
type addressMap struct {
|
store sync.Map
|
}
|
|
var defaultAddressMap *addressMap
|
|
func newAddressMap() *addressMap {
|
return &addressMap{store: sync.Map{}}
|
}
|
|
func init() {
|
defaultAddressMap = newAddressMap()
|
}
|
|
func Set(key string, value int) {
|
defaultAddressMap.store.Store(key, value)
|
}
|
|
func Get(key string) (value int, ok bool) {
|
if v, ok := defaultAddressMap.store.Load(key); ok {
|
return v.(int), ok
|
}
|
return 0, false
|
}
|
|
var LoadOk bool
|
|
func IsLoad() bool {
|
return LoadOk
|
}
|
|
func LoadAddressFromFile() (loadOk bool) {
|
keyFileName := fmt.Sprintf("%s%s", constvar.PlcAddressDataPath, constvar.PlcAddressDataKeyFileName)
|
addressFileName := fmt.Sprintf("%s%s", constvar.PlcAddressDataPath, constvar.PlcAddressDataValueFileName)
|
if !file.Exists(keyFileName) || !file.Exists(addressFileName) {
|
return
|
}
|
keyData, err := os.ReadFile(keyFileName)
|
if err != nil {
|
logx.Errorf("LoadAddressFromFile ReadFile err: %v", err.Error())
|
return
|
}
|
addressData, err := os.ReadFile(addressFileName)
|
if err != nil {
|
logx.Errorf("LoadAddressFromFile ReadFile err: %v", err.Error())
|
return
|
}
|
keyString := string(keyData)
|
addressString := string(addressData)
|
keys := strings.Split(keyString, "\n")
|
addresses := strings.Split(addressString, "\n")
|
if len(keys) != len(addresses) {
|
logx.Error("plc address message error: key length not equal address length")
|
return
|
}
|
for i := 0; i < len(keys); i++ {
|
key := strings.ReplaceAll(keys[i], "\r", "")
|
address := cast.ToInt(strings.ReplaceAll(addresses[i], "\r", ""))
|
Set(key, address)
|
}
|
LoadOk = true
|
return true
|
}
|