public override HttpStatusCode Respond(JsonString subject, JsonString response) { if (subject == null) { throw new ArgumentNullException("subject"); } if (response == null) { throw new ArgumentNullException("response"); } bool isGetRequest; string type = JsonString.ParseString(subject.GetTerminal("type", "error"), "error"); if (type.Equals("get")) { isGetRequest = true; } else if (type.Equals("post")) { isGetRequest = false; } else { return(HttpStatusCode.BadRequest); } int[] positions = ReadPosition(subject); if (positions == null) { return(HttpStatusCode.BadRequest); } var responseSubject = JsonString.CreateDict(); { responseSubject.AddTerminal("type", JsonString.StringifyString("post")); responseSubject.AddTerminal("topic", JsonString.StringifyString("tracker")); } response.AddJsonString("subject", responseSubject); if (isGetRequest) { return(RespondGet(subject, responseSubject, positions)); } else { HttpStatusCode status = RespondPost(subject, responseSubject, positions); // not only send the result to one recipient but create an update for all clients if (status == HttpStatusCode.OK) { var update = new JsonString(response); update.RemoveTerminal("requestId"); update.AddTerminal("target", "\"all\""); server.PostUpdate(update); } return(status); } }
public HttpStatusCode Respond(JsonString subject, JsonString response) { if (subject == null) { throw new ArgumentNullException("subject"); } if (response == null) { throw new ArgumentNullException("response"); } int sensorStart = -2; int sensorEnd = 0; bool isGetRequest; string type = JsonString.ParseString(subject.GetTerminal("type", "error"), "error"); if (type.Equals("get")) { isGetRequest = true; } else if (type.Equals("post")) { isGetRequest = false; } else { return(HttpStatusCode.BadRequest); } string position = JsonString.ParseString(subject.GetTerminal("position", "all"), "all"); if (position.Equals("all")) { sensorStart = 0; sensorEnd = 15; // TODO replace with actual capacity } else { sensorStart = JsonString.ParseInt(position, -1); sensorEnd = sensorStart; } if (sensorStart < 0) { return(HttpStatusCode.NotFound); } var responseSubject = JsonString.CreateDict(); responseSubject.AddTerminal("type", JsonString.StringifyString("post")); responseSubject.AddTerminal("topic", JsonString.StringifyString("camera")); responseSubject.AddTerminal("position", JsonString.StringifyString(position)); response.AddJsonString("subject", responseSubject); if (isGetRequest) { return(RespondGet(subject, responseSubject, sensorStart, sensorEnd)); } else { if (sensorStart != sensorEnd) { return(HttpStatusCode.BadRequest); } HttpStatusCode status = RespondPost(subject, responseSubject, sensorStart); // not only send the result to one recipient but create an update for all clients if (status == HttpStatusCode.OK) { var update = new JsonString(response); update.RemoveTerminal("requestId"); update.AddTerminal("target", "\"all\""); server.PostUpdate(update); } return(status); } }