All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jd.blockchain.transaction.OperationResultHolder Maven / Gradle / Ivy

There is a newer version: 1.6.5.RELEASE
Show newest version
package com.jd.blockchain.transaction;

import com.jd.blockchain.ledger.BytesValue;

import utils.event.EventMulticaster;

abstract class OperationResultHolder implements OperationResultHandle {

	private Object value;

	private Throwable error;

	private volatile boolean completed;

	private EventMulticaster listenerMulticaster =
			new EventMulticaster<>(OperationCompletedListener.class);

	/**
	 * 导致结束的错误;
	 * 
	 * @return
	 */
	public Throwable getError() {
		return error;
	}

	/**
	 * 是否已经处理完成;
	 * 
	 * @return
	 */
	public boolean isCompleted() {
		return completed;
	}

	/**
	 * 获取操作的返回值; 
* 在操作未完成之前,总是返回 null;
* 可以通过 {@link #isCompleted()} 方法判断操作是否已经完成;
* 可以通过 {@link #addCompletedListener(OperationCompletedListener)} * 方法添加监听器来监听操作完成的事件; * * @return */ public Object getResult() { return value; } /** * 添加操作完成监听器; * * @param listener */ public void addCompletedListener(OperationCompletedListener listener) { listenerMulticaster.addListener(listener); } protected abstract Object decodeResult(BytesValue bytesValue); @Override public Object complete(BytesValue bytesValue) { if (this.completed) { throw new IllegalStateException( "Contract invocation has been completed, and is not allowed to be completed again!"); } this.completed = true; this.value = decodeResult(bytesValue); OperationCompletedContext context = new OperationCompletedContext(getOperationIndex(), null); listenerMulticaster.getBroadcaster().onCompleted(value, null, context); return null; } @Override public void complete(Throwable error) { if (completed) { return; } this.completed = true; this.error = error; OperationCompletedContext context = new OperationCompletedContext(getOperationIndex(), null); listenerMulticaster.getBroadcaster().onCompleted(null, error, context); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy