コード例 #1
0
ファイル: VelibService.cs プロジェクト: YileiLI/SoCWS-2019
        public async Task <string> GetHelpAsync(int plateform)
        {
            DateTime start = DateTime.Now;

            MonitorStat.AddRequestFromClient();
            if (cacheOfHelp["help"] != null)
            {
                MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
                return((string)cacheOfHelp["help"]);
            }

            string str = "";

            switch (plateform)
            {
            case 0:    //console
                str += "\tThis is a console client that allows to access to the IWS " +
                       "and request for the list of velib stations for a given city and the number of the available Velib at a given station. " +
                       "If you don't know the exact number of a station, please enter \'1\' to get the full list first.\n"
                       + "P.S. For now, we offer the service for the following cities: Rouen, Toulouse, Luxembourg, Dublin, Valence, Stockholm, " +
                       "Santander, Lund, Amiens, Mulhouse, Lillestrom, Lyon, Ljubljana, Seville, Nancy, Namur, Creteil, Cergy-Pontoise, Bruxelles-Capitale, Vilnius, " +
                       "Kazan, Toyama, Marseille, Nantes, Brisbane and Besancon.";
                break;

            default:
                str += "Press the flag of which country you want to know about the Velib Service and select the city." +
                       "Press the route icon to get the route information supported by Google Map. ";
                break;
            }
            cacheOfHelp.Set("help", str, cacheItemPolicy);
            MonitorStat.AddCacheInfo();
            MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
            return(str);
        }
コード例 #2
0
ファイル: VelibService.cs プロジェクト: YileiLI/SoCWS-2019
        public async Task <List <string> > GetRouteAsync(string origin, string destination)
        {
            DateTime start = DateTime.Now;

            MonitorStat.AddRequestFromClient();
            string key = origin + destination;

            if (cacheOfRoute[key] != null)
            {
                MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
                return((List <string>)cacheOfRoute[key]);
            }
            var    res  = new List <string>();
            string ways = "";

            try
            {
                JObject route = (JObject)(await GetArray("https://maps.googleapis.com/maps/api/directions/json?mode=bicycling&origin=" +
                                                         origin + "&destination=" + destination + "&key=AIzaSyBx25Hq3Xadi0gqGIKVx8S7z9YfhJAp8gk"));

                if (((string)route["geocoded_waypoints"][0]["geocoder_status"]).Equals("OK") &&
                    ((string)route["geocoded_waypoints"][1]["geocoder_status"]).Equals("OK"))
                {
                    if (route["routes"].HasValues)
                    {
                        ways = "Distance: " + route["routes"][0]["legs"][0]["distance"]["text"] + "\nDuration: "
                               + route["routes"][0]["legs"][0]["duration"]["text"];
                        res.Add(ways);
                        int i = 1;
                        foreach (var step in route["routes"][0]["legs"][0]["steps"])
                        {
                            ways = i + ". " + step["html_instructions"] + "\n\t" + step["distance"]["text"]
                                   + "\n\t" + step["duration"]["text"];
                            res.Add(ways);
                            i++;
                        }
                    }
                    else
                    {
                        ways = "Couldn't find routes for you.";
                        res.Add(ways);
                    }
                }
                else
                {
                    ways = "Try Again";
                    res.Add(ways);
                }
            }
            catch (WebException wex)
            {
                Console.WriteLine("Web Exception");
                ways = "Not Found!";
                res.Add(ways);
            }
            cacheOfRoute.Set(key, res, cacheItemPolicy);
            MonitorStat.AddCacheInfo();
            MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
            return(res);
        }
コード例 #3
0
        public string GetRequestToVelib(string startTime, string endTime)
        {
            double start;
            double end;

            try
            {
                start = Convert.ToDouble(startTime);
                end   = Convert.ToDouble(endTime);
            }
            catch (Exception e)
            {
                return("Please input a valid number");
            }
            return("Number of requests to Velib: " + MonitorStat.GetRequestNumberToVelib(start, end).ToString());
        }
コード例 #4
0
ファイル: VelibService.cs プロジェクト: YileiLI/SoCWS-2019
        public async Task <string> GetInfomationsOfStationByNameAsync(string nameOfCity, string numOfStation)
        {
            DateTime start = DateTime.Now;

            MonitorStat.AddRequestFromClient();
            if (cacheOfStation[numOfStation] != null)
            {
                MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
                return((string)cacheOfStation[numOfStation]);
            }
            request = WebRequest.Create(
                "https://api.jcdecaux.com/vls/v1/stations/" + numOfStation + "?contract=" + nameOfCity + "&apiKey=3857a4c9c72e34c322bd73cd36dec39dd7d15dd9");
            Console.WriteLine(nameOfCity + numOfStation);
            try
            {
                response = await request.GetResponseAsync();

                // Display the status.
                Console.WriteLine(((HttpWebResponse)response).StatusDescription);
                // Get the stream containing content returned by the server.
                dataStream = response.GetResponseStream();
                // Open the stream using a StreamReader for easy access.
                reader = new StreamReader(dataStream);
                // Read the content.
                MonitorStat.AddRequestToVelib();
                responseFromServer = reader.ReadToEnd();
                if (responseFromServer.Length > 50)
                {
                    RootObject rb = JsonConvert.DeserializeObject <RootObject>(responseFromServer);
                    cacheOfStation.Set(numOfStation, rb.ToString(), cacheItemPolicy);
                    MonitorStat.AddCacheInfo();
                    MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
                    return(rb.ToString());
                }
                else
                {
                    MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
                    return("Not Found!");
                }
            }
            catch (WebException wex)
            {
                Console.WriteLine("Web Exception" + wex);
                MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
                return("Not Found!");
            }
        }
コード例 #5
0
ファイル: VelibService.cs プロジェクト: YileiLI/SoCWS-2019
        public async Task <string> GetAllStationsByCityAsync(string nameOfCity)
        {
            DateTime start = DateTime.Now;

            MonitorStat.AddRequestFromClient();
            if (cacheOfCity[nameOfCity] != null)
            {
                MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
                return((string)cacheOfCity[nameOfCity]);
            }

            string res = "";

            request = WebRequest.Create(
                "https://api.jcdecaux.com/vls/v1/stations?contract=" + nameOfCity + "&apiKey=3857a4c9c72e34c322bd73cd36dec39dd7d15dd9");
            try
            {
                response = await request.GetResponseAsync();

                // Display the status.
                Console.WriteLine(((HttpWebResponse)response).StatusDescription);
                // Get the stream containing content returned by the server.
                dataStream = response.GetResponseStream();
                // Open the stream using a StreamReader for easy access.
                reader = new StreamReader(dataStream);
                MonitorStat.AddRequestToVelib();
                // Read the content.
                responseFromServer = reader.ReadToEnd();
                List <RootObject> rb = JsonConvert.DeserializeObject <List <RootObject> >(responseFromServer);
                foreach (RootObject ob in rb)
                {
                    res = res + ob.name + "\n";
                }
                cacheOfCity.Set(nameOfCity, res, cacheItemPolicy);
                MonitorStat.AddCacheInfo();
                MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
            }
            catch (WebException wex)
            {
                MonitorStat.AddDelay(DateTime.Now.Subtract(start).TotalMilliseconds);
                Console.WriteLine("Web Exception" + wex);
            }
            return(res);
        }
コード例 #6
0
ファイル: VelibService.cs プロジェクト: YileiLI/SoCWS-2019
        private async Task <JObject> GetArray(string requestUrl)
        {
            // Create a request for the URL.
            WebRequest request = WebRequest.Create(requestUrl);
            // If required by the server, set the credentials.
            // request.Credentials = CredentialCache.DefaultCredentials;
            // Get the response.
            WebResponse response = await request.GetResponseAsync();

            // Display the status.
            // Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Get the stream containing content returned by the server.
            Stream dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);

            // Read the content.
            MonitorStat.AddRequestToVelib();
            string responseFromServer = reader.ReadToEnd();

            // Display the content.
            return(JObject.Parse(responseFromServer));
        }
コード例 #7
0
 public string GetDelay()
 {
     return(MonitorStat.GetDelay());
 }
コード例 #8
0
 public int GetCacheNumber()
 {
     return(MonitorStat.GetCacheInfo());
 }