private async Task CreateLocationDataRequest(bool urgent)
        {
            // Don't send anything unless we're setup
            if (!Settings.WeatherLoaded)
            {
                return;
            }

            if (mWearNodesWithApp == null)
            {
                // Create requests if nodes exist with app support
                mWearNodesWithApp = await FindWearDevicesWithApp();

                if (mWearNodesWithApp == null || mWearNodesWithApp.Count == 0)
                {
                    return;
                }
            }

            PutDataMapRequest mapRequest = PutDataMapRequest.Create(WearableHelper.LocationPath);
            var homeData = Settings.HomeData;

            mapRequest.DataMap.PutString("locationData", homeData?.ToJson());
            mapRequest.DataMap.PutLong("update_time", DateTime.UtcNow.Ticks);
            PutDataRequest request = mapRequest.AsPutDataRequest();

            if (urgent)
            {
                request.SetUrgent();
            }
            await WearableClass.DataApi.PutDataItem(mGoogleApiClient, request);

            Logger.WriteLine(LoggerLevel.Info, "{0}: CreateLocationDataRequest(): urgent: {1}", TAG, urgent.ToString());
        }
示例#2
0
        public IHttpActionResult PutData(PutDataRequest request)
        {
            try
            {
                var sw = Stopwatch.StartNew();

                if (request.ApiKey != ApiAdminKey)
                {
                    Log.Warn($"Invalid API key on {nameof(PutData)}: {request.ApiKey}");
                    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized)
                    {
                        Content      = new StringContent("Incorrect key! Your try was logged."),
                        ReasonPhrase = "Incorrect key"
                    });
                }

                if (request.Context == "Player")
                {
                    var player = request.GetObject <Player>();
                    if (player == null)
                    {
                        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotAcceptable)
                        {
                            Content      = new StringContent("Null Player was sent."),
                            ReasonPhrase = "Null Player"
                        });
                    }

                    var connectionString = ConfigurationManager.ConnectionStrings["Store"].ConnectionString;
                    var db = new KeyStore(connectionString);
                    db.Set(player);
                }
                else
                {
                    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)
                    {
                        Content      = new StringContent("Invalid Context."),
                        ReasonPhrase = "Invalid Context."
                    });
                }


                Log.Debug($"PutData in {sw.Elapsed}");
                return(Ok());
            }
            catch (HttpResponseException ex)
            {
                Log.Error("PutData", ex);
                throw;
            }
            catch (Exception ex)
            {
                Log.Error("PutData", ex);
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
                {
                    Content      = new StringContent(ex.Message),
                    ReasonPhrase = "Put data failed"
                });
            }
        }
        void SendCommand(string path, byte[] data = null)
        {
            if (data == null)
            {
                data = new byte[] { 1 }
            }
            ;

            Task.Factory.StartNew(() => {
                Console.WriteLine("Wear DataApi -> Sending update in thread...");

                if (googleClient.IsConnected)
                {
                    var pdr = PutDataRequest.Create("/" + Guid.NewGuid().ToString("D"));
                    pdr.SetData(data);

                    WearableClass.DataApi.PutDataItem(googleClient, pdr).Await();

                    Console.WriteLine("Sent Data Item");
                }
            }).ContinueWith(t => {
                if (t.Exception != null)
                {
                    Console.WriteLine("Wear DataApi -> Failed to Send Contraction: " + t.Exception);
                }
            });
        }
    }
示例#4
0
        protected override void OnHandleIntent(Intent intent)
        {
            google_api_client.BlockingConnect(TIME_OUT_MS, TimeUnit.Milliseconds);
            Android.Net.Uri dataItemUri = intent.Data;
            if (!google_api_client.IsConnected)
            {
                Log.Error(TAG, "Failed to update data item " + dataItemUri +
                          " because client is disconnected from Google Play Services");
                return;
            }
            var dataItemResult = WearableClass.DataApi.GetDataItem(
                google_api_client, dataItemUri).Await().JavaCast <IDataApiDataItemResult> ();

            var putDataMapRequest = PutDataMapRequest.CreateFromDataMapItem(
                DataMapItem.FromDataItem(dataItemResult.DataItem));
            var dataMap = putDataMapRequest.DataMap;

            //update quiz status variables
            int  questionIndex       = intent.GetIntExtra(EXTRA_QUESTION_INDEX, -1);
            bool chosenAnswerCorrect = intent.GetBooleanExtra(EXTRA_QUESTION_CORRECT, false);

            dataMap.PutInt(Constants.QUESTION_INDEX, questionIndex);
            dataMap.PutBoolean(Constants.CHOSEN_ANSWER_CORRECT, chosenAnswerCorrect);
            dataMap.PutBoolean(Constants.QUESTION_WAS_ANSWERED, true);
            PutDataRequest request = putDataMapRequest.AsPutDataRequest();

            WearableClass.DataApi.PutDataItem(google_api_client, request).Await();

            //remove this question notification
            ((NotificationManager)GetSystemService(NotificationService)).Cancel(questionIndex);
            google_api_client.Disconnect();
        }
示例#5
0
        public void SendData()
        {
            //send data to DataApi layer
            if (!_client.IsConnected)
            {
                return;
            }

            PutDataMapRequest mrequest = PutDataMapRequest.Create(syncPath);

            mrequest.DataMap.PutInt("heartratedata", heartRate);
            PutDataRequest request = mrequest.AsPutDataRequest();

            WearableClass.DataApi.PutDataItem(_client, request);
        }
        public static NoneQueryResponse AddUpdate <T>(string serviceUrl, string serviceMethod, string tokenKey, T dataPost, string denyFields = "", string username = "", string permissionCode = "") // Return Single Object
        {
            try
            {
                var _client = new RestClient(serviceUrl);
                var request = new RestRequest(serviceMethod, Method.POST)
                {
                    RequestFormat = DataFormat.Json
                };
                PutDataRequest dataRequest = new PutDataRequest();
                dataRequest.RequestObject = dataPost;
                dataRequest.DenyFields    = denyFields;

                /*
                 *  For case add more param over object
                 */
                request.AddBody(dataRequest);
                if (!String.IsNullOrEmpty(tokenKey))
                {
                    request.AddHeader("tokenKey", tokenKey);
                }
                var               response     = _client.Execute(request);
                GetDataResponse   responseData = JsonConvert.DeserializeObject <GetDataResponse>(response.Content);
                NoneQueryResponse dataObject   = new NoneQueryResponse();
                if (responseData != null)
                {
                    dataObject = JsonConvert.DeserializeObject <NoneQueryResponse>(responseData.Content.ToString());
                    return(dataObject);
                }
                return(dataObject);
            }
            catch (Exception ex)
            {
                return(new NoneQueryResponse());
            }
        }
        /**
         * Transfer the required data over to the wearable
         * @param attractions list of attraction data to transfer over
         */
        private void SendDataToWearable(List <Attraction> attractions)
        {
            GoogleApiClient googleApiClient = new GoogleApiClient.Builder(this)
                                              .AddApi(WearableClass.API)
                                              .Build();

            // It's OK to use blockingConnect() here as we are running in an
            // IntentService that executes work on a separate (background) thread.
            ConnectionResult connectionResult = googleApiClient.BlockingConnect(
                Constants.GOOGLE_API_CLIENT_TIMEOUT_S, TimeUnit.Seconds);

            // Limit attractions to send
            int count = attractions.Count > Constants.MAX_ATTRACTIONS ?
                        Constants.MAX_ATTRACTIONS : attractions.Count;

            List <DataMap> attractionsData = new List <DataMap>(count);

            for (int i = 0; i < count; i++)
            {
                Attraction attraction = attractions[i];

                Bitmap image          = null;
                Bitmap secondaryImage = null;

                try
                {
                    //TODO:
                    // Fetch and resize attraction image bitmap
                    //image = Glide.with(this)
                    //		.load(attraction.imageUrl)
                    //		.asBitmap()
                    //		.diskCacheStrategy(DiskCacheStrategy.SOURCE)
                    //		.into(Constants.WEAR_IMAGE_SIZE_PARALLAX_WIDTH, Constants.WEAR_IMAGE_SIZE)
                    //		.get();

                    //secondaryImage = Glide.with(this)
                    //		.load(attraction.secondaryImageUrl)
                    //		.asBitmap()
                    //		.diskCacheStrategy(DiskCacheStrategy.SOURCE)
                    //		.into(Constants.WEAR_IMAGE_SIZE_PARALLAX_WIDTH, Constants.WEAR_IMAGE_SIZE)
                    //		.get();
                }
                catch (Exception e)
                {
                    Log.Error("UtilityService", "Exception loading bitmap from network");
                }

                if (image != null && secondaryImage != null)
                {
                    DataMap attractionData = new DataMap();

                    string distance = Utils.FormatDistanceBetween(
                        Utils.GetLocation(this), attraction.Location);

                    attractionData.PutString(Constants.EXTRA_TITLE, attraction.Name);
                    attractionData.PutString(Constants.EXTRA_DESCRIPTION, attraction.Description);
                    attractionData.PutDouble(
                        Constants.EXTRA_LOCATION_LAT, attraction.Location.Latitude);
                    attractionData.PutDouble(
                        Constants.EXTRA_LOCATION_LNG, attraction.Location.Longitude);
                    attractionData.PutString(Constants.EXTRA_DISTANCE, distance);
                    attractionData.PutString(Constants.EXTRA_CITY, attraction.City);

                    //TODO:
                    //	attractionData.PutAsset(Constants.EXTRA_IMAGE,
                    //		Utils.CreateAssetFromBitmap(image));
                    //attractionData.PutAsset(Constants.EXTRA_IMAGE_SECONDARY,
                    //		Utils.CreateAssetFromBitmap(secondaryImage));

                    attractionsData.Add(attractionData);
                }
            }

            if (connectionResult.IsSuccess && googleApiClient.IsConnected &&
                attractionsData.Count > 0)
            {
                PutDataMapRequest dataMap = PutDataMapRequest.Create(Constants.ATTRACTION_PATH);
                dataMap.DataMap.PutDataMapArrayList(Constants.EXTRA_ATTRACTIONS, attractionsData);
                //TODO:
                //dataMap.DataMap.PutLong(Constants.EXTRA_TIMESTAMP, DateTime.Now.ToFileTime);
                PutDataRequest request = dataMap.AsPutDataRequest();
                request.SetUrgent();

                //TODO: Async/Await
                // Send the data over
                //            var result =
                //					WearableClass.DataApi.PutDataItem(googleApiClient, request));

                //            if (!result.).isSuccess()) {
                //                Log.e(TAG, String.format("Error sending data using DataApi (error code = %d)",
                //                        result.getStatus().getStatusCode()));
                //            }

                //} else {
                //            Log.e(TAG, String.format(Constants.GOOGLE_API_CLIENT_ERROR_MSG,
                //                    connectionResult.getErrorCode()));
                //        }
                googleApiClient.Disconnect();
            }
        }
 public static async Task <IDataApiDataItemResult> PutDataItemAsync(this IDataApi api, GoogleApiClient client, PutDataRequest request)
 {
     return((await api.PutDataItem(client, request)).JavaCast <IDataApiDataItemResult> ());
 }
        //public Task<DataClienGetFdForAssetResponse> GetFdForAssetAsync (Asset p0)
        //{
        //    return GetFdForAsset (p0).AsAsync<DataClienGetFdForAssetResponse> ();
        //}

        //public Task<DataClienGetFdForAssetResponse> GetFdForAssetAsync (IDataItemAsset p0)
        //{
        //    return GetFdForAsset (p0).AsAsync<DataClienGetFdForAssetResponse> ();
        //}

        public Task <IDataItem> PutDataItemAsync(PutDataRequest p0)
        {
            return(PutDataItem(p0).AsAsync <IDataItem> ());
        }
        private async Task CreateWeatherDataRequest(bool urgent)
        {
            // Don't send anything unless we're setup
            if (!Settings.WeatherLoaded)
            {
                return;
            }

            if (mWearNodesWithApp == null)
            {
                // Create requests if nodes exist with app support
                mWearNodesWithApp = await FindWearDevicesWithApp();

                if (mWearNodesWithApp == null || mWearNodesWithApp.Count == 0)
                {
                    return;
                }
            }

            PutDataMapRequest mapRequest = PutDataMapRequest.Create(WearableHelper.WeatherPath);
            var homeData    = Settings.HomeData;
            var weatherData = await Settings.GetWeatherData(homeData.query);

            var alertData = await Settings.GetWeatherAlertData(homeData.query);

            if (weatherData != null)
            {
                weatherData.weather_alerts = alertData;

                // location
                // update_time
                // forecast
                // hr_forecast
                // txt_forecast
                // condition
                // atmosphere
                // astronomy
                // precipitation
                // ttl
                // source
                // query
                // locale

                mapRequest.DataMap.PutString("weatherData", weatherData?.ToJson());
                List <String> alerts = new List <String>();
                if (weatherData.weather_alerts.Count > 0)
                {
                    foreach (WeatherData.WeatherAlert alert in weatherData.weather_alerts)
                    {
                        alerts.Add(alert.ToJson());
                    }
                }
                mapRequest.DataMap.PutStringArrayList("weatherAlerts", alerts);
                mapRequest.DataMap.PutLong("update_time", weatherData.update_time.UtcTicks);
                PutDataRequest request = mapRequest.AsPutDataRequest();
                if (urgent)
                {
                    request.SetUrgent();
                }
                await WearableClass.DataApi.PutDataItem(mGoogleApiClient, request);

                Logger.WriteLine(LoggerLevel.Info, "{0}: CreateWeatherDataRequest(): urgent: {1}", TAG, urgent.ToString());
            }
        }
示例#11
0
        public IHttpActionResult PutData(PutDataRequest request)
        {
            try
            {
                var sw = Stopwatch.StartNew();

                if (request.ApiKey != ApiAdminKey)
                {
                    Log.Warn($"Invalid API key on {nameof(PutData)}: {request.ApiKey}");
                    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized)
                    {
                        Content      = new StringContent("Incorrect key! Your try was logged."),
                        ReasonPhrase = "Incorrect key"
                    });
                }

                if (request.Context == PutDataRequestContext.Player)
                {
                    var o = request.GetObject <Player>();
                    if (o == null)
                    {
                        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotAcceptable)
                        {
                            Content      = new StringContent("Null Player was sent."),
                            ReasonPhrase = "Null Player"
                        });
                    }

                    var connectionString = ConfigurationManager.ConnectionStrings["Store"].ConnectionString;
                    var db = new KeyStore(connectionString);
                    db.Set(o);
                }
                else if (request.Context == PutDataRequestContext.Leaderboard)
                {
                    if (string.IsNullOrWhiteSpace(request.Title))
                    {
                        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotAcceptable)
                        {
                            Content      = new StringContent($"A title is required for context {PutDataRequestContext.Leaderboard}."),
                            ReasonPhrase = "No Title"
                        });
                    }

                    var o = request.GetObject <Leader[]>();
                    if (o == null)
                    {
                        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotAcceptable)
                        {
                            Content      = new StringContent("Null Leader[] was sent."),
                            ReasonPhrase = "Null Leaders"
                        });
                    }

                    var file = Path.Combine(GlobalHelper.DataFolder, "Tanks", $"{request.Title}.Leaders.json");
                    var json = JsonConvert.SerializeObject(o, Formatting.Indented);

                    RetryPolicy.Default.ExecuteAction(() => { File.WriteAllText(file, json, Encoding.UTF8); });
                }
                else if (request.Context == PutDataRequestContext.TankMoE)
                {
                    if (string.IsNullOrWhiteSpace(request.Title))
                    {
                        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotAcceptable)
                        {
                            Content      = new StringContent($"A title is required for context {PutDataRequestContext.TankMoE}."),
                            ReasonPhrase = "No Title"
                        });
                    }

                    var o = request.GetObject <IDictionary <long, TankMoe> >();
                    if (o == null)
                    {
                        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotAcceptable)
                        {
                            Content      = new StringContent("Null Leader[] was sent."),
                            ReasonPhrase = "Null Leaders"
                        });
                    }

                    var file = Path.Combine(GlobalHelper.DataFolder, "MoE", $"{request.Title}.moe.json");
                    var json = JsonConvert.SerializeObject(o, Formatting.Indented);

                    RetryPolicy.Default.ExecuteAction(() => { File.WriteAllText(file, json, Encoding.UTF8); });
                }
                else if (request.Context == PutDataRequestContext.TankWN8)
                {
                    var o = request.GetObject <Wn8ExpectedValues>();
                    if (o == null)
                    {
                        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotAcceptable)
                        {
                            Content      = new StringContent("Null WN8 was sent."),
                            ReasonPhrase = "Null WN8"
                        });
                    }

                    RetryPolicy.Default.ExecuteAction(() => { o.ToFile(GlobalHelper.DataFolder); });
                }
                else if (request.Context == PutDataRequestContext.TankReference)
                {
                    var o = request.GetObject <TankReference>();
                    if (o == null)
                    {
                        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotAcceptable)
                        {
                            Content      = new StringContent("Null TankReference was sent."),
                            ReasonPhrase = "Null TankReference"
                        });
                    }

                    RetryPolicy.Default.ExecuteAction(() => { o.ToFile(GlobalHelper.DataFolder); });
                }
                else if (request.Context == PutDataRequestContext.Clan)
                {
                    var o = request.GetObject <Clan>();
                    if (o == null)
                    {
                        throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotAcceptable)
                        {
                            Content      = new StringContent("Null Clan was sent."),
                            ReasonPhrase = "Null Clan"
                        });
                    }

                    RetryPolicy.Default.ExecuteAction(() => { o.ToFile(GlobalHelper.DataFolder); });
                }
                else
                {
                    throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)
                    {
                        Content      = new StringContent("Invalid Context."),
                        ReasonPhrase = "Invalid Context."
                    });
                }

                Log.Debug($"PutData in {sw.Elapsed}");
                return(Ok());
            }
            catch (HttpResponseException ex)
            {
                Log.Error("PutData", ex);
                throw;
            }
            catch (Exception ex)
            {
                Log.Error("PutData", ex);
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.InternalServerError)
                {
                    Content      = new StringContent(ex.Message),
                    ReasonPhrase = "Put data failed"
                });
            }
        }