예제 #1
0
 private static void validateSession(byte[] sessionKey)
 {
     if (!ServerSession.getInstance().isSessionValid(sessionKey))
     {
         throw new NotSupportedException();
     }
 }
예제 #2
0
        public static JObject SendResponse(HttpListenerRequest request)
        {
            string[] uriSegments = request.Url.Segments;
            string   endpoint    = uriSegments[uriSegments.Length - 1];

            string text;

            using (var reader = new StreamReader(request.InputStream, request.ContentEncoding))
            {
                text = reader.ReadToEnd();
            }

            JObject responseJson = new JObject();

            if (text.Length == 0)
            {
                return(responseJson);
            }
            JObject requestJson = JObject.Parse(text);

            byte[] sessionKey = new byte[0];

            switch (endpoint)
            {
            case "map/":
                Console.WriteLine("maps were requested");
                return(createDefaultMapsObject());

            case "login/":
                string user = (string)requestJson["user"];
                Console.WriteLine("login attempt from: " + user);
                string pass = (string)requestJson["pass"];
                if (ServerSession.getInstance().validateUser(user, pass))
                {
                    byte[] newSessionKey = ServerSession.getInstance().createNewSessionKey(user);
                    responseJson.Add("session", newSessionKey);
                    Console.WriteLine("login successful");

                    return(responseJson);
                }
                else
                {
                    responseJson.Add("session", null);
                    Console.WriteLine("login failed");
                    return(responseJson);
                }

            case "logout/":
                Console.WriteLine("logout attempt");
                sessionKey = (byte[])requestJson["session"];
                ServerSession.getInstance().endSession(sessionKey);
                Console.WriteLine("logout successful");

                return(responseJson);

            case "valid/":
                Console.WriteLine("validate session");
                sessionKey = (byte[])requestJson["session"];
                responseJson.Add("isValid", ServerSession.getInstance().isSessionValid(sessionKey));
                return(responseJson);

            case "save/":
                sessionKey = (byte[])requestJson["session"];
                validateSession(sessionKey);
                string name = (string)requestJson["name"];
                Console.WriteLine("Attempt to save map: " + name);

                using (StreamWriter file = File.CreateText(Path.Combine(getDir(), name + ".json")))
                    using (JsonTextWriter writer = new JsonTextWriter(file))
                    {
                        requestJson.WriteTo(writer);
                    }
                return(responseJson);

            default:
                Console.WriteLine("Path requested");
                sessionKey = (byte[])requestJson["session"];

                validateSession(sessionKey);
                int[][] mapArray;

                JArray arr = (JArray)requestJson["map"];

                int algorithm = (requestJson["algorithm"] != null) ? (int)requestJson["algorithm"] : 0;

                if (requestJson["settings"] != null)
                {
                    JArray settings = (JArray)requestJson["settings"];
                    mapArray = applyCustomOptions(arr.ToObject <int[][]>(), settings.ToObject <int[]>());
                }
                else
                {
                    mapArray = arr.ToObject <int[][]>();
                }

                switch (algorithm)
                {
                case 0:
                    responseJson.Add("data", JArray.FromObject(PathfindingApi.calculatePathRandom(mapArray)));
                    return(responseJson);

                case 1:
                    responseJson.Add("data", JArray.FromObject(PathfindingApi.calculateAStar(mapArray)));
                    return(responseJson);

                case 2:
                    responseJson.Add("data", JArray.FromObject(PathfindingApi.calculateDijkstra(mapArray)));
                    return(responseJson);

                case 3:
                    responseJson.Add("data", JArray.FromObject(PathfindingApi.calculateGeneric(mapArray)));
                    return(responseJson);

                case 4:
                    responseJson.Add("data", JArray.FromObject(PathfindingApi.calculatePathOwn(mapArray)));
                    return(responseJson);

                case 5:
                    responseJson.Add("data", JArray.FromObject(PathfindingApi.calculatePathDumb(mapArray)));
                    return(responseJson);

                default:
                    responseJson.Add("data", JArray.FromObject(PathfindingApi.calculatePathRandom(mapArray)));
                    return(responseJson);
                }
            }
        }