package net.varkhan.serv.p2p.network;
import net.varkhan.serv.p2p.connect.PeerGroup;
import net.varkhan.serv.p2p.connect.PeerHost;
import net.varkhan.serv.p2p.connect.PeerNode;
import net.varkhan.serv.p2p.connect.PeerProperties;
import java.util.Collection;
import java.util.Collections;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
/**
* <b></b>.
* <p/>
*
* @author varkhan
* @date 1/17/15
* @time 4:48 PM
*/
public abstract class P2PHost extends P2PNode implements PeerNode, PeerProperties, PeerHost {
protected ConcurrentMap<String,P2PGroup> groups =new ConcurrentHashMap<String,P2PGroup>();
protected long heartBeat=DEFAULT_HEARTBEAT;
public P2PHost(String name, long heartBeat) {
super(name);
this.heartBeat=heartBeat;
setProperty(Realm.LOCAL, PROPERTY_HEART_BEAT, Long.toString(heartBeat));
}
public P2PHost(String name, PeerProperties props, long heartBeat) {
super(name, props);
this.heartBeat=heartBeat;
}
public Collection<P2PGroup> groups() {
return Collections.unmodifiableCollection(groups.values());
}
@Override
public abstract void start();
@Override
public abstract void stop();
public abstract State state();
public long getHeartBeat() { return heartBeat; }
public void addGroup(PeerGroup group) {
groups.putIfAbsent(group.name(), (P2PGroup) group);
}
public void delGroup(PeerGroup g) {
groups.remove(g.name(),g);
}
}