public virtual JsonResult SyncData(string EventName, UpdateServiceFromAppModel model) { model.Responses = model.Responses ?? Enumerable.Empty <MoodResponseUpdateModel>(); Event evnt = null; try { if (string.IsNullOrEmpty(EventName)) { throw new ArgumentException("Invalid event"); } if (model == null) { throw new ArgumentException("Invalid model"); } this.logger.Info("App", string.Format("Request to sync data - {0}", model.rid)); var syncTimestamp = DateTime.UtcNow; evnt = db.Get <Event>().FirstOrDefault(e => e.Name.Equals(EventName, StringComparison.InvariantCultureIgnoreCase)); var responder = evnt.AddResponder(new Guid(model.rid), model.reg, model.apn); var lastSync = responder.LastSync < model.LastUpdate ? responder.LastSync : model.LastUpdate; // NB: assume new set will commit fine on the background queue. // If a failure occurs, it will be picked up on the next (or later) sync, and trigger a full "recovery" sync. var resError = model.ResTotal != (responder.Responses.Count() + model.Responses.Count()); responder.LastSync = syncTimestamp; db.SaveChanges(); if (model.Responses.Any()) { responseSubmissionQueue.Enqueue(new MoodResponseWorkItem { EventName = EventName, ResponderId = model.rid, Region = model.reg, DeviceId = model.apn, MoodResponses = model.Responses }); backgroundTaskFactory.StartNew(ProcessQueuedMoodResponseWorkItems); } return(Json(GetServiceUpdates(evnt, true, resError, lastSync, syncTimestamp, responder.ForceReset))); } catch (Exception ex) { logger.Error("App", ex, "Failed sync from app" + (model == null ? " - model is null" : string.Empty)); return(Json(GetServiceUpdates(evnt, false, false, model.LastUpdate, DateTime.UtcNow, false))); } }
private void SubmitResponse(Guid responseId, MoodResponseUpdateModel response) { var model = new UpdateServiceFromAppModel() { AppId = appId, LastSuccessfulServiceUpdate = DateTime.UtcNow, ResponderId = responseId.ToString(), Responses = new List <MoodResponseUpdateModel>() { response } }; JObject value = null; try { Console.WriteLine("Submitting request: " + requestUrl + " :: " + model.ResponderId); var req = HttpWebRequest.Create(requestUrl + appId); req.ContentType = "application/json"; req.Method = "POST"; JObject postJson = JObject.FromObject(model); string postJsonString = postJson.ToString(); byte[] data = new ASCIIEncoding().GetBytes(postJsonString); req.ContentLength = data.Length; Stream dataStream = req.GetRequestStream(); dataStream.Write(data, 0, data.Length); dataStream.Close(); using (HttpWebResponse resp = (HttpWebResponse)req.GetResponse()) { using (StreamReader reader = new StreamReader(resp.GetResponseStream())) { value = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); } } Console.WriteLine("Request completed"); } catch (Exception ex) { Console.WriteLine("Failed request:"); Console.WriteLine(ex.ToString()); } }