diff --git a/server/connection.go b/server/connection.go index 311ac99..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, "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 c30af43..23d962a 100644 --- a/server/hub.go +++ b/server/hub.go @@ -128,7 +128,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 c2b0556..fc91019 100644 --- a/server/hub_option.go +++ b/server/hub_option.go @@ -26,17 +26,17 @@ import ( type optionObject struct{} // 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": 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"` @@ -45,17 +45,17 @@ func (s *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, 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 2469c5b..4bd982e 100644 --- a/server/hub_place.go +++ b/server/hub_place.go @@ -28,17 +28,17 @@ import ( type placeObject struct{} // 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": 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"` @@ -46,26 +46,26 @@ func (s *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 d01117f..8381124 100644 --- a/server/hub_route.go +++ b/server/hub_route.go @@ -35,10 +35,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"` @@ -46,24 +46,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"` @@ -72,20 +72,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, 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"` @@ -93,22 +93,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, 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 d4de8ea..b5881c3 100644 --- a/server/hub_server.go +++ b/server/hub_server.go @@ -29,32 +29,37 @@ type serverObject struct{} 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")) + 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, "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, "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, "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 4faea61..ca348e0 100644 --- a/server/hub_service.go +++ b/server/hub_service.go @@ -31,14 +31,16 @@ type serviceObject struct{} 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"` @@ -46,26 +48,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 7abb8c7..3524dad 100644 --- a/server/hub_simulation.go +++ b/server/hub_simulation.go @@ -32,26 +32,26 @@ 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, "Simulation started successfully") case "pause": sim.Pause() - ch <- NewOkResponse(req.ID, "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 e3c7012..d95962a 100644 --- a/server/hub_trackitem.go +++ b/server/hub_trackitem.go @@ -28,17 +28,19 @@ import ( type trackItemObject struct{} // 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) 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"` @@ -46,26 +48,27 @@ func (s *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 f647cde..d2845d8 100644 --- a/server/hub_train.go +++ b/server/hub_train.go @@ -31,14 +31,16 @@ type trainObject struct{} 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"` @@ -46,25 +48,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 f5d5eb3..ca93a0f 100644 --- a/server/hub_traintype.go +++ b/server/hub_traintype.go @@ -28,17 +28,17 @@ import ( type trainTypeObject struct{} // 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"` @@ -46,26 +46,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 1e5610c..87d5a64 100644 --- a/server/responses.go +++ b/server/responses.go @@ -43,22 +43,26 @@ 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"` MsgType MessageType `json:"msgType"` + Object string `json:"object"` + Action string `json:"action"` 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"` @@ -72,9 +76,11 @@ type ResponseNotification struct { } // NewResponse returns a Response with the given data -func NewResponse(id int, 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, Data: data, } @@ -82,9 +88,11 @@ func NewResponse(id int, data RawJSON) *Response { } // 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, @@ -95,9 +103,11 @@ 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(req Request, msg string) *ResponseStatus { sr := ResponseStatus{ - ID: id, + ID: req.ID, + Object: req.Object, + Action: req.Action, MsgType: TypeResponse, Data: DataStatus{ Ok,