package org.rzo.netty.ahessian.rpc.callback; import java.io.Serializable; import java.lang.reflect.Method; import java.util.concurrent.atomic.AtomicLong; import org.rzo.netty.ahessian.Constants; public class ClientCallback implements Serializable { private transient Callback _callback; private Long _id; private String _callbackClass; private static final AtomicLong _idCounter = new AtomicLong(); private transient boolean _done = false; public ClientCallback() { } public ClientCallback(Callback callback) { _callback = callback; _id = _idCounter.getAndIncrement(); _callbackClass = _callback.getClass().getName(); } public Long getId() { return _id; } public void invoke(CallbackReplyMessage message) { try { String methodName = message.getMethod(); Object[] args = message.getArgs(); Method[] methods = _callback.getClass().getMethods(); for (Method method : methods) { if (methodName.equals(method.getName()) && method.getParameterTypes().length == args.length) { method.invoke(_callback, args); break; } } } catch (Exception ex) { Constants.ahessianLogger.warn("", ex); } } public String getCallbackClass() { return _callbackClass; } }