package com.robonobo.mina.network.eon;
import com.robonobo.core.api.proto.CoreApi.EndPoint;
import com.robonobo.eon.EONException;
import com.robonobo.eon.EONManager;
import com.robonobo.mina.external.node.EonEndPoint;
import com.robonobo.mina.external.node.SeonEndPoint;
import com.robonobo.mina.instance.MinaInstance;
import com.robonobo.mina.network.*;
import com.robonobo.mina.util.MinaConnectionException;
public class EonConnectionFactory implements StreamConnectionFactory {
private EONManager eonMgr;
private MinaInstance mina;
public EonConnectionFactory(EONManager eonMgr, MinaInstance mina) {
this.eonMgr = eonMgr;
this.mina = mina;
}
public BroadcastConnection getBroadcastConnection(ControlConnection cc,
EndPoint listeningEp) throws MinaConnectionException {
// Ignore the host & udp port in the listening ep, just use the CC's details
EonEndPoint listenEonEp = EonEndPoint.parse(listeningEp.getUrl());
EonEndPoint ccEp = EonEndPoint.parse(cc.getTheirEp().getUrl());
EonEndPoint ep = new SeonEndPoint(ccEp.getAddress(), ccEp.getUdpPort(), listenEonEp.getEonPort());
EonBroadcastConnection bc;
try {
bc = new EonBroadcastConnection(mina, eonMgr, ep);
} catch (EONException e) {
throw new MinaConnectionException(e);
}
return bc;
}
public ListenConnection getListenConnection(ControlConnection cc) throws MinaConnectionException {
EonListenConnection lc;
try {
lc = new EonListenConnection(mina, eonMgr);
} catch (EONException e) {
throw new MinaConnectionException(e);
}
return lc;
}
}