/
snapshotResponse.go
90 lines (70 loc) · 1.47 KB
/
snapshotResponse.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package darwind3
import (
"encoding/xml"
"log"
)
// Snapshot Response
type SR struct {
XMLName xml.Name `json:"-" xml:"sR"`
Actions []Processor
}
func (s *SR) UnmarshalXML(decoder *xml.Decoder, start xml.StartElement) error {
for {
token, err := decoder.Token()
if err != nil {
return err
}
switch tok := token.(type) {
case xml.StartElement:
var elem Processor
switch tok.Name.Local {
case "schedule":
elem = &Schedule{}
case "deactivated":
elem = &DeactivatedSchedule{}
case "TS":
elem = &TS{}
case "trainOrder":
elem = &trainOrderWrapper{}
case "OW":
elem = &StationMessage{}
case "formationLoading":
elem = &Loading{}
case "association":
elem = &Association{}
case "trackingID":
elem = &TrackingID{}
case "alarm":
elem = &RttiAlarm{}
case "scheduleFormations":
elem = &ScheduleFormation{}
// Unsupported (so far) elements:
// trainAlert
default:
log.Println("Skipping", tok.Name.Local, tok.Name.Space)
if err := decoder.Skip(); err != nil {
return err
}
}
if elem != nil {
if err := decoder.DecodeElement(elem, &tok); err != nil {
return err
}
s.Actions = append(s.Actions, elem)
}
case xml.EndElement:
return nil
}
}
}
// Process this message
func (p *SR) Process(tx *Transaction) error {
if len(p.Actions) > 0 {
for _, s := range p.Actions {
if err := s.Process(tx); err != nil {
return err
}
}
}
return nil
}