Beispiel #1
0
 public void ChangeMode(MamMode mode, string sideKey = null)
 {
     Channel.Mode = mode;
     if (mode == MamMode.Restricted)
     {
         Channel.SideKey = sideKey;
     }
 }
Beispiel #2
0
        public Tuple <List <string>, string> Fetch(string root, MamMode mode, string sideKey = null,
                                                   Action <string> action = null)
        {
            var messages = new List <string>();

            var nextRoot     = root;
            var lastNextRoot = root;

            // ReSharper disable NotAccessedVariable
            var transactionCount = 0;
            var messageCount     = 0;

            // ReSharper restore NotAccessedVariable

            while (true)
            {
                // Apply channel mode
                var address = mode != MamMode.Public ? HashHelper.Hash(nextRoot) : nextRoot;

                var response = Iota.IotaClient.FindTransactionsByAddresses(address);

                if (response.Hashes.Count == 0)
                {
                    break;
                }

                transactionCount += response.Hashes.Count;
                messageCount++;

                var messagesGen = TransactionsToMessages(response.Hashes);
                foreach (var payload in messagesGen)
                {
                    try
                    {
                        var unmaskedMessage = DecodeMessage(payload, sideKey, nextRoot);
                        var message         = unmaskedMessage.Item1;
                        lastNextRoot = unmaskedMessage.Item2;

                        if (action != null)
                        {
                            action.Invoke(message);
                        }
                        else
                        {
                            messages.Add(message);
                        }
                    }
                    catch (System.Exception e)
                    {
                        Console.WriteLine(e);
                    }
                }

                nextRoot = lastNextRoot;
            }

            return(new Tuple <List <string>, string>(messages, nextRoot));
        }