Exemplo n.º 1
0
        /// <summary>
        /// Fetches a request from the contract storage and processes it.
        /// </summary>
        private void ProcessRequest(Storage storage, BigInteger ID)
        {
            var base_key = ID.ToByteArray();

            var req_owner_key = request_owner_prefix.Concat(base_key).ToArray();
            var req_key_key   = request_key_prefix.Concat(base_key).ToArray();
            var req_uuid_key  = request_key_prefix.Concat(base_key).ToArray();
            var req_val_key   = request_value_prefix.Concat(base_key).ToArray();

            var uuid      = Encoding.UTF8.GetString(storage.Get(req_uuid_key));
            var value     = Encoding.ASCII.GetString(storage.Get(req_val_key));
            var temp      = storage.Get(req_key_key);
            var operation = (char)temp[0];
            var key       = Encoding.UTF8.GetString(temp.Skip(1).ToArray());

            switch (operation)
            {
            case 'C':
            {
                this.swarm.Create(uuid, key, value);
                break;
            }

            case 'R':
            {
                var read = this.swarm.Read(uuid, key);

                var push_tx = neo_api.CallContract(owner_keys, bluzelle_contract_hash, "api_push", new object[] { uuid, key, read });
                neo_api.WaitForTransaction(owner_keys, push_tx);

                break;
            }

            case 'U':
            {
                this.swarm.Update(uuid, key, value);

                break;
            }

            case 'D':
            {
                this.swarm.Delete(uuid, key);
                break;
            }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Catches and processes all notifications triggered in a Neo transaction
        /// </summary>
        /// <param name="tx"></param>
        private void ProcessNotifications(Transaction tx)
        {
            // add the transaction to the cache
            transactions[tx.Hash] = tx;

            var notifications = listenerVM.GetNotifications(tx);

            if (notifications == null)
            {
                return;
            }

            foreach (var entry in notifications)
            {
                switch (entry.Name)
                {
                case "blz_create": {
                    if (entry.Args.Length != 3)
                    {
                        throw new Exception($"Swarm.Create expects 3 arguments");
                    }

                    var uuid  = (byte[])entry.Args[0];
                    var key   = (byte[])entry.Args[1];
                    var value = (byte[])entry.Args[2];

                    this.swarm.Create(uuid, key, value);
                    break;
                }

                case "blz_read":
                {
                    if (entry.Args.Length != 2)
                    {
                        throw new Exception($"Swarm.Read expects 2 arguments");
                    }

                    var uuid = (byte[])entry.Args[0];
                    var key  = (byte[])entry.Args[1];

                    var value = this.swarm.Read(uuid, key);

                    var push_tx = neo_api.CallContract(owner_keys, bluzelle_contract_hash, "api_push", new object[] { uuid, key, value });

                    neo_api.WaitForTransaction(owner_keys, push_tx);
                    break;
                }

                case "blz_update":
                {
                    if (entry.Args.Length != 3)
                    {
                        throw new Exception($"Swarm.Update expects 3 arguments");
                    }

                    var uuid  = (byte[])entry.Args[0];
                    var key   = (byte[])entry.Args[1];
                    var value = (byte[])entry.Args[2];

                    this.swarm.Update(uuid, key, value);

                    //  public static event Action<byte[], byte[], byte[]> OnUpdate;
                    break;
                }

                case "blz_delete":
                {
                    if (entry.Args.Length != 2)
                    {
                        throw new Exception($"Swarm.Delete expects 2 arguments");
                    }

                    var uuid = (byte[])entry.Args[0];
                    var key  = (byte[])entry.Args[1];

                    this.swarm.Remove(uuid, key);

                    break;
                }
                }
            }
        }