blob: 8a2ca228ed84233edaf8f7e403923d5e0b65adb1 [file] [log] [blame] [raw]
package protocolsupport.api;
import java.net.InetSocketAddress;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import org.bukkit.entity.Player;
public abstract class Connection {
protected volatile ProtocolVersion version;
public Connection(ProtocolVersion version) {
this.version = version;
}
public abstract Object getNetworkManager();
public abstract boolean isConnected();
public abstract InetSocketAddress getAddress();
public abstract Player getPlayer();
public ProtocolVersion getVersion() {
return version;
}
public abstract void receivePacket(Object packet);
public abstract void sendPacket(Object packet);
protected final CopyOnWriteArrayList<PacketSendListener> sendListeners = new CopyOnWriteArrayList<>();
protected final CopyOnWriteArrayList<PacketReceiveListener> receiveListeners = new CopyOnWriteArrayList<>();
public void addPacketSendListener(PacketSendListener listener) {
sendListeners.add(listener);
}
public void removePacketSendListener(PacketSendListener listener) {
sendListeners.remove(listener);
}
public void addPacketReceiveListener(PacketReceiveListener listener) {
receiveListeners.add(listener);
}
public void removePacketReceiveListener(PacketReceiveListener listener) {
receiveListeners.remove(listener);
}
private final ConcurrentHashMap<String, Object> metadata = new ConcurrentHashMap<>();
public void addMetadata(String key, Object obj) {
metadata.put(key, obj);
}
public Object getMetadata(String key) {
return metadata.get(key);
}
public Object removeMetadata(String key) {
return metadata.remove(key);
}
public boolean hasMetadata(String key) {
return metadata.containsKey(key);
}
@FunctionalInterface
public static interface PacketSendListener {
public boolean onPacketSending(Object packet);
}
@FunctionalInterface
public static interface PacketReceiveListener {
public boolean onPacketReceiving(Object packet);
}
}