public async void PullNewMessages() { while (true) { foreach (var channel in DependencyManager.ChannelsPage.ViewModel.Channels) { foreach (var message in RestService.GetMessageBy(channel.Id).Result) { if (channel.Messages.Exists(item => item.Id == message.Id)) { continue; // If message exists } IDecrypt decryption = new DecryptionLogic(message, channel.KeyTable); channel.View.ViewModel.Messages.Add(decryption.Decrypt()); channel.Messages.Add(message); DependencyManager.Database.InsertWithChildren(message); DependencyManager.Database.UpdateWithChildren(channel); if (message.ProcessingCounter + 1 >= channel.Members.Count) { // TODO: Handle REST return new Task(() => { RestService.DeleteMessageBy(message.Id); }).Start(); } else { // TODO: Handle REST return new Task(() => { RestService.UpdateMessageProcessingCounterBy(message.Id); }).Start(); } } } await Task.Delay(5000); // 5 seconds } }
public bool SendMessage(string message, Channel channel) { IEncrypt encryption = new EncryptionLogic(new Message(DependencyManager.Me.Id, message), channel.KeyTable); var preparedMessage = encryption.Encrypt(); IDecrypt decryption = new DecryptionLogic(preparedMessage, channel.KeyTable); channel.View.ViewModel.Messages.Add(decryption.Decrypt()); channel.Messages.Add(preparedMessage); DependencyManager.Database.InsertWithChildren(preparedMessage); DependencyManager.Database.UpdateWithChildren(channel); // TODO: Handle REST return new Task(() => { RestService.SendMessage(preparedMessage); }).Start(); return(true); //return RestService.SendMessage(preparedMessage).Result; }