comm/src/main/java/dev/xiushen/andes/comm/connections/AbstractPeerConnection.java

66 lines
1.7 KiB
Java

package dev.xiushen.andes.comm.connections;
import dev.xiushen.andes.comm.RemotePeer;
import dev.xiushen.andes.comm.message.Message;
import io.netty.channel.ChannelHandler;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.atomic.AtomicBoolean;
public abstract class AbstractPeerConnection implements PeerConnection {
private static final Logger logger = LoggerFactory.getLogger(AbstractPeerConnection.class);
private final String remoteIdentifier;
protected final AtomicBoolean disconnected = new AtomicBoolean(false);
protected final AtomicBoolean terminatedImmediately = new AtomicBoolean(false);
private RemotePeer remotePeer;
protected AbstractPeerConnection(
final String remoteIdentifier) {
this.remoteIdentifier = remoteIdentifier;
}
@Override
public void send(final Message message) {
doSendMessage(message);
}
@Override
public String remoteIdentifier() {
return remoteIdentifier;
}
@Override
public boolean disconnected() {
return disconnected.get() || terminatedImmediately.get();
}
@Override
public RemotePeer remotePeer() {
return remotePeer;
}
@Override
public void setRemotePeer(RemotePeer remotePeer) {
this.remotePeer = remotePeer;
}
@Override
public void replaceHandler(String name, ChannelHandler newHandler) {
doReplaceHandler(name, newHandler);
}
protected abstract void doSendMessage(final Message message);
protected abstract void doReplaceHandler(String name, ChannelHandler newHandler);
protected abstract void closeConnection();
protected abstract void closeConnectionImmediately();
}