public Task<ResponseMessage> SendHistory(History history)
 {
     if (APIInvalid)
     {
         LastCallResult = NetworkResult.AuthenticationFailed;
         return Task.FromResult(new ResponseMessage() { IsSuccess = false });
     }
     if (FailNetwork)
     {
         LastCallResult = NetworkResult.NetworkError;
         throw new IOException();
     }
     if (UnknownError)
     {
         LastCallResult = NetworkResult.UnknownError;
         throw new Exception("ups");
     }
     if (history != null)
     {
         HistoryEvents.AddRange(history.Events);
         HistoryActions.AddRange(history.Actions);
     }
     LastCallResult = NetworkResult.Success;
     return Task.FromResult(new ResponseMessage() {IsSuccess = true});
 }
        public async Task<bool> FlushHistory()
        {
            try
            {
                History history = new History();
                history.Actions = await Storage.GetUndeliveredActions();
                history.Events = await Storage.GetUndeliveredEvents();

                if ((history.Events != null && history.Events.Count > 0) || (history.Actions != null && history.Actions.Count > 0))
                {
                    var responseMessage = await ExecuteCall(async () => await ServiceManager.ApiConnction.SendHistory(history));

                    if (responseMessage.IsSuccess)
                    {
                        if (history.Events != null && history.Events.Count > 0)
                        {
                            await Storage.SetEventsAsDelivered(history.Events);
                        }

                        if (history.Actions != null && history.Actions.Count > 0)
                        {
                            await Storage.SetActionsAsDelivered(history.Actions);
                        }
                        return true;
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Error("Error while sending history: " + ex.Message, ex);
            }
            return false;
        }
        /// <summary>
        /// Sends the given History object to the cloud.
        /// </summary>
        /// <param name="history">History object to send.</param>
        public async Task<ResponseMessage> SendHistory(History history)
        {
            try
            {
                Logger.Trace("SendHistory");
                System.Net.Http.HttpClient apiConnection = new System.Net.Http.HttpClient();
                apiConnection.DefaultRequestHeaders.Add(Constants.XApiKey, Configuration.ApiKey);
                apiConnection.DefaultRequestHeaders.Add(Constants.Xiid, SdkData.DeviceId);
                apiConnection.DefaultRequestHeaders.Add(Constants.AdvertisementIdentifierHeader,
                    string.IsNullOrEmpty(Configuration.UserId) ? Windows.System.UserProfile.AdvertisingManager.AdvertisingId : Configuration.UserId);
                apiConnection.DefaultRequestHeaders.TryAddWithoutValidation(Constants.XUserAgent, UserAgentBuilder.BuildUserAgentJson());
                string serializeObject = JsonConvert.SerializeObject(history);
                var content = new StringContent(serializeObject, Encoding.UTF8, "application/json");

                    System.Net.Http.HttpResponseMessage responseMessage = await apiConnection.PostAsync(new Uri(Configuration.LayoutUri), content);

                Logger.Trace("SendHistory HttpCode: {0}", responseMessage.StatusCode);
                if (responseMessage.IsSuccessStatusCode)
                {
                    LastCallResult = NetworkResult.Success;
                    return new ResponseMessage()
                    {
                        Content = responseMessage.Content.ToString(),
                        Header = responseMessage.Headers.ToString(),
                        StatusCode = Convert(responseMessage.StatusCode),
                        IsSuccess = responseMessage.IsSuccessStatusCode
                    };
                }
                LastCallResult = NetworkResult.UnknownError;
                return new ResponseMessage() {StatusCode = Convert(responseMessage.StatusCode), IsSuccess = responseMessage.IsSuccessStatusCode};
            }
            catch (Exception ex)
            {
                Logger.Error("SendHistory Error", ex);
                LastCallResult = NetworkResult.NetworkError;
                return new ResponseMessage() {IsSuccess = false};
            }
        }