121 lines
2.2 KiB
Go
121 lines
2.2 KiB
Go
package cache
|
|
|
|
import (
|
|
"jannex/robot-control-manager/modules/structs"
|
|
"jannex/robot-control-manager/modules/utils"
|
|
"sync"
|
|
|
|
"git.ex.umbach.dev/Alex/roese-utils/rspagination"
|
|
)
|
|
|
|
var robots = make(map[string]*structs.Robot)
|
|
var rMu sync.RWMutex
|
|
|
|
func AddRobot(robot *structs.Robot) {
|
|
rMu.Lock()
|
|
defer rMu.Unlock()
|
|
|
|
robots[robot.Id] = robot
|
|
}
|
|
|
|
func AddRobots(newRobots []structs.Robot) {
|
|
rMu.Lock()
|
|
defer rMu.Unlock()
|
|
|
|
for i := range newRobots {
|
|
r := &newRobots[i]
|
|
robots[r.Id] = r
|
|
}
|
|
}
|
|
|
|
func GetRobots() map[string]*structs.Robot {
|
|
rMu.RLock()
|
|
defer rMu.RUnlock()
|
|
|
|
return robots
|
|
}
|
|
|
|
func GetAllRobots(query rspagination.PageQuery) structs.RobotsResponse {
|
|
rMu.RLock()
|
|
defer rMu.RUnlock()
|
|
|
|
var r []structs.APIRobot
|
|
|
|
for _, v := range robots {
|
|
r = append(r, structs.APIRobot{
|
|
Id: v.Id,
|
|
Type: v.Type,
|
|
Name: v.Name,
|
|
Status: v.Status,
|
|
Address: v.Address,
|
|
CurrentJobId: v.CurrentJobId,
|
|
CurrentJobName: v.CurrentJobName,
|
|
JobsWaitingCount: v.JobsWaitingCount,
|
|
JobsWaitingNameList: v.JobsWaitingNameList,
|
|
FirmwareVersion: v.FirmwareVersion,
|
|
ConnectedAt: v.ConnectedAt,
|
|
CreatedAt: v.CreatedAt,
|
|
})
|
|
}
|
|
|
|
start, end := rspagination.GetPage(len(r), query.Page, utils.RobotsPageLimit)
|
|
|
|
return structs.RobotsResponse{
|
|
Robots: r[start:end],
|
|
TotalPages: rspagination.CalculateTotalPages(len(r), utils.RobotsPageLimit),
|
|
}
|
|
}
|
|
|
|
func IsRobotInList(robotId string) bool {
|
|
rMu.RLock()
|
|
defer rMu.RUnlock()
|
|
|
|
for _, r := range robots {
|
|
if r.Id == robotId {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func GetRobotByName(robotName string) *structs.Robot {
|
|
rMu.RLock()
|
|
defer rMu.RUnlock()
|
|
|
|
for _, r := range robots {
|
|
if r.Name == robotName {
|
|
return r
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func GetRobotById(robotId string) *structs.Robot {
|
|
rMu.RLock()
|
|
defer rMu.RUnlock()
|
|
|
|
return robots[robotId]
|
|
}
|
|
|
|
func RemoveRobotById(robotId string) {
|
|
rMu.Lock()
|
|
defer rMu.Unlock()
|
|
|
|
delete(robots, robotId)
|
|
}
|
|
|
|
func IsRobotNameInList(robotName string) bool {
|
|
rMu.RLock()
|
|
defer rMu.RUnlock()
|
|
|
|
for _, r := range robots {
|
|
if r.Name == robotName {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|