예제 #1
0
        /// <summary>
        /// Get a list of all masteries asynchronously.
        /// </summary>
        /// <param name="region">Region from which to retrieve the data.</param>
        /// <param name="masteryData">Data to retrieve.</param>
        /// <param name="language">Language of the data to be retrieved.</param>
        /// <returns>An MasteryListStatic object containing all masteries.</returns>
        public async Task <MasteryListStatic> GetMasteriesAsync(Region region,
                                                                MasteryData masteryData = MasteryData.basic, Language language = Language.en_US)
        {
            var wrapper = cache.Get <string, MasteryListStaticWrapper>(MasteriesCacheKey);

            if (wrapper != null && language == wrapper.Language && masteryData == wrapper.MasteryData)
            {
                return(wrapper.MasteryListStatic);
            }
            var args = "{\"data\" : \"" + masteryData.ToString() + "\", \"region\" : \"" + region.ToString() + "\"}";
            var ir   = new Amazon.Lambda.Model.InvokeRequest
            {
                FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:staticGetMastery",
                PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
            };
            var json = "";
            var resp = await App.lambdaClient.InvokeAsync(ir);

            var sr = new StreamReader(resp.Payload);

            json = sr.ReadToEnd();
            var masteries = await Task.Factory.StartNew(() =>
                                                        JsonConvert.DeserializeObject <MasteryListStatic>(json));

            wrapper = new MasteryListStaticWrapper(masteries, language, masteryData);
            cache.Add(MasteriesCacheKey, wrapper, DefaultSlidingExpiry);
            return(wrapper.MasteryListStatic);
        }
예제 #2
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            CognitoAWSCredentials credentials = new CognitoAWSCredentials(
                "ap-southeast-2:b3abd62e-3efc-4d68-998e-7e528afc3368", // Cognito Identity Pool ID
                RegionEndpoint.APSoutheast2                            // Region
                );

            Amazon.Lambda.Model.InvokeRequest request = new Amazon.Lambda.Model.InvokeRequest();
            request.FunctionName = "TestTT";
            request.Payload      = "{\"id\":1,\"operation\":\"list\",\"tableName\":\"TimeTrackDB\",\"username\":\"" + User + "\",\"client\":\"" + "a" + "\",\"charge\":\"" + "a" + "\",\"starttime\":\"" + DateTime.Now + "\",\"stoptime\":\"" + DateTime.Now + "\"}";

            Amazon.Lambda.AmazonLambdaClient client = new AmazonLambdaClient(credentials, RegionEndpoint.APSoutheast2);
            var result = client.InvokeAsync(request).Result;

            result.Payload.Position = 0;
            var sr    = new StreamReader(result.Payload);
            var myStr = sr.ReadToEnd();


            var data = JsonConvert.DeserializeObject <LogTimes>(myStr);

            tblLogTimeData.Source = new LogTimeData(data.Items);
        }
예제 #3
0
        /// <summary>
        /// Get a summoner spell synchronously.
        /// </summary>
        /// <param name="region">Region from which to retrieve the data.</param>
        /// <param name="summonerSpell">Summoner spell to retrieve.</param>
        /// <param name="summonerSpellData">Data to retrieve.</param>
        /// <param name="language">Language of the data to be retrieved.</param>
        /// <returns>A summoner spell.</returns>
        public SummonerSpellStatic GetSummonerSpell(Region region, SummonerSpell summonerSpell,
                                                    List <SummonerSpellData> summonerSpellData, Language language = Language.en_US)
        {
            var stringList = new List <string>();

            foreach (var data in summonerSpellData)
            {
                stringList.Add(data.ToString());
            }
            var champData = Util.BuildNamesString(stringList);
            var args      = "{\"data\" : \"" + champData + "\", \"region\" : \"" + region.ToString() + ", \"id\" : \"" + (int)summonerSpell + "\"}";
            var ir        = new Amazon.Lambda.Model.InvokeRequest
            {
                FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:staticGetSummonerSpell",
                PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
            };
            var json = "";
            var test = Task.Run(async() =>
            {
                var resp = await App.lambdaClient.InvokeAsync(ir);

                var sr = new StreamReader(resp.Payload);

                json = sr.ReadToEnd();
            });

            test.Wait();
            var spell = JsonConvert.DeserializeObject <SummonerSpellStatic>(json);

            return(spell);
        }
예제 #4
0
        /// <summary>
        /// Get a list of all champions asynchronously.
        /// </summary>
        /// <param name="region">Region from which to retrieve the data.</param>
        /// <param name="championData">Data to retrieve.</param>
        /// <param name="language">Language of the data to be retrieved.</param>
        /// <returns>A ChampionListStatic object containing all champions.</returns>
        public async Task <ChampionListStatic> GetChampionsAsync(Region region,
                                                                 List <ChampionData> championData, Language language = Language.en_US)
        {
            var stringList = new List <string> {
            };

            foreach (var data in championData)
            {
                stringList.Add(data.ToString());
            }
            var champData = Util.BuildNamesString(stringList);
            var args      = "{\"data\" : \"" + champData + "\", \"region\" : \"" + region.ToString() + "\"}";
            var ir        = new Amazon.Lambda.Model.InvokeRequest
            {
                FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:staticGetChampion",
                PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
            };
            var json = "";
            var resp = await App.lambdaClient.InvokeAsync(ir);

            var sr = new StreamReader(resp.Payload);

            json = sr.ReadToEnd();
            var champs = await Task.Factory.StartNew(() =>
                                                     JsonConvert.DeserializeObject <ChampionListStatic>(json));

            return(champs);
        }
예제 #5
0
        /// <summary>
        /// Get a rune asynchronously.
        /// </summary>
        /// <param name="region">Region from which to retrieve the data.</param>
        /// <param name="runeId">Id of the rune to retrieve.</param>
        /// <param name="runeData">Data to retrieve.</param>
        /// <param name="language">Language of the data to be retrieved.</param>
        /// <returns>A rune.</returns>
        public async Task <RuneStatic> GetRuneAsync(Region region, int runeId, RuneData runeData = RuneData.basic,
                                                    Language language = Language.en_US)
        {
            var wrapper = cache.Get <string, RuneStaticWrapper>(RuneCacheKey + runeId);

            if (wrapper != null && wrapper.Language == language && wrapper.RuneData == RuneData.all)
            {
                return(wrapper.RuneStatic);
            }
            var listWrapper = cache.Get <string, RuneListStaticWrapper>(RunesCacheKey);

            if (listWrapper != null && listWrapper.Language == language && listWrapper.RuneData == runeData)
            {
                return(listWrapper.RuneListStatic.Runes.ContainsKey(runeId) ?
                       listWrapper.RuneListStatic.Runes[runeId] : null);
            }
            var args = "{\"data\" : \"" + runeData.ToString() + "\", \"region\" : \"" + region.ToString() + ", \"id\" : \"" + runeId + "\"}";
            var ir   = new Amazon.Lambda.Model.InvokeRequest
            {
                FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:staticGetRune",
                PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
            };
            var json = "";
            var resp = await App.lambdaClient.InvokeAsync(ir);

            var sr = new StreamReader(resp.Payload);

            json = sr.ReadToEnd();
            var rune = await Task.Factory.StartNew(() =>
                                                   JsonConvert.DeserializeObject <RuneStatic>(json));

            cache.Add(RuneCacheKey + runeId, new RuneStaticWrapper(rune, language, runeData), DefaultSlidingExpiry);
            return(rune);
        }
예제 #6
0
        /// <summary>
        /// Retrieve static api version data asynchronously.
        /// </summary>
        /// <param name="region">Region from which to retrieve data.</param>
        /// <returns>A list of versions as strings.</returns>
        public async Task <List <string> > GetVersionsAsync(Region region)
        {
            var wrapper = cache.Get <string, List <string> >(VersionCacheKey);

            if (wrapper != null)
            {
                return(wrapper);
            }

            var args = "{\"region\" : \"" + region.ToString() + "\"}";
            var ir   = new Amazon.Lambda.Model.InvokeRequest
            {
                FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:staticGetVersion",
                PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
            };
            var json = "";
            var resp = await App.lambdaClient.InvokeAsync(ir);

            var sr = new StreamReader(resp.Payload);

            json = sr.ReadToEnd();
            var version = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject <List <string> >(json));

            cache.Add(VersionCacheKey, version, DefaultSlidingExpiry);

            return(version);
        }
예제 #7
0
        /// <summary>
        /// Retrieve realm data synchronously.
        /// </summary>
        /// <param name="region">Region corresponding to data to retrieve.</param>
        /// <returns>A realm object containing the requested information.</returns>

        /*public RealmStatic GetRealm(Region region)
         * {
         *  var wrapper = cache.Get<string, RealmStaticWrapper>(RealmCacheKey);
         *  if (wrapper != null)
         *  {
         *      return wrapper.RealmStatic;
         *  }
         *
         *  var json = requester.CreateGetRequest(string.Format(RealmRootUrl, region.ToString()), RootDomain);
         *  var realm = JsonConvert.DeserializeObject<RealmStatic>(json);
         *
         *  cache.Add(RealmCacheKey, new RealmStaticWrapper(realm), DefaultSlidingExpiry);
         *
         *  return realm;
         * }
         *
         * /// <summary>
         * /// Retrieve realm data asynchronously.
         * /// </summary>
         * /// <param name="region">Region corresponding to data to retrieve.</param>
         * /// <returns>A realm object containing the requested information.</returns>
         * public async Task<RealmStatic> GetRealmAsync(Region region)
         * {
         *  var wrapper = cache.Get<string, RealmStaticWrapper>(RealmCacheKey);
         *  if (wrapper != null)
         *  {
         *      return wrapper.RealmStatic;
         *  }
         *
         *  var json = await requester.CreateGetRequestAsync(string.Format(RealmRootUrl, region.ToString()), RootDomain);
         *  var realm = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<RealmStatic>(json));
         *
         *  cache.Add(RealmCacheKey, new RealmStaticWrapper(realm), DefaultSlidingExpiry);
         *
         *  return realm;
         * }*/

        /// <summary>
        /// Get a list of all runes synchronously.
        /// </summary>
        /// <param name="region">Region from which to retrieve the data.</param>
        /// <param name="runeData">Data to retrieve.</param>
        /// <param name="language">Language of the data to be retrieved.</param>
        /// <returns>A RuneListStatic object containing all runes.</returns>
        public RuneListStatic GetRunes(Region region, RuneData runeData = RuneData.basic
                                       , Language language = Language.en_US)
        {
            var wrapper = cache.Get <string, RuneListStaticWrapper>(RunesCacheKey);

            if (wrapper == null || language != wrapper.Language || runeData != wrapper.RuneData)
            {
                var args = "{\"data\" : \"" + runeData.ToString() + "\", \"region\" : \"" + region.ToString() + "\"}";
                var ir   = new Amazon.Lambda.Model.InvokeRequest
                {
                    FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:staticGetRune",
                    PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
                };
                var json = "";
                var test = Task.Run(async() =>
                {
                    var resp = await App.lambdaClient.InvokeAsync(ir);

                    var sr = new StreamReader(resp.Payload);

                    json = sr.ReadToEnd();
                });
                test.Wait();
                var runes = JsonConvert.DeserializeObject <RuneListStatic>(json);
                wrapper = new RuneListStaticWrapper(runes, language, runeData);
                cache.Add(RunesCacheKey, wrapper, DefaultSlidingExpiry);
            }
            return(wrapper.RuneListStatic);
        }
예제 #8
0
        /// <summary>
        /// Get a mastery synchronously.
        /// </summary>
        /// <param name="region">Region from which to retrieve the data.</param>
        /// <param name="masteryId">Id of the mastery to retrieve.</param>
        /// <param name="masteryData">Data to retrieve.</param>
        /// <param name="language">Language of th data to be retrieved.</param>
        /// <returns>A mastery.</returns>
        public MasteryStatic GetMastery(Region region, int masteryId, MasteryData masteryData = MasteryData.basic,
                                        Language language = Language.en_US)
        {
            var wrapper = cache.Get <string, MasteryStaticWrapper>(MasteryCacheKey + masteryId);

            if (wrapper != null && wrapper.Language == language && wrapper.MasteryData == masteryData)
            {
                return(wrapper.MasteryStatic);
            }
            else
            {
                var listWrapper = cache.Get <string, MasteryListStaticWrapper>(MasteriesCacheKey);
                if (listWrapper != null && listWrapper.Language == language && listWrapper.MasteryData == masteryData)
                {
                    if (listWrapper.MasteryListStatic.Masteries.ContainsKey(masteryId))
                    {
                        return(listWrapper.MasteryListStatic.Masteries[masteryId]);
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    var args = "{\"data\" : \"" + masteryData.ToString() + "\", \"region\" : \"" + region.ToString() + ", \"id\" : \"" + masteryId + "\"}";
                    var ir   = new Amazon.Lambda.Model.InvokeRequest
                    {
                        FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:staticGetMastery",
                        PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
                    };
                    var json = "";
                    var test = Task.Run(async() =>
                    {
                        var resp = await App.lambdaClient.InvokeAsync(ir);

                        var sr = new StreamReader(resp.Payload);

                        json = sr.ReadToEnd();
                    });
                    test.Wait();
                    var mastery = JsonConvert.DeserializeObject <MasteryStatic>(json);
                    cache.Add(MasteryCacheKey + masteryId, new MasteryStaticWrapper(mastery, language, masteryData),
                              DefaultSlidingExpiry);
                    return(mastery);
                }
            }
        }
예제 #9
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            lblConsultant.Text = User;

            var g = new UITapGestureRecognizer(() => View.EndEditing(true));

            g.CancelsTouchesInView = false;             //for iOS5

            View.AddGestureRecognizer(g);

            postButton.Hidden = true;

            btnStart.TouchUpInside += (sender, e) =>
            {
                StartTime         = DateTime.Now;
                btnStart.Hidden   = true;
                postButton.Hidden = false;
            };

            postButton.TouchUpInside += (sender, e) =>
            {
                CognitoAWSCredentials credentials = new CognitoAWSCredentials(
                    "ap-southeast-2:b3abd62e-3efc-4d68-998e-7e528afc3368", // Cognito Identity Pool ID
                    RegionEndpoint.APSoutheast2                            // Region
                    );

                Amazon.Lambda.Model.InvokeRequest request = new Amazon.Lambda.Model.InvokeRequest();
                request.FunctionName = "TestTT";
                request.Payload      = "{\"id\":\"" + Guid.NewGuid() + "\",\"operation\":\"create\",\"tableName\":\"TimeTrackDB\",\"username\":\"" + User + "\",\"client\":\"" + txtClient.Text + "\",\"charge\":\"" + txtCharge.Text + "\",\"starttime\":\"" + StartTime.ToString("dd/mmm/yyyy hh:mm:ss") + "\",\"stoptime\":\"" + DateTime.Now.ToString("dd/mmm/yyyy hh:mm:ss") + "\"}";

                Amazon.Lambda.AmazonLambdaClient client = new AmazonLambdaClient(credentials, RegionEndpoint.APSoutheast2);
                var result = client.InvokeAsync(request).Result;


                var alert = UIAlertController.Create("Info", "Time Saved", UIAlertControllerStyle.Alert);
                alert.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Default, null));

                PresentViewController(alert, true, null);
                btnStart.Hidden   = false;
                postButton.Hidden = true;
                txtClient.Text    = string.Empty;
                txtCharge.Text    = string.Empty;
            };
        }
예제 #10
0
        /// <summary>
        /// Get ranked stats for this summoner asynchronously.
        /// Includes statistics for Twisted Treeline and Summoner's Rift.
        /// </summary>
        /// <param name="season">Season for which you want the stats.</param>
        /// <returns>A list of champions stats.</returns>
        public async Task <List <ChampionStats> > GetStatsRankedAsync(StatsEndpoint.Season season)
        {
            var args = "{\"id\" : \"" + Id + "\"," + " \"region\" : \"" + Region.ToString() + ", \"season\" : \"" + season + "\"}";
            var ir   = new Amazon.Lambda.Model.InvokeRequest
            {
                FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:getRankedStats",
                PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
            };
            var json = "";
            var resp = await App.lambdaClient.InvokeAsync(ir);

            var sr = new StreamReader(resp.Payload);

            json = sr.ReadToEnd();
            return((await Task.Factory.StartNew(() =>
                                                JsonConvert.DeserializeObject <RankedStats>(json))).ChampionStats);
        }
예제 #11
0
        /// <summary>
        /// Retrieves leagues data for this summoner, including leagues for all of this summoner's
        /// teams asynchronously.
        /// </summary>
        /// <returns>List of leagues.</returns>
        public async Task <List <League> > GetEntireLeaguesAsync()
        {
            var args = "{\"id\" : \"" + Id + "\"," + " \"region\" : \"" + Region.ToString() + "\"}";
            var ir   = new Amazon.Lambda.Model.InvokeRequest
            {
                FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:getEntireLeague",
                PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
            };
            var json = "";
            var resp = await App.lambdaClient.InvokeAsync(ir);

            var sr = new StreamReader(resp.Payload);

            json = sr.ReadToEnd();
            return((await Task.Factory.StartNew(() =>
                                                JsonConvert.DeserializeObject <Dictionary <long, List <League> > >(json)))[Id]);
        }
예제 #12
0
        /// <summary>
        /// Get ranked stats for this summoner synchronously, for the current season.
        /// Includes statistics for Twisted Treeline and Summoner's Rift.
        /// </summary>
        /// <returns>A list of champions stats.</returns>
        public List <ChampionStats> GetStatsRanked()
        {
            var args = "{\"id\" : \"" + Id + "\"," + " \"region\" : \"" + Region.ToString() + "\"}";
            var ir   = new Amazon.Lambda.Model.InvokeRequest
            {
                FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:getRankedStats",
                PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
            };
            var json = "";
            var test = Task.Run(async() =>
            {
                var resp = await App.lambdaClient.InvokeAsync(ir);

                var sr = new StreamReader(resp.Payload);

                json = sr.ReadToEnd();
            });

            test.Wait();
            return(JsonConvert.DeserializeObject <RankedStats>(json).ChampionStats);
        }
        public async Task <bool> IsSchnitzel(String filePath, String fileName)
        {
            await UploadToS3(filePath, fileName);

            AmazonLambdaClient alc = new AmazonLambdaClient(accessKey, secretKey, RegionEndpoint.EUCentral1);

            Amazon.Lambda.Model.InvokeRequest ir = new Amazon.Lambda.Model.InvokeRequest();
            ir.InvocationType = InvocationType.RequestResponse;
            ir.FunctionName   = "SchnitzelOrNot";

            ir.Payload = "\"" + fileName + "\"";
            var res = await alc.InvokeAsync(ir);

            var strResponse = Encoding.ASCII.GetString(res.Payload.ToArray());

            if (bool.TryParse(strResponse, out bool retVal))
            {
                return(retVal);
            }

            return(false);
        }
예제 #14
0
        /// <summary>
        /// Get mastery pages for this summoner synchronously.
        /// </summary>
        /// <returns>A list of mastery pages.</returns>
        public List <MasteryPage> GetMasteryPages()
        {
            var args = "{\"id\" : \"" + Id + "\"," + " \"region\" : \"" + Region.ToString() + "\"}";
            var ir   = new Amazon.Lambda.Model.InvokeRequest
            {
                FunctionName  = "arn:aws:lambda:us-east-1:907841483528:function:getMasteries",
                PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(args)
            };
            var json = "";

            var test = Task.Run(async() =>
            {
                var resp = await App.lambdaClient.InvokeAsync(ir);

                var sr = new StreamReader(resp.Payload);

                json = sr.ReadToEnd();
            });

            test.Wait();
            return(JsonConvert.DeserializeObject <Dictionary <long, MasteryPages> >(json)
                   .Values.FirstOrDefault().Pages);
        }
예제 #15
0
        public async Task <bool> MachFaces(String filePath, String fileName, String personName)
        {
            await UploadToS3(filePath, fileName);

            AmazonLambdaClient alc = new AmazonLambdaClient(accessKey, secretKey, RegionEndpoint.USWest2);

            Amazon.Lambda.Model.InvokeRequest ir = new Amazon.Lambda.Model.InvokeRequest();
            ir.InvocationType = InvocationType.RequestResponse;
            ir.FunctionName   = "RekognitionFunction";

            String value = personName + "#" + fileName;

            ir.Payload = "\"" + value + "\"";
            var res = await alc.InvokeAsync(ir);

            var strResponse = Encoding.ASCII.GetString(res.Payload.ToArray());

            if (bool.TryParse(strResponse, out bool retVal))
            {
                return(retVal);
            }

            return(false);
        }
        public async void WriteRecord(string fname, string nick, int age, string gender)
        {
            //point the lambda call to the right location endpoint
            Amazon.RegionEndpoint region = Amazon.RegionEndpoint.USEast1;

            //credentials
            var awsCredentials = new Amazon.Runtime.BasicAWSCredentials(Auth.AWSKey, Auth.AWSSecret);

            try
            {
                //setup the lambda client with the credential and endpoint information
                Amazon.Lambda.AmazonLambdaClient client = new Amazon.Lambda.AmazonLambdaClient(awsCredentials, region);

                JObject myUser = new JObject();
                myUser["id"]       = id;
                myUser["email"]    = email;
                myUser["name"]     = fname;
                myUser["nickname"] = nick;
                myUser["age"]      = age;
                myUser["gender"]   = Gender;

                //payload has to be encapsulated in double quotes, thus the strange escape sequences here
                var invokeRequest = new Amazon.Lambda.Model.InvokeRequest {
                    FunctionName = "WriteUserProfile", InvocationType = "RequestResponse", PayloadStream = AWSSDKUtils.GenerateMemoryStreamFromString(myUser.ToString()),
                };

                //going to put this task on another thread so the UI doesn't lock up
                System.Threading.Tasks.Task <Amazon.Lambda.Model.InvokeResponse> responseTask = client.InvokeAsync(invokeRequest);

                await responseTask.ContinueWith((response) =>
                {
                    string statusText        = "";
                    string informationalText = "Internal error: Unhandled branch point"; // Should always be set in the next "if"

                    if (response.IsCanceled)
                    {
                        statusText = "Cancelled"; informationalText = "";
                    }
                    else if (response.IsFaulted)
                    {
                        statusText        = "Faulted";
                        informationalText = response.Exception.Message;
                        foreach (var exception in response.Exception.InnerExceptions)
                        {
                            informationalText += "\n" + exception.Message;
                        }
                    }
                    else if (response.IsCompleted)
                    {
                        statusText         = "Finished";
                        var responseReader = new System.IO.StreamReader(response.Result.Payload);
                        informationalText  = responseReader.ReadToEnd();

                        //take the user over to the legal disclaimer step
                        var activity = new Intent(this, typeof(LegalDisclaimerActivity));
                        StartActivity(activity);
                    }

                    // This continuation is not run on the main UI thread, so need to set up
                    // another task perform the UI changes on the correct thread.
                    RunOnUiThread(() =>
                    {
                        Console.WriteLine(statusText);
                        Console.WriteLine(informationalText);
                    });
                });
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
        }
        private async void GetRecords()
        {
            //get the stored email of this user
            string email = prefs.GetString("email", "");

            //point the lambda call to the right location endpoint
            Amazon.RegionEndpoint region = Amazon.RegionEndpoint.USEast1;

            //credentials
            var awsCredentials = new Amazon.Runtime.BasicAWSCredentials(WebApp.AWSKey, WebApp.AWSSecret);

            TextView textHere = FindViewById <TextView>(Resource.Id.textView1);

            textHere.Text = "";
            try
            {
                //setup the lambda client with the credential and endpoint information
                Amazon.Lambda.AmazonLambdaClient client = new Amazon.Lambda.AmazonLambdaClient(awsCredentials, region);

                //payload has to be encapsulated in double quotes, thus the strange escape sequences here
                var invokeRequest = new Amazon.Lambda.Model.InvokeRequest {
                    FunctionName = "GetScanHistory", InvocationType = "RequestResponse", Payload = "\"" + email + "\""
                };

                //going to put this task on another thread so the UI doesn't lock up
                System.Threading.Tasks.Task <Amazon.Lambda.Model.InvokeResponse> responseTask = client.InvokeAsync(invokeRequest);

                await responseTask.ContinueWith((response) =>
                {
                    string statusText        = "";
                    string informationalText = "Internal error: Unhandled branch point"; // Should always be set in the next "if"

                    if (response.IsCanceled)
                    {
                        statusText = "Cancelled"; informationalText = "";
                    }
                    else if (response.IsFaulted)
                    {
                        statusText        = "Faulted";
                        informationalText = response.Exception.Message;
                        foreach (var exception in response.Exception.InnerExceptions)
                        {
                            informationalText += "\n" + exception.Message;
                        }
                    }
                    else if (response.IsCompleted)
                    {
                        statusText         = "Finished";
                        var responseReader = new System.IO.StreamReader(response.Result.Payload);
                        informationalText  = responseReader.ReadToEnd();
                    }

                    // This continuation is not run on the main UI thread, so need to set up
                    // another task perform the UI changes on the correct thread.
                    RunOnUiThread(() =>
                    {
                        Console.WriteLine(statusText);
                        Console.WriteLine(informationalText);

                        //now that we have the response we can deserialize it from Json to our object type
                        List <QRScan> scanList = JsonConvert.DeserializeObject <List <QRScan> >(informationalText);
                        foreach (QRScan scan in scanList)
                        {
                            textHere.Text += scan;
                            textHere.Text += "\n";
                        }
                    });
                });
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
            }
        }