public async void InstantiateToast(MessageModel model, Task <WaveChat.Areas.Identity.Data.WaveChatUser> user) { if (_notificationsMessageHandler._communicationManager.GetSocketById(user.Result.Id).InstantiateToast is true) { //Serialize if (!(model is null)) { var first = await firebaseClient.Child("users/" + model.GUID).OrderByKey().LimitToFirst(1).OnceAsync <Areas.Identity.Data.FirebaseNameModel>(); var optionsBuilder = new DbContextOptionsBuilder <WaveChatContext>(); optionsBuilder.UseMySql("server=remotemysql.com;user=jyKYm15Znj;database=jyKYm15Znj;password=EbVGAPF1Wz;port=3306;persistsecurityinfo=True"); WaveChatContext context = new WaveChatContext(optionsBuilder.Options); ToastMessage _initToast = new ToastMessage { Message = model.Message, Timestamp = model.Timestamp, FirstName = first.First().Object.FirstName, LastName = first.First().Object.LastName, UserID = context.Users.Where(x => x.FirebaseGUID.Equals(model.GUID)).AsParallel().Select(m => m.Id).FirstOrDefault() }; List <ToastMessage> ToastList = new List <ToastMessage>(); ToastList.Add(_initToast); string output = JsonConvert.SerializeObject(ToastList); await _notificationsMessageHandler.SendMessageAsync(user.Result.Id, output); } } else if (_notificationsMessageHandler._communicationManager.GetSocketById(user.Result.Id).InstantiateToast is false) { } }
public async void LoadMessages(string ConfGUID, Task <WaveChat.Areas.Identity.Data.WaveChatUser> user) { _notificationsMessageHandler._communicationManager.GetSocketById(user.Result.Id).TokenSource = new CancellationTokenSource(); observable = firebaseClient .Child("convs/" + ConfGUID).AsObservable <WaveChat.Models.MessageModel>() .Subscribe(d => InstantiateToast(d.Object, user)); _notificationsMessageHandler._communicationManager.GetSocketById(user.Result.Id).TokenSource.Token.Register(() => observable.Dispose()); var messageStack = firebaseClient.Child("convs/" + ConfGUID).OrderByKey().OnceAsync <MessageModel>().Result; List <ToastMessage> list = new List <ToastMessage>(); Stopwatch sw = Stopwatch.StartNew(); Parallel.ForEach(messageStack, () => new List <ToastMessage>(), (item, pls, localObj) => { var first = firebaseClient.Child("users/" + item.Object.GUID).OrderByKey().LimitToFirst(1).OnceAsync <Areas.Identity.Data.FirebaseNameModel>(); var obj = new ToastMessage { Message = item.Object.Message, Timestamp = item.Object.Timestamp, FirstName = first.Result.First().Object.FirstName, LastName = first.Result.First().Object.LastName, //UserID = from m in _context.Users where m.FirebaseGUID.Equals(item.Object.GUID) select m.Id.FirstOrDefault() }; //obj.UserID = _context.Users.Where(x => x.FirebaseGUID.Equals(item.Object.GUID)).AsParallel().Select(m => m.Id).FirstOrDefault(); var optionsBuilder = new DbContextOptionsBuilder <WaveChatContext>(); optionsBuilder.UseMySql("server=remotemysql.com;user=jyKYm15Znj;database=jyKYm15Znj;password=EbVGAPF1Wz;port=3306;persistsecurityinfo=True"); WaveChatContext context = new WaveChatContext(optionsBuilder.Options); obj.UserID = context.Users.Where(x => x.FirebaseGUID.Equals(item.Object.GUID)).AsParallel().Select(m => m.Id).FirstOrDefault(); localObj.Add(obj); return(localObj); }, localObj => { foreach (var result in localObj) { list.Add(result); } }); var serialized = JsonConvert.SerializeObject(list.AsParallel().OrderBy(d => d.Timestamp)); await _notificationsMessageHandler.SendMessageAsync(user.Result.Id, serialized); _notificationsMessageHandler._communicationManager.GetSocketById(user.Result.Id).InstantiateToast = true; }
public HomeController(WaveChatContext context, UserManager <WaveChat.Areas.Identity.Data.WaveChatUser> userManager, NotificationMessageHandler notificationsMessageHandler) { _context = context; _userManager = userManager; _notificationsMessageHandler = notificationsMessageHandler; }