public async Task <List <TryteStringMessage> > GetMessagesAsync(string address, int retryNumber = 1, bool getChatMessages = false, bool dontLoadSql = false, bool alwaysLoadSql = false) { var messagesList = new List <TryteStringMessage>(); var cachedHashes = new List <Hash>(); if (!dontLoadSql) { var cachedTransactions = await this.TransactionCache.LoadTransactionsByAddressAsync(new Address(address)); var alreadyLoaded = this.AddressLoadedCheck(address); foreach (var cachedTransaction in cachedTransactions) { cachedHashes.Add(cachedTransaction.TransactionHash); if (!alreadyLoaded || alwaysLoadSql) { messagesList.Add(new TryteStringMessage { Message = cachedTransaction.TransactionTrytes, Stored = true }); } } // if more or equal to 2 * ChiotaConstants.MessagesOnAddress messages on address, don't try to load new messages if (cachedTransactions.Count >= (2 * ChiotaConstants.MessagesOnAddress)) { return(messagesList); } } var transactions = await this.Repository.FindTransactionsByAddressesAsync(new List <Address> { new Address(address) }); var hashes = transactions.Hashes.Union(cachedHashes, new TryteComparer <Hash>()).ToList(); foreach (var transactionsHash in hashes) { var bundle = await this.Repository.GetBundleAsync(transactionsHash); var message = new TryteStringMessage { Message = IotaHelper.ExtractMessage(bundle), Stored = false }; await this.TransactionCache.SaveTransactionAsync( new TransactionCacheItem { Address = new Address(address), TransactionHash = transactionsHash, TransactionTrytes = message.Message }); messagesList.Add(message); } return(messagesList); }
public async Task <List <TryteStringMessage> > GetMessagesAsync(string addresse, int retryNumber = 1, bool getChatMessages = false, bool dontLoadSql = false) { var roundNumber = 0; var messagesList = new List <TryteStringMessage>(); var tableList = new List <SqLiteMessage>(); var shortStorageHashes = new List <Hash>(); try { if (!dontLoadSql) { tableList = await this.sqLite.LoadTransactions(addresse); var alreadyLoaded = this.AddressLoadedCheck(addresse); foreach (var sqlLiteMessage in tableList) { shortStorageHashes.Add(new Hash(sqlLiteMessage.TransactionHash)); var message = new TryteStringMessage { Message = new TryteString(sqlLiteMessage.MessageTryteString), Stored = true }; if (!alreadyLoaded) { messagesList.Add(message); } } } } catch { // ignored } // if more than 2*Chiotaconstants.MessagesOnAddress messages on address, don't try to load new messages var chatCheck = true; if (getChatMessages) { chatCheck = tableList.Count < (2 * ChiotaConstants.MessagesOnAddress); } while (roundNumber < retryNumber && chatCheck) { try { this.UpdateNode(roundNumber); var hashes = await this.GetNewHashes(addresse, shortStorageHashes); foreach (var transactionsHash in hashes) { var bundle = await this.repository.GetBundleAsync(transactionsHash); var message = new TryteStringMessage { Message = IotaHelper.ExtractMessage(bundle), Stored = false }; await this.sqLite.SaveTransaction(addresse, transactionsHash, message.Message.ToString()); messagesList.Add(message); } retryNumber = 0; } catch { roundNumber++; } } return(messagesList); }