mapserver/app/config.go

115 lines
2.2 KiB
Go
Raw Normal View History

2019-01-18 11:03:57 +03:00
package app
import (
2019-01-18 11:13:37 +03:00
"encoding/json"
"io/ioutil"
2019-01-21 12:53:58 +03:00
"mapserver/coords"
2019-01-21 13:13:00 +03:00
"mapserver/layer"
2019-01-18 11:13:37 +03:00
"os"
2019-01-21 12:53:58 +03:00
"sync"
2019-01-18 11:03:57 +03:00
)
type Config struct {
2019-01-21 12:53:58 +03:00
Port int `json:"port"`
EnableInitialRendering bool `json:"enableinitialrendering"`
EnableIncrementalUpdate bool `json:"enableincrementalupdate"`
Webdev bool `json:"webdev"`
WebApi *WebApiConfig `json:"webapi"`
RenderState *RenderStateType `json:"renderstate"`
2019-01-21 13:13:00 +03:00
Layers []layer.Layer `json:"layers"`
2019-01-18 13:04:37 +03:00
}
type WebApiConfig struct {
EnableMapblock bool `json:"enablemapblock"`
2019-01-18 11:03:57 +03:00
}
2019-01-21 12:53:58 +03:00
type RenderStateType struct {
//Initial rendering flag (true=still active)
InitialRun bool `json:"initialrun"`
//Last initial rendering coords
LastX int `json:"lastx"`
LastY int `json:"lasty"`
LastZ int `json:"lastz"`
//Last mtime of incremental rendering
LastMtime int64 `json:"lastmtime"`
}
var lock sync.Mutex
const ConfigFile = "mapserver.json"
func (cfg *Config) Save() error {
return WriteConfig(ConfigFile, cfg)
}
func WriteConfig(filename string, cfg *Config) error {
lock.Lock()
defer lock.Unlock()
f, err := os.Create(filename)
if err != nil {
return err
}
defer f.Close()
str, err := json.MarshalIndent(cfg, "", " ")
if err != nil {
return err
}
f.Write(str)
return nil
}
2019-01-18 11:03:57 +03:00
func ParseConfig(filename string) (*Config, error) {
2019-01-18 13:04:37 +03:00
webapi := WebApiConfig{
EnableMapblock: false,
}
2019-01-21 12:53:58 +03:00
rstate := RenderStateType{
InitialRun: true,
LastX: coords.MinCoord,
LastY: coords.MinCoord,
LastZ: coords.MinCoord,
LastMtime: 0,
}
2019-01-21 13:13:00 +03:00
layers := []layer.Layer{
layer.Layer{
Id: 0,
Name: "Base",
From: -16,
To: 160,
},
}
2019-01-18 11:13:37 +03:00
cfg := Config{
2019-01-18 15:50:59 +03:00
Port: 8080,
EnableInitialRendering: true,
2019-01-18 15:07:01 +03:00
EnableIncrementalUpdate: true,
2019-01-18 15:50:59 +03:00
Webdev: false,
2019-01-21 12:53:58 +03:00
WebApi: &webapi,
RenderState: &rstate,
2019-01-21 13:13:00 +03:00
Layers: layers,
2019-01-18 11:13:37 +03:00
}
2019-01-18 11:03:57 +03:00
2019-01-18 11:13:37 +03:00
info, err := os.Stat(filename)
if info != nil && err == nil {
data, err := ioutil.ReadFile(filename)
if err != nil {
return nil, err
}
2019-01-18 11:03:57 +03:00
2019-01-18 11:13:37 +03:00
err = json.Unmarshal(data, &cfg)
if err != nil {
return nil, err
}
}
2019-01-18 11:03:57 +03:00
2019-01-18 11:13:37 +03:00
return &cfg, nil
2019-01-18 11:03:57 +03:00
}