minewebgen - internal/js/rpc.go
1 package main
2
3 import (
4 "net/rpc"
5 "net/rpc/jsonrpc"
6
7 "honnef.co/go/js/dom"
8
9 "vimagination.zapto.org/gopherjs/xdom"
10 "vimagination.zapto.org/gopherjs/xjs"
11 "vimagination.zapto.org/minewebgen/internal/data"
12 "github.com/gopherjs/gopherjs/js"
13 "github.com/gopherjs/websocket"
14 )
15
16 type jRPC struct {
17 rpc *rpc.Client
18 }
19
20 func rpcInit() error {
21 conn, err := websocket.Dial("ws://" + js.Global.Get("location").Get("host").String() + "/rpc")
22 if err != nil {
23 return err
24 }
25 conn.WebSocket.Call("addEventListener", "close", func(*js.Object) {
26 xjs.RemoveChildren(xdom.Body()).AppendChild(xjs.SetInnerText(xdom.H1(), "Connection Lost"))
27 }, false)
28 dom.GetWindow().AddEventListener("beforeunload", false, func(dom.Event) {
29 switch conn.ReadyState {
30 case websocket.Connecting, websocket.Open:
31 conn.Close()
32 }
33 })
34 RPC = jRPC{jsonrpc.NewClient(conn)}
35 return nil
36 }
37
38 var (
39 RPC jRPC
40 es = &struct{}{}
41 )
42
43 func (j jRPC) Settings() (data.ServerSettings, error) {
44 var s data.ServerSettings
45 err := j.rpc.Call("RPC.Settings", nil, &s)
46 return s, err
47 }
48
49 func (j jRPC) SetSettings(settings data.ServerSettings) error {
50 return j.rpc.Call("RPC.SetSettings", settings, es)
51 }
52
53 func (j jRPC) ServerName() (string, error) {
54 var name string
55 err := j.rpc.Call("RPC.ServerName", nil, &name)
56 return name, err
57 }
58
59 func (j jRPC) ServerList() ([]data.Server, error) {
60 var list []data.Server
61 err := j.rpc.Call("RPC.ServerList", nil, &list)
62 return list, err
63 }
64
65 func (j jRPC) MapList() ([]data.Map, error) {
66 var list []data.Map
67 err := j.rpc.Call("RPC.MapList", nil, &list)
68 return list, err
69 }
70
71 func (j jRPC) Server(id int) (data.Server, error) {
72 var s data.Server
73 err := j.rpc.Call("RPC.Server", id, &s)
74 return s, err
75 }
76
77 func (j jRPC) Map(id int) (data.Map, error) {
78 var m data.Map
79 err := j.rpc.Call("RPC.Map", id, &m)
80 return m, err
81 }
82
83 func (j jRPC) SetServer(s data.Server) error {
84 return j.rpc.Call("RPC.SetServer", s, es)
85 }
86
87 func (j jRPC) SetMap(m data.Map) error {
88 return j.rpc.Call("RPC.SetMap", m, es)
89 }
90
91 func (j jRPC) SetServerMap(serverID, mapID int) error {
92 return j.rpc.Call("RPC.SetServerMap", [2]int{serverID, mapID}, es)
93 }
94
95 func (j jRPC) ServerProperties(id int) (map[string]string, error) {
96 sp := make(map[string]string)
97 err := j.rpc.Call("RPC.ServerProperties", id, &sp)
98 return sp, err
99 }
100
101 func (j jRPC) SetServerProperties(id int, properties map[string]string) error {
102 return j.rpc.Call("RPC.SetServerProperties", data.ServerProperties{id, properties}, es)
103 }
104
105 func (j jRPC) MapProperties(id int) (map[string]string, error) {
106 mp := make(map[string]string)
107 err := j.rpc.Call("RPC.MapProperties", id, &mp)
108 return mp, err
109 }
110
111 func (j jRPC) SetMapProperties(id int, properties map[string]string) error {
112 return j.rpc.Call("RPC.SetMapProperties", data.ServerProperties{id, properties}, es)
113 }
114
115 func (j jRPC) RemoveServer(id int) error {
116 return j.rpc.Call("RPC.RemoveServer", id, es)
117 }
118
119 func (j jRPC) RemoveMap(id int) error {
120 return j.rpc.Call("RPC.RemoveMap", id, es)
121 }
122
123 func (j jRPC) StartServer(id int) error {
124 return j.rpc.Call("RPC.StartServer", id, es)
125 }
126
127 func (j jRPC) StopServer(id int) error {
128 return j.rpc.Call("RPC.StopServer", id, es)
129 }
130
131 func (j jRPC) CreateDefaultMap(d data.DefaultMap) error {
132 return j.rpc.Call("RPC.CreateDefaultMap", d, es)
133 }
134
135 func (j jRPC) CreateSuperflatMap(d data.SuperFlatMap) error {
136 return j.rpc.Call("RPC.CreateSuperflatMap", d, es)
137 }
138
139 func (j jRPC) CreateCustomMap(d data.CustomMap) error {
140 return j.rpc.Call("RPC.CreateCustomMap", d, es)
141 }
142
143 func (j jRPC) ServerEULA(id int) (string, error) {
144 var d string
145 err := j.rpc.Call("RPC.ServerEULA", id, &d)
146 return d, err
147 }
148
149 func (j jRPC) SetServerEULA(id int, d string) error {
150 return j.rpc.Call("RPC.SetServerEULA", data.ServerEULA{ID: id, EULA: d}, es)
151 }
152
153 func (j jRPC) WriteCommand(id int, command string) error {
154 return j.rpc.Call("RPC.WriteCmd", data.WriteCmd{ID: id, Cmd: command}, es)
155 }
156
157 func (j jRPC) Generators() ([]data.Generator, error) {
158 var gs []data.Generator
159 err := j.rpc.Call("RPC.Generators", nil, &gs)
160 return gs, err
161 }
162
163 func (j jRPC) Generator(id int) (data.GeneratorData, error) {
164 var g data.GeneratorData
165 err := j.rpc.Call("RPC.Generator", id, &g)
166 return g, err
167 }
168
169 func (j jRPC) RemoveGenerator(id int) error {
170 return j.rpc.Call("RPC.RemoveGenerator", id, es)
171 }