/// <summary> /// Parses the Tropo Session request. /// </summary> /// <returns></returns> public ActionResult Tropo() { using (StreamReader reader = new StreamReader(Request.InputStream)) { List <MessageQueue> pending = MessageQueue.GetPending(); List <int> ids = pending.Select(m => m.MessageId).ToList(); string result = TropoFactory.ExecuteSession(reader, MessageQueue.GetPendingAsDictionary(ids)); MessageQueue.ClearIds(ids); return(Content(result, "application/json")); } }
/// <summary> /// Notifies the users that are blocking the specified checkin/space. /// At the moment it sends IM and Email regardless of the users' preferences /// </summary> /// <param name="baseCheckin"></param> /// <param name="checkins"></param> private static void NotifyBlockingUsers(Checkin baseCheckin, List <Checkin> checkins) { List <UserInfo> userInfos = new List <UserInfo>(); List <User> users = new List <User>(); List <int> userIds = checkins.Select(c => c.UserId).ToList(); UserInfo requestingUser; using (EntityContext ctx = new EntityContext()) { requestingUser = ctx.UserInfos.Where(ui => ui.UserId == baseCheckin.UserId).FirstOrDefault(); userInfos = ctx.UserInfos.Where(ui => userIds.Contains(ui.UserId)).ToList(); users = ctx.Users.Where(ui => userIds.Contains(ui.UserId)).ToList(); } Pubnub pub = PubnubFactory.GetInstance(); users.ForEach(user => { // Notify via email EmailerFactory.SendMail(user.Email, i18n.Notification_EmailTitle, string.Format(i18n.Notification_EmailMessage, requestingUser.FullName)); // Notify via UI (if the user has it open) pub.Publish(PubnubFactory.Channels.GeneralNotification, new { Class = "BlockNotification", UserId = user.UserId, RequestingUser = requestingUser.UserId }); }); userInfos.ForEach(ui => { if (!string.IsNullOrEmpty(ui.ContactEmail)) { // Notify via IM MessageQueue.Save(new MessageQueue() { To = ui.ContactEmail, Text = string.Format(i18n.Notification_IMMessage, requestingUser.FullName) }); } }); TropoFactory.CreateSession(); }