Exemple #1
0
        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);
            }
        }