From de75122c6f45a4f638e42d650db82a01081608b8 Mon Sep 17 00:00:00 2001 From: zhaoguangwei Date: Thu, 16 May 2019 17:14:49 +0800 Subject: [PATCH] fix the interface: ledgers/xxx/settings --- .../transaction/ContractInvocationProxy.java | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractInvocationProxy.java b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractInvocationProxy.java index c9b97e4d..00495bdb 100644 --- a/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractInvocationProxy.java +++ b/source/ledger/ledger-model/src/main/java/com/jd/blockchain/transaction/ContractInvocationProxy.java @@ -1,22 +1,53 @@ package com.jd.blockchain.transaction; +import com.jd.blockchain.utils.Bytes; +import com.jd.blockchain.utils.serialize.binary.BinarySerializeUtils; + import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; -public class ContractInvocationProxy implements InvocationHandler { - - - private String contractMessage; - +public class ContractInvocationProxy implements InvocationHandler { + + // private String contractMessage; + + private Bytes contractAddress; + + private ContractType contractType; private ContractEventSendOperationBuilder sendOpBuilder; - - + + public ContractInvocationProxy(Bytes contractAddress, ContractType contractType, + ContractEventSendOperationBuilder sendOpBuilder) { + this.contractAddress = contractAddress; + this.contractType = contractType; + this.sendOpBuilder = sendOpBuilder; + } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - // TODO Auto-generated method stub + + if(contractType == null){ + return "contractType == null, no invoke really."; + } + + String event = contractType.getEvent(method); + if (event == null) { + // 适配 Object 对象的方法; + // toString 方法; + return String.format("[%s]-%s", contractAddress, contractType.toString()); + + // hashCode 方法; + } + // 合约方法; + byte[] argBytes = serializeArgs(args); + sendOpBuilder.send(contractAddress, event, argBytes); + + // TODO: 暂时未考虑有返回值的情况; return null; } + private byte[] serializeArgs(Object[] args) { + // TODO 根据方法参数的定义序列化参数; + return BinarySerializeUtils.serialize(args); + } }