From 294006aae74ed756a0b37c2330d34b9b0438206b Mon Sep 17 00:00:00 2001 From: pedromorgan Date: Sat, 4 May 2019 17:22:42 +0100 Subject: [PATCH 1/4] show npi --- server/connection.go | 2 +- server/hub.go | 1 + server/hub_option.go | 8 ++++++-- server/hub_place.go | 4 ++++ server/hub_route.go | 8 ++++++-- server/hub_server.go | 10 +++++++--- server/hub_service.go | 4 ++++ server/hub_simulation.go | 8 ++++++-- server/hub_trackitem.go | 4 ++++ server/hub_train.go | 4 ++++ server/hub_traintype.go | 4 ++++ server/responses.go | 6 +++++- 12 files changed, 52 insertions(+), 11 deletions(-) diff --git a/server/connection.go b/server/connection.go index 311ac99..3c39788 100644 --- a/server/connection.go +++ b/server/connection.go @@ -126,7 +126,7 @@ func (conn *connection) registerClient() (error, *Request) { } // authenticated, so setup - if err := conn.WriteJSON(NewOkResponse(req.ID, "Successfully registered")); err != nil { + if err := conn.WriteJSON(NewOkResponse(req.ID, "login", "register", "Successfully registered")); err != nil { logger.Info("Error while writing", "connection", conn.RemoteAddr(), "request", "NewOkResponse", "error", err) } hub.registerChan <- conn diff --git a/server/hub.go b/server/hub.go index c30af43..f1f82b0 100644 --- a/server/hub.go +++ b/server/hub.go @@ -49,6 +49,7 @@ type Hub struct { type hubObject interface { dispatch(h *Hub, req Request, c *connection) + objectName() string } // run is the loop for handling dispatching requests and responses diff --git a/server/hub_option.go b/server/hub_option.go index c2b0556..cd346d8 100644 --- a/server/hub_option.go +++ b/server/hub_option.go @@ -25,8 +25,12 @@ import ( type optionObject struct{} +func (oo *optionObject) objectName() string { + return "option" +} + // dispatch processes requests made on the Option object -func (s *optionObject) dispatch(h *Hub, req Request, conn *connection) { +func (oo *optionObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan switch req.Action { case "list": @@ -53,7 +57,7 @@ func (s *optionObject) dispatch(h *Hub, req Request, conn *connection) { ch <- NewErrorResponse(req.ID, fmt.Errorf("error while setting option: %s", err)) return } - ch <- NewOkResponse(req.ID, fmt.Sprintf("option %s set successfully to %v", setParams.Name, setParams.Value)) + ch <- NewOkResponse(req.ID, oo.objectName(), req.Action, fmt.Sprintf("option %s set successfully to %v", setParams.Name, setParams.Value)) default: ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) diff --git a/server/hub_place.go b/server/hub_place.go index 2469c5b..b823ada 100644 --- a/server/hub_place.go +++ b/server/hub_place.go @@ -27,6 +27,10 @@ import ( type placeObject struct{} +func (s *placeObject) objectName() string { + return "place" +} + // dispatch processes requests made on the Place object func (s *placeObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_route.go b/server/hub_route.go index d01117f..2134faa 100644 --- a/server/hub_route.go +++ b/server/hub_route.go @@ -27,6 +27,10 @@ import ( type routeObject struct{} +func (r *routeObject) objectName() string { + return "route" +} + // dispatch processes requests made on the route object func (r *routeObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan @@ -85,7 +89,7 @@ func (r *routeObject) dispatch(h *Hub, req Request, conn *connection) { ch <- NewErrorResponse(req.ID, fmt.Errorf("cannot activate route %s: %s", actParams.ID, err)) return } - ch <- NewOkResponse(req.ID, fmt.Sprintf("Route %s activated successfully", actParams.ID)) + ch <- NewOkResponse(req.ID, r.objectName(), req.Action, fmt.Sprintf("Route %s activated successfully", actParams.ID)) case "deactivate": var idParams = struct { ID string `json:"id"` @@ -106,7 +110,7 @@ func (r *routeObject) dispatch(h *Hub, req Request, conn *connection) { ch <- NewErrorResponse(req.ID, fmt.Errorf("cannot deactivate route %s: %s", idParams.ID, err)) return } - ch <- NewOkResponse(req.ID, fmt.Sprintf("Route %s deactivated successfully", idParams.ID)) + ch <- NewOkResponse(req.ID, r.objectName(), req.Action, fmt.Sprintf("Route %s deactivated successfully", idParams.ID)) default: ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) diff --git a/server/hub_server.go b/server/hub_server.go index d4de8ea..b052d64 100644 --- a/server/hub_server.go +++ b/server/hub_server.go @@ -25,6 +25,10 @@ import ( type serverObject struct{} +func (s *serverObject) objectName() string { + return "server" +} + // dispatch processes requests made on the Server object func (s *serverObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan @@ -38,21 +42,21 @@ func (s *serverObject) dispatch(h *Hub, req Request, conn *connection) { ch <- NewErrorResponse(req.ID, err) return } - ch <- NewOkResponse(req.ID, "Listener added successfully") + ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Listener added successfully") case "removeListener": logger.Debug("Request for removeListener received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) if err := h.removeRegistryEntry(req, conn); err != nil { ch <- NewErrorResponse(req.ID, err) return } - ch <- NewOkResponse(req.ID, "Listener removed successfully") + ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Listener removed successfully") case "renotify": logger.Debug("Request for renotify received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) if err := h.renotifyClient(req, conn); err != nil { ch <- NewErrorResponse(req.ID, err) return } - ch <- NewOkResponse(req.ID, "Renotify request taken into account") + ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Renotify request taken into account") default: ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) diff --git a/server/hub_service.go b/server/hub_service.go index 4faea61..f20d810 100644 --- a/server/hub_service.go +++ b/server/hub_service.go @@ -27,6 +27,10 @@ import ( type serviceObject struct{} +func (s *serviceObject) objectName() string { + return "service" +} + // dispatch processes requests made on the Service object func (s *serviceObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_simulation.go b/server/hub_simulation.go index 7abb8c7..8407976 100644 --- a/server/hub_simulation.go +++ b/server/hub_simulation.go @@ -25,6 +25,10 @@ import ( type simulationObject struct{} +func (s *simulationObject) objectName() string { + return "simulation" +} + // dispatch processes requests made on the Simulation object func (s *simulationObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan @@ -32,10 +36,10 @@ func (s *simulationObject) dispatch(h *Hub, req Request, conn *connection) { switch req.Action { case "start": sim.Start() - ch <- NewOkResponse(req.ID, "Simulation started successfully") + ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Simulation started successfully") case "pause": sim.Pause() - ch <- NewOkResponse(req.ID, "Simulation paused successfully") + ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Simulation paused successfully") case "isStarted": j, err := json.Marshal(sim.IsStarted()) if err != nil { diff --git a/server/hub_trackitem.go b/server/hub_trackitem.go index e3c7012..0a41914 100644 --- a/server/hub_trackitem.go +++ b/server/hub_trackitem.go @@ -27,6 +27,10 @@ import ( type trackItemObject struct{} +func (s *trackItemObject) objectName() string { + return "trackitem" +} + // dispatch processes requests made on the TrackItem object func (s *trackItemObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_train.go b/server/hub_train.go index f647cde..2377aa5 100644 --- a/server/hub_train.go +++ b/server/hub_train.go @@ -27,6 +27,10 @@ import ( type trainObject struct{} +func (s *trainObject) objectName() string { + return "train" +} + // dispatch processes requests made on the Service object func (t *trainObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_traintype.go b/server/hub_traintype.go index f5d5eb3..96db686 100644 --- a/server/hub_traintype.go +++ b/server/hub_traintype.go @@ -27,6 +27,10 @@ import ( type trainTypeObject struct{} +func (s *trainTypeObject) objectName() string { + return "trainType" +} + // dispatch processes requests made on the TrainType object func (s *trainTypeObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/responses.go b/server/responses.go index 1e5610c..5de977c 100644 --- a/server/responses.go +++ b/server/responses.go @@ -56,6 +56,8 @@ type DataStatus struct { type ResponseStatus struct { ID int `json:"id"` MsgType MessageType `json:"msgType"` + Object string `json:"object"` + Action string `json:"action"` Data DataStatus `json:"data"` } @@ -95,10 +97,12 @@ func NewErrorResponse(id int, e error) *ResponseStatus { } // NewOkResponse returns a new ResponseStatus object with OK status and empty message. -func NewOkResponse(id int, msg string) *ResponseStatus { +func NewOkResponse(id int, obj string, action string, msg string) *ResponseStatus { sr := ResponseStatus{ ID: id, MsgType: TypeResponse, + Object: obj, + Action: action, Data: DataStatus{ Ok, msg, From 27408bf6e24a581c6a30a0f0ba5f5b2780777aee Mon Sep 17 00:00:00 2001 From: pedromorgan Date: Sat, 4 May 2019 19:30:17 +0100 Subject: [PATCH 2/4] clean up stuff --- server/hub_place.go | 4 ++-- server/hub_server.go | 5 +++++ server/hub_trackitem.go | 9 ++++++--- server/responses.go | 4 +++- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/server/hub_place.go b/server/hub_place.go index b823ada..b6cf317 100644 --- a/server/hub_place.go +++ b/server/hub_place.go @@ -27,12 +27,12 @@ import ( type placeObject struct{} -func (s *placeObject) objectName() string { +func (p *placeObject) objectName() string { return "place" } // dispatch processes requests made on the Place object -func (s *placeObject) dispatch(h *Hub, req Request, conn *connection) { +func (p *placeObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan switch req.Action { case "list": diff --git a/server/hub_server.go b/server/hub_server.go index b052d64..3f544fa 100644 --- a/server/hub_server.go +++ b/server/hub_server.go @@ -33,9 +33,11 @@ func (s *serverObject) objectName() string { func (s *serverObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan switch req.Action { + case "register": ch <- NewErrorResponse(req.ID, fmt.Errorf("can't call register when already registered")) logger.Warn("Request for second register received", "submodule", "hub", "object", req.Object, "action", req.Action) + case "addListener": logger.Debug("Request for addListener received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) if err := h.addRegistryEntry(req, conn); err != nil { @@ -43,6 +45,7 @@ func (s *serverObject) dispatch(h *Hub, req Request, conn *connection) { return } ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Listener added successfully") + case "removeListener": logger.Debug("Request for removeListener received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) if err := h.removeRegistryEntry(req, conn); err != nil { @@ -50,6 +53,7 @@ func (s *serverObject) dispatch(h *Hub, req Request, conn *connection) { return } ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Listener removed successfully") + case "renotify": logger.Debug("Request for renotify received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) if err := h.renotifyClient(req, conn); err != nil { @@ -57,6 +61,7 @@ func (s *serverObject) dispatch(h *Hub, req Request, conn *connection) { return } ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Renotify request taken into account") + default: ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) diff --git a/server/hub_trackitem.go b/server/hub_trackitem.go index 0a41914..bb323a5 100644 --- a/server/hub_trackitem.go +++ b/server/hub_trackitem.go @@ -27,14 +27,15 @@ import ( type trackItemObject struct{} -func (s *trackItemObject) objectName() string { +func (trki *trackItemObject) objectName() string { return "trackitem" } // dispatch processes requests made on the TrackItem object -func (s *trackItemObject) dispatch(h *Hub, req Request, conn *connection) { +func (trki *trackItemObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan switch req.Action { + case "list": logger.Debug("Request for trackitem list received", "submodule", "hub", "object", req.Object, "action", req.Action) til, err := json.Marshal(sim.TrackItems) @@ -42,7 +43,8 @@ func (s *trackItemObject) dispatch(h *Hub, req Request, conn *connection) { ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, til) + ch <- NewResponse(req.ID, trki.objectName(), req.Action, til) + case "show": var idsParams = struct { IDs []string `json:"ids"` @@ -68,6 +70,7 @@ func (s *trackItemObject) dispatch(h *Hub, req Request, conn *connection) { return } ch <- NewResponse(req.ID, tid) + default: ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) diff --git a/server/responses.go b/server/responses.go index 5de977c..7d03a25 100644 --- a/server/responses.go +++ b/server/responses.go @@ -74,10 +74,12 @@ type ResponseNotification struct { } // NewResponse returns a Response with the given data -func NewResponse(id int, data RawJSON) *Response { +func NewResponse(id int, obj string, action string, data RawJSON) *Response { r := Response{ ID: id, MsgType: TypeResponse, + Object: obj, + Action: action, Data: data, } return &r From 68c8f119500110d77c9010cebbcbd7282e44a670 Mon Sep 17 00:00:00 2001 From: pedromorgan Date: Sat, 4 May 2019 21:15:40 +0100 Subject: [PATCH 3/4] loop around --- server/connection.go | 14 +++++++++----- server/hub.go | 2 +- server/hub_option.go | 12 ++++++------ server/hub_place.go | 14 +++++++------- server/hub_route.go | 30 +++++++++++++++--------------- server/hub_server.go | 16 ++++++++-------- server/hub_service.go | 17 ++++++++++------- server/hub_simulation.go | 14 +++++++------- server/hub_trackitem.go | 14 +++++++------- server/hub_train.go | 17 ++++++++++------- server/hub_traintype.go | 18 +++++++++--------- server/responses.go | 36 ++++++++++++++++++++---------------- 12 files changed, 109 insertions(+), 95 deletions(-) diff --git a/server/connection.go b/server/connection.go index 3c39788..763bfac 100644 --- a/server/connection.go +++ b/server/connection.go @@ -45,12 +45,16 @@ type connection struct { Requests []Request } -// loop starts the reading and writing loops of the connection. +// loop starts the reading and writing of the connection. func (conn *connection) loop(ctx context.Context) { logger.Debug("New connection", "remote", conn.RemoteAddr()) - if err, req := conn.registerClient(); err != nil { + + // TODO said pedro + if err, _ := conn.registerClient(); err != nil { + //if err, req := conn.registerClient(); err != nil { + // Try to notify client - _ = conn.WriteJSON(NewErrorResponse(req.ID, err)) + //_ = conn.WriteJSON(NewErrorResponse(req, err)) logger.Error("Error while login", "connection", conn.RemoteAddr(), "error", err) return } @@ -78,7 +82,7 @@ func (conn *connection) processRead(ctx context.Context) { return default: logger.Info("Error while reading", "connection", conn.RemoteAddr(), "error", err) - conn.pushChan <- NewErrorResponse(req.ID, err) + conn.pushChan <- NewErrorResponse(req, err) continue } } @@ -126,7 +130,7 @@ func (conn *connection) registerClient() (error, *Request) { } // authenticated, so setup - if err := conn.WriteJSON(NewOkResponse(req.ID, "login", "register", "Successfully registered")); err != nil { + if err := conn.WriteJSON(NewOkResponse(*req, "Successfully registered")); err != nil { logger.Info("Error while writing", "connection", conn.RemoteAddr(), "request", "NewOkResponse", "error", err) } hub.registerChan <- conn diff --git a/server/hub.go b/server/hub.go index f1f82b0..29bd0be 100644 --- a/server/hub.go +++ b/server/hub.go @@ -129,7 +129,7 @@ func (h *Hub) dispatchObject(conn *connection) { conn.Requests = conn.Requests[1:] obj, ok := h.objects[req.Object] if !ok { - conn.pushChan <- NewErrorResponse(req.ID, fmt.Errorf("unknown object %s", req.Object)) + conn.pushChan <- NewErrorResponse(req, fmt.Errorf("unknown object %s", req.Object)) logger.Debug("Request for unknown object received", "submodule", "hub", "object", req.Object) return } diff --git a/server/hub_option.go b/server/hub_option.go index cd346d8..12e9fc0 100644 --- a/server/hub_option.go +++ b/server/hub_option.go @@ -37,10 +37,10 @@ func (oo *optionObject) dispatch(h *Hub, req Request, conn *connection) { logger.Debug("Request for option list received", "submodule", "hub", "object", req.Object, "action", req.Action) opts, err := json.Marshal(sim.Options) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, opts) + ch <- NewResponse(req, opts) case "set": var setParams = struct { Name string `json:"name"` @@ -49,17 +49,17 @@ func (oo *optionObject) dispatch(h *Hub, req Request, conn *connection) { err := json.Unmarshal(req.Params, &setParams) logger.Debug("Request for option set received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("error on parameters: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("error on parameters: %s", err)) return } err = sim.Options.Set(setParams.Name, setParams.Value) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("error while setting option: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("error while setting option: %s", err)) return } - ch <- NewOkResponse(req.ID, oo.objectName(), req.Action, fmt.Sprintf("option %s set successfully to %v", setParams.Name, setParams.Value)) + ch <- NewOkResponse(req, fmt.Sprintf("option %s set successfully to %v", setParams.Name, setParams.Value)) default: - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) } } diff --git a/server/hub_place.go b/server/hub_place.go index b6cf317..17bb229 100644 --- a/server/hub_place.go +++ b/server/hub_place.go @@ -39,10 +39,10 @@ func (p *placeObject) dispatch(h *Hub, req Request, conn *connection) { logger.Debug("Request for place list received", "submodule", "hub", "object", req.Object, "action", req.Action) til, err := json.Marshal(sim.Places) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, til) + ch <- NewResponse(req, til) case "show": var idsParams = struct { IDs []string `json:"ids"` @@ -50,26 +50,26 @@ func (p *placeObject) dispatch(h *Hub, req Request, conn *connection) { err := json.Unmarshal(req.Params, &idsParams) logger.Debug("Request for place show received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", idsParams) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } tkis := make(map[string]*simulation.Place) for _, id := range idsParams.IDs { tsID, ok := sim.Places[id] if !ok { - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown place: %s", id)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown place: %s", id)) return } tkis[id] = tsID } tid, err := json.Marshal(tkis) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, tid) + ch <- NewResponse(req, tid) default: - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) } } diff --git a/server/hub_route.go b/server/hub_route.go index 2134faa..040fd4a 100644 --- a/server/hub_route.go +++ b/server/hub_route.go @@ -39,10 +39,10 @@ func (r *routeObject) dispatch(h *Hub, req Request, conn *connection) { logger.Debug("Request for route list received", "submodule", "hub", "object", req.Object, "action", req.Action) rtes, err := json.Marshal(sim.Routes) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, rtes) + ch <- NewResponse(req, rtes) case "show": var idsParams = struct { IDs []string `json:"ids"` @@ -50,24 +50,24 @@ func (r *routeObject) dispatch(h *Hub, req Request, conn *connection) { err := json.Unmarshal(req.Params, &idsParams) logger.Debug("Request for route show received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", idsParams) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } rtes := make(map[string]*simulation.Route) for _, id := range idsParams.IDs { rte, ok := sim.Routes[id] if !ok { - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown route: %s", id)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown route: %s", id)) return } rtes[id] = rte } rte, err := json.Marshal(rtes) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, rte) + ch <- NewResponse(req, rte) case "activate": var actParams = struct { ID string `json:"id"` @@ -76,20 +76,20 @@ func (r *routeObject) dispatch(h *Hub, req Request, conn *connection) { err := json.Unmarshal(req.Params, &actParams) logger.Debug("Request for route activate received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", actParams) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } rte, ok := sim.Routes[actParams.ID] if !ok { - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown route: %s", actParams.ID)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown route: %s", actParams.ID)) return } err = rte.Activate(actParams.Persistent) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("cannot activate route %s: %s", actParams.ID, err)) + ch <- NewErrorResponse(req, fmt.Errorf("cannot activate route %s: %s", actParams.ID, err)) return } - ch <- NewOkResponse(req.ID, r.objectName(), req.Action, fmt.Sprintf("Route %s activated successfully", actParams.ID)) + ch <- NewOkResponse(req, fmt.Sprintf("Route %s activated successfully", actParams.ID)) case "deactivate": var idParams = struct { ID string `json:"id"` @@ -97,22 +97,22 @@ func (r *routeObject) dispatch(h *Hub, req Request, conn *connection) { err := json.Unmarshal(req.Params, &idParams) logger.Debug("Request for route deactivate received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", idParams) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } rte, ok := sim.Routes[idParams.ID] if !ok { - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown route: %s", idParams.ID)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown route: %s", idParams.ID)) return } err = rte.Deactivate() if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("cannot deactivate route %s: %s", idParams.ID, err)) + ch <- NewErrorResponse(req, fmt.Errorf("cannot deactivate route %s: %s", idParams.ID, err)) return } - ch <- NewOkResponse(req.ID, r.objectName(), req.Action, fmt.Sprintf("Route %s deactivated successfully", idParams.ID)) + ch <- NewOkResponse(req, fmt.Sprintf("Route %s deactivated successfully", idParams.ID)) default: - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) } } diff --git a/server/hub_server.go b/server/hub_server.go index 3f544fa..08a2e82 100644 --- a/server/hub_server.go +++ b/server/hub_server.go @@ -35,35 +35,35 @@ func (s *serverObject) dispatch(h *Hub, req Request, conn *connection) { switch req.Action { case "register": - ch <- NewErrorResponse(req.ID, fmt.Errorf("can't call register when already registered")) + ch <- NewErrorResponse(req, fmt.Errorf("can't call register when already registered")) logger.Warn("Request for second register received", "submodule", "hub", "object", req.Object, "action", req.Action) case "addListener": logger.Debug("Request for addListener received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) if err := h.addRegistryEntry(req, conn); err != nil { - ch <- NewErrorResponse(req.ID, err) + ch <- NewErrorResponse(req, err) return } - ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Listener added successfully") + ch <- NewOkResponse(req, "Listener added successfully") case "removeListener": logger.Debug("Request for removeListener received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) if err := h.removeRegistryEntry(req, conn); err != nil { - ch <- NewErrorResponse(req.ID, err) + ch <- NewErrorResponse(req, err) return } - ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Listener removed successfully") + ch <- NewOkResponse(req, "Listener removed successfully") case "renotify": logger.Debug("Request for renotify received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) if err := h.renotifyClient(req, conn); err != nil { - ch <- NewErrorResponse(req.ID, err) + ch <- NewErrorResponse(req, err) return } - ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Renotify request taken into account") + ch <- NewOkResponse(req, "Renotify request taken into account") default: - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", req.Params) } } diff --git a/server/hub_service.go b/server/hub_service.go index f20d810..7f84e59 100644 --- a/server/hub_service.go +++ b/server/hub_service.go @@ -35,14 +35,16 @@ func (s *serviceObject) objectName() string { func (s *serviceObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan switch req.Action { + case "list": logger.Debug("Request for service list received", "submodule", "hub", "object", req.Object, "action", req.Action) sl, err := json.Marshal(sim.Services) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, sl) + ch <- NewResponse(req, sl) + case "show": var idsParams = struct { IDs []string `json:"ids"` @@ -50,26 +52,27 @@ func (s *serviceObject) dispatch(h *Hub, req Request, conn *connection) { err := json.Unmarshal(req.Params, &idsParams) logger.Debug("Request for service show received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", idsParams) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } sl := make(map[string]*simulation.Service) for _, id := range idsParams.IDs { sld, ok := sim.Services[id] if !ok { - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown service: %s", id)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown service: %s", id)) return } sl[id] = sld } tid, err := json.Marshal(sl) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, tid) + ch <- NewResponse(req, tid) + default: - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) } } diff --git a/server/hub_simulation.go b/server/hub_simulation.go index 8407976..5c9939b 100644 --- a/server/hub_simulation.go +++ b/server/hub_simulation.go @@ -36,26 +36,26 @@ func (s *simulationObject) dispatch(h *Hub, req Request, conn *connection) { switch req.Action { case "start": sim.Start() - ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Simulation started successfully") + ch <- NewOkResponse(req, "Simulation started successfully") case "pause": sim.Pause() - ch <- NewOkResponse(req.ID, s.objectName(), req.Action, "Simulation paused successfully") + ch <- NewOkResponse(req, "Simulation paused successfully") case "isStarted": j, err := json.Marshal(sim.IsStarted()) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, RawJSON(j)) + ch <- NewResponse(req, RawJSON(j)) case "dump": data, err := json.Marshal(sim) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, data) + ch <- NewResponse(req, data) default: - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) } } diff --git a/server/hub_trackitem.go b/server/hub_trackitem.go index bb323a5..d6cfcdc 100644 --- a/server/hub_trackitem.go +++ b/server/hub_trackitem.go @@ -40,10 +40,10 @@ func (trki *trackItemObject) dispatch(h *Hub, req Request, conn *connection) { logger.Debug("Request for trackitem list received", "submodule", "hub", "object", req.Object, "action", req.Action) til, err := json.Marshal(sim.TrackItems) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, trki.objectName(), req.Action, til) + ch <- NewResponse(req, til) case "show": var idsParams = struct { @@ -52,27 +52,27 @@ func (trki *trackItemObject) dispatch(h *Hub, req Request, conn *connection) { err := json.Unmarshal(req.Params, &idsParams) logger.Debug("Request for trackItem show received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", idsParams) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } tkis := make(map[string]simulation.TrackItem) for _, id := range idsParams.IDs { tsID, ok := sim.TrackItems[id] if !ok { - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown trackItem: %s", id)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown trackItem: %s", id)) return } tkis[id] = tsID } tid, err := json.Marshal(tkis) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, tid) + ch <- NewResponse(req, tid) default: - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) } } diff --git a/server/hub_train.go b/server/hub_train.go index 2377aa5..64866b0 100644 --- a/server/hub_train.go +++ b/server/hub_train.go @@ -35,14 +35,16 @@ func (s *trainObject) objectName() string { func (t *trainObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan switch req.Action { + case "list": logger.Debug("Request for train list received", "submodule", "hub", "object", req.Object, "action", req.Action) sl, err := json.Marshal(sim.Trains) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, sl) + ch <- NewResponse(req, sl) + case "show": var idsParams = struct { IDs []int `json:"ids"` @@ -50,25 +52,26 @@ func (t *trainObject) dispatch(h *Hub, req Request, conn *connection) { err := json.Unmarshal(req.Params, &idsParams) logger.Debug("Request for train show received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", idsParams) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } ts := make([]*simulation.Train, len(idsParams.IDs)) for i, id := range idsParams.IDs { if id < 0 || id >= len(sim.Trains) { - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown train: %d", id)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown train: %d", id)) return } ts[i] = sim.Trains[id] } tid, err := json.Marshal(ts) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, tid) + ch <- NewResponse(req, tid) + default: - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) } } diff --git a/server/hub_traintype.go b/server/hub_traintype.go index 96db686..1692c7d 100644 --- a/server/hub_traintype.go +++ b/server/hub_traintype.go @@ -27,22 +27,22 @@ import ( type trainTypeObject struct{} -func (s *trainTypeObject) objectName() string { +func (tt *trainTypeObject) objectName() string { return "trainType" } // dispatch processes requests made on the TrainType object -func (s *trainTypeObject) dispatch(h *Hub, req Request, conn *connection) { +func (tt *trainTypeObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan switch req.Action { case "list": logger.Debug("Request for trainType list received", "submodule", "hub", "object", req.Object, "action", req.Action) tts, err := json.Marshal(sim.TrainTypes) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, tts) + ch <- NewResponse(req, tts) case "show": var idsParams = struct { IDs []string `json:"ids"` @@ -50,26 +50,26 @@ func (s *trainTypeObject) dispatch(h *Hub, req Request, conn *connection) { err := json.Unmarshal(req.Params, &idsParams) logger.Debug("Request for trainType show received", "submodule", "hub", "object", req.Object, "action", req.Action, "params", idsParams) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } tts := make(map[string]*simulation.TrainType) for _, id := range idsParams.IDs { ttID, ok := sim.TrainTypes[id] if !ok { - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown trainType: %s", id)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown trainType: %s", id)) return } tts[id] = ttID } tid, err := json.Marshal(tts) if err != nil { - ch <- NewErrorResponse(req.ID, fmt.Errorf("internal error: %s", err)) + ch <- NewErrorResponse(req, fmt.Errorf("internal error: %s", err)) return } - ch <- NewResponse(req.ID, tid) + ch <- NewResponse(req, tid) default: - ch <- NewErrorResponse(req.ID, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) + ch <- NewErrorResponse(req, fmt.Errorf("unknown action %s/%s", req.Object, req.Action)) logger.Debug("Request for unknown action received", "submodule", "hub", "object", req.Object, "action", req.Action) } } diff --git a/server/responses.go b/server/responses.go index 7d03a25..87d5a64 100644 --- a/server/responses.go +++ b/server/responses.go @@ -43,15 +43,11 @@ const ( type Response struct { ID int `json:"id"` MsgType MessageType `json:"msgType"` + Object string `json:"object"` + Action string `json:"action"` Data RawJSON `json:"data"` } -// DataStatus is the Data part of a ResponseStatus message -type DataStatus struct { - Status StatusCode `json:"status"` - Message string `json:"message"` -} - // ResponseStatus is a status message sent to a websocket client type ResponseStatus struct { ID int `json:"id"` @@ -61,6 +57,12 @@ type ResponseStatus struct { Data DataStatus `json:"data"` } +// DataStatus is the Data part of a ResponseStatus message +type DataStatus struct { + Status StatusCode `json:"status"` + Message string `json:"message"` +} + // DataEvent is the Data part of a ResponseNotification message type DataEvent struct { Name simulation.EventName `json:"name"` @@ -74,21 +76,23 @@ type ResponseNotification struct { } // NewResponse returns a Response with the given data -func NewResponse(id int, obj string, action string, data RawJSON) *Response { +func NewResponse(req Request, data RawJSON) *Response { r := Response{ - ID: id, + ID: req.ID, + Object: req.Object, + Action: req.Action, MsgType: TypeResponse, - Object: obj, - Action: action, Data: data, } return &r } // NewErrorResponse returns a ResponseStatus object corresponding to the given error. -func NewErrorResponse(id int, e error) *ResponseStatus { +func NewErrorResponse(req Request, e error) *ResponseStatus { sr := ResponseStatus{ - ID: id, + ID: req.ID, + Object: req.Object, + Action: req.Action, MsgType: TypeResponse, Data: DataStatus{ Fail, @@ -99,12 +103,12 @@ func NewErrorResponse(id int, e error) *ResponseStatus { } // NewOkResponse returns a new ResponseStatus object with OK status and empty message. -func NewOkResponse(id int, obj string, action string, msg string) *ResponseStatus { +func NewOkResponse(req Request, msg string) *ResponseStatus { sr := ResponseStatus{ - ID: id, + ID: req.ID, + Object: req.Object, + Action: req.Action, MsgType: TypeResponse, - Object: obj, - Action: action, Data: DataStatus{ Ok, msg, From cdb812b73ea04bfa9868ed265f6756676238f99d Mon Sep 17 00:00:00 2001 From: pedromorgan Date: Sat, 4 May 2019 21:18:31 +0100 Subject: [PATCH 4/4] remove moot objectName --- server/hub.go | 1 - server/hub_option.go | 4 ---- server/hub_place.go | 4 ---- server/hub_route.go | 4 ---- server/hub_server.go | 4 ---- server/hub_service.go | 4 ---- server/hub_simulation.go | 4 ---- server/hub_trackitem.go | 4 ---- server/hub_train.go | 4 ---- server/hub_traintype.go | 4 ---- 10 files changed, 37 deletions(-) diff --git a/server/hub.go b/server/hub.go index 29bd0be..23d962a 100644 --- a/server/hub.go +++ b/server/hub.go @@ -49,7 +49,6 @@ type Hub struct { type hubObject interface { dispatch(h *Hub, req Request, c *connection) - objectName() string } // run is the loop for handling dispatching requests and responses diff --git a/server/hub_option.go b/server/hub_option.go index 12e9fc0..fc91019 100644 --- a/server/hub_option.go +++ b/server/hub_option.go @@ -25,10 +25,6 @@ import ( type optionObject struct{} -func (oo *optionObject) objectName() string { - return "option" -} - // dispatch processes requests made on the Option object func (oo *optionObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_place.go b/server/hub_place.go index 17bb229..4bd982e 100644 --- a/server/hub_place.go +++ b/server/hub_place.go @@ -27,10 +27,6 @@ import ( type placeObject struct{} -func (p *placeObject) objectName() string { - return "place" -} - // dispatch processes requests made on the Place object func (p *placeObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_route.go b/server/hub_route.go index 040fd4a..8381124 100644 --- a/server/hub_route.go +++ b/server/hub_route.go @@ -27,10 +27,6 @@ import ( type routeObject struct{} -func (r *routeObject) objectName() string { - return "route" -} - // dispatch processes requests made on the route object func (r *routeObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_server.go b/server/hub_server.go index 08a2e82..b5881c3 100644 --- a/server/hub_server.go +++ b/server/hub_server.go @@ -25,10 +25,6 @@ import ( type serverObject struct{} -func (s *serverObject) objectName() string { - return "server" -} - // dispatch processes requests made on the Server object func (s *serverObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_service.go b/server/hub_service.go index 7f84e59..ca348e0 100644 --- a/server/hub_service.go +++ b/server/hub_service.go @@ -27,10 +27,6 @@ import ( type serviceObject struct{} -func (s *serviceObject) objectName() string { - return "service" -} - // dispatch processes requests made on the Service object func (s *serviceObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_simulation.go b/server/hub_simulation.go index 5c9939b..3524dad 100644 --- a/server/hub_simulation.go +++ b/server/hub_simulation.go @@ -25,10 +25,6 @@ import ( type simulationObject struct{} -func (s *simulationObject) objectName() string { - return "simulation" -} - // dispatch processes requests made on the Simulation object func (s *simulationObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_trackitem.go b/server/hub_trackitem.go index d6cfcdc..d95962a 100644 --- a/server/hub_trackitem.go +++ b/server/hub_trackitem.go @@ -27,10 +27,6 @@ import ( type trackItemObject struct{} -func (trki *trackItemObject) objectName() string { - return "trackitem" -} - // dispatch processes requests made on the TrackItem object func (trki *trackItemObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_train.go b/server/hub_train.go index 64866b0..d2845d8 100644 --- a/server/hub_train.go +++ b/server/hub_train.go @@ -27,10 +27,6 @@ import ( type trainObject struct{} -func (s *trainObject) objectName() string { - return "train" -} - // dispatch processes requests made on the Service object func (t *trainObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan diff --git a/server/hub_traintype.go b/server/hub_traintype.go index 1692c7d..ca93a0f 100644 --- a/server/hub_traintype.go +++ b/server/hub_traintype.go @@ -27,10 +27,6 @@ import ( type trainTypeObject struct{} -func (tt *trainTypeObject) objectName() string { - return "trainType" -} - // dispatch processes requests made on the TrainType object func (tt *trainTypeObject) dispatch(h *Hub, req Request, conn *connection) { ch := conn.pushChan