49 lines
787 B
Go
49 lines
787 B
Go
package database
|
|
|
|
import (
|
|
"net"
|
|
"time"
|
|
|
|
"github.com/bdlm/log"
|
|
|
|
"dev.sum7.eu/genofire/golang-lib/file"
|
|
"dev.sum7.eu/genofire/golang-lib/worker"
|
|
)
|
|
|
|
type DB struct {
|
|
Clients map[string]*Client `json:"client"`
|
|
APs map[string]*AP `json:"ap"`
|
|
worker *worker.Worker
|
|
}
|
|
|
|
func NewDB(path string) *DB {
|
|
db := &DB{
|
|
Clients: make(map[string]*Client),
|
|
APs: make(map[string]*AP),
|
|
}
|
|
|
|
file.ReadJSON(path, db)
|
|
|
|
for addr, client := range db.Clients {
|
|
client.Addr, _ = net.ParseMAC(addr)
|
|
if ap, ok := db.APs[client.APAddr]; ok {
|
|
client.AP = ap
|
|
}
|
|
}
|
|
|
|
db.worker = worker.NewWorker(time.Minute, func() {
|
|
file.SaveJSON(path, db)
|
|
log.Debug("save db state")
|
|
})
|
|
|
|
db.worker.Start()
|
|
|
|
return db
|
|
}
|
|
|
|
func (db *DB) Close() {
|
|
if db.worker != nil {
|
|
db.worker.Close()
|
|
}
|
|
}
|