forked from MTSR/mapserver
travelnet parser wip
This commit is contained in:
parent
710c327a87
commit
6836551d40
75
server/travelnetparser/parser.go
Normal file
75
server/travelnetparser/parser.go
Normal file
@ -0,0 +1,75 @@
|
||||
package travelnetparser
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"mapserver/luaparser"
|
||||
)
|
||||
|
||||
type GenericPos struct {
|
||||
X int `json:"x"`
|
||||
Y int `json:"y"`
|
||||
Z int `json:"z"`
|
||||
}
|
||||
|
||||
type Travelnet struct {
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Pos *GenericPos `json:"pos"`
|
||||
}
|
||||
|
||||
func ParseFile(filename string) (map[string]map[string]map[string]*Travelnet, error) {
|
||||
content, err := ioutil.ReadFile(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return Parse(content)
|
||||
}
|
||||
|
||||
// owner -> network -> name ->Travelnet-Data
|
||||
func Parse(data []byte) (map[string]map[string]map[string]*Travelnet, error) {
|
||||
p := luaparser.New()
|
||||
travelnets := make(map[string]map[string]map[string]*Travelnet)
|
||||
|
||||
ownermap, err := p.ParseMap(string(data[:]))
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for owner, rawnetworkmap := range ownermap {
|
||||
fmt.Println(owner)
|
||||
|
||||
networkmap, ok := rawnetworkmap.(map[string]interface{})
|
||||
if !ok {
|
||||
return nil, errors.New("networkmap parsing failed")
|
||||
}
|
||||
|
||||
for network, rawstationmap := range networkmap {
|
||||
fmt.Println("+", network)
|
||||
|
||||
stationmap, ok := rawstationmap.(map[string]interface{})
|
||||
if !ok {
|
||||
return nil, errors.New("stationmap parsing failed")
|
||||
}
|
||||
|
||||
for station, rawentries := range stationmap {
|
||||
fmt.Println("++", station)
|
||||
|
||||
entries, ok := rawentries.(map[string]interface{})
|
||||
if !ok {
|
||||
return nil, errors.New("entries parsing failed")
|
||||
}
|
||||
|
||||
for entry := range entries {
|
||||
fmt.Println("+++", entry)
|
||||
//TODO:
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return travelnets, nil
|
||||
}
|
26
server/travelnetparser/parser_test.go
Normal file
26
server/travelnetparser/parser_test.go
Normal file
@ -0,0 +1,26 @@
|
||||
package travelnetparser
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestParse(t *testing.T) {
|
||||
|
||||
//TODO: test takes about 3 seconds for 350kb data :/
|
||||
a, err := ParseFile("testdata/mod_travelnet.data")
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
j, err := json.MarshalIndent(a, "", " ")
|
||||
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
fmt.Println(string(j[:]))
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user