package org.jgroups.blocks;
import org.jgroups.Address;
import org.jgroups.Channel;
import org.jgroups.ReceiverAdapter;
import org.jgroups.util.Rsp;
import org.jgroups.util.RspList;
import java.util.*;
public class RpcDispatcherAnycastServerObject extends ReceiverAdapter {
int i=0;
private final Channel c;
private final RpcDispatcher d;
public RpcDispatcherAnycastServerObject(Channel channel) throws Exception {
c=channel;
d=new RpcDispatcher(c, this, this, this);
}
public void doSomething() {
// System.out.println("doSomething invoked on " + c.getLocalAddress() + ". i = " + i);
i++;
// System.out.println("Now i = " + i);
}
public void callRemote(boolean useAnycast, boolean excludeSelf) throws Exception {
// we need to copy the vector, otherwise the modification below will throw an exception because the underlying
// vector is unmodifiable
List<Address> v=new ArrayList<Address>(c.getView().getMembers());
if(excludeSelf) v.remove(c.getAddress());
RspList rsps=d.callRemoteMethods(v, "doSomething", new Object[]{}, new Class[]{}, new RequestOptions(ResponseMode.GET_ALL, 20000, useAnycast));
Map.Entry entry;
for(Iterator it=rsps.entrySet().iterator(); it.hasNext();) {
entry=(Map.Entry)it.next();
Address member=(Address)entry.getKey();
Rsp rsp=(Rsp)entry.getValue();
if(!rsp.wasReceived())
throw new RuntimeException("response from " + member + " was not received, rsp=" + rsp);
}
}
public void shutdown() {
c.close();
}
}