示例#1
0
        public async Task OnGossipMessageAsync(SourceSignedMessage msg)
        {
            var m = msg as ChatMsg;

            if (m == null)
            {
                return;
            }

            switch (m.MsgType)
            {
            case ChatMessageType.NodeUp:
                await SendNodesInfoToGroupAsync();

                break;

            case ChatMessageType.AuthorizerPrePrepare:
            case ChatMessageType.AuthorizerPrepare:
            //case ChatMessageType.AuthorizerCommit:
            //    var typStr = string.Join(" ", Regex.Split(m.Type.ToString(), @"(?<!^)(?=[A-Z])"));
            //    var text = $"*From*: {m.From}\n*Event*: {typStr}\n*Block Number*: {m.BlockUIndex}";
            //    await SendGroupMessageAsync(text);
            //    break;
            default:
                var typStr2 = string.Join(" ", Regex.Split(m.MsgType.ToString(), @"(?<!^)(?=[A-Z])"));
                var text2   = $"*From*: {m.From}\n*Event*: {typStr2}\n*Text*: {m.Text}";
                await SendGroupMessageAsync(text2);

                break;
            }
        }
示例#2
0
        /*
         *      private void OnGetHeadersMessageReceived(GetBlocksPayload payload)
         *      {
         *          UInt256 hash = payload.HashStart;
         *          int count = payload.Count < 0 ? HeadersPayload.MaxHeadersCount : payload.Count;
         *          DataCache<UInt256, TrimmedBlock> cache = Blockchain.Singleton.Store.GetBlocks();
         *          TrimmedBlock state = cache.TryGet(hash);
         *          if (state == null) return;
         *          List<Header> headers = new List<Header>();
         *          for (uint i = 1; i <= count; i++)
         *          {
         *              uint index = state.Index + i;
         *              hash = Blockchain.Singleton.GetBlockHash(index);
         *              if (hash == null) break;
         *              Header header = cache.TryGet(hash)?.Header;
         *              if (header == null) break;
         *              headers.Add(header);
         *          }
         *          if (headers.Count == 0) return;
         *          Context.Parent.Tell(Message.Create(MessageCommand.Headers, HeadersPayload.Create(headers)));
         *      }
         *
         *      private void OnHeadersMessageReceived(HeadersPayload payload)
         *      {
         *          if (payload.Headers.Length == 0) return;
         *          system.Blockchain.Tell(payload.Headers, Context.Parent);
         *      }
         *
         *      private void OnInventoryReceived(IInventory inventory)
         *      {
         *          system.TaskManager.Tell(new TaskManager.TaskCompleted { Hash = inventory.Hash }, Context.Parent);
         *          system.LocalNode.Tell(new LocalNode.Relay { Inventory = inventory });
         *      }
         *
         *      private void OnInvMessageReceived(InvPayload payload)
         *      {
         *          UInt256[] hashes = payload.Hashes.Where(p => knownHashes.Add(p) && !sentHashes.Contains(p)).ToArray();
         *          if (hashes.Length == 0) return;
         *          switch (payload.Type)
         *          {
         *              case InventoryType.Block:
         *                  using (Snapshot snapshot = Blockchain.Singleton.GetSnapshot())
         *                      hashes = hashes.Where(p => !snapshot.ContainsBlock(p)).ToArray();
         *                  break;
         *              case InventoryType.TX:
         *                  using (Snapshot snapshot = Blockchain.Singleton.GetSnapshot())
         *                      hashes = hashes.Where(p => !snapshot.ContainsTransaction(p)).ToArray();
         *                  break;
         *          }
         *          if (hashes.Length == 0) return;
         *          system.TaskManager.Tell(new TaskManager.NewTasks { Payload = InvPayload.Create(payload.Type, hashes) }, Context.Parent);
         *      }*/

        //private void OnMemPoolMessageReceived()
        //{
        //    foreach (InvPayload payload in InvPayload.CreateGroup(InventoryType.TX, Blockchain.Singleton.MemPool.GetVerifiedTransactions().Select(p => p.Hash).ToArray()))
        //        Context.Parent.Tell(Message.Create(MessageCommand.Inv, payload));
        //}

        private void OnSignedMessageReceived(SourceSignedMessage msg)
        {
            //system.TaskManager.Tell(new TaskManager.TaskCompleted { Hash = inventory.Hash }, Context.Parent);
            system.LocalNode.Tell(new LocalNode.SignedMessageRelay {
                signedMessage = msg
            });
        }