Project164/eaglerbungee/src/main/java/net/md_5/bungee/ServerConnection.java

95 lines
2.4 KiB
Java
Raw Normal View History

2025-02-24 11:55:14 -06:00
package net.md_5.bungee;
import java.beans.ConstructorProperties;
import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;
import net.md_5.bungee.api.connection.Connection;
import net.md_5.bungee.api.connection.Server;
import net.md_5.bungee.netty.ChannelWrapper;
import net.md_5.bungee.protocol.packet.DefinedPacket;
import net.md_5.bungee.protocol.packet.PacketFAPluginMessage;
import net.md_5.bungee.protocol.packet.PacketFFKick;
public class ServerConnection implements Server
{
private final ChannelWrapper ch;
private final BungeeServerInfo info;
private boolean isObsolete;
private Unsafe unsafe = new Unsafe()
{
@Override
public void sendPacket(DefinedPacket packet)
{
ch.write( packet );
}
};
@Override
public void sendData(String channel, byte[] data)
{
unsafe().sendPacket( new PacketFAPluginMessage( channel, data ) );
}
@Override
public synchronized void disconnect(String reason)
{
if ( !ch.isClosed() )
{
// TODO: Can we just use a future here?
unsafe().sendPacket( new PacketFFKick( reason ) );
ch.getHandle().eventLoop().schedule( new Runnable()
{
@Override
public void run()
{
ch.getHandle().close();
}
}, 100, TimeUnit.MILLISECONDS );
}
}
@Override
public InetSocketAddress getAddress()
{
return getInfo().getAddress();
}
@Override
public Unsafe unsafe()
{
return unsafe;
}
@ConstructorProperties({ "ch", "info" })
public ServerConnection(final ChannelWrapper ch, final BungeeServerInfo info) {
this.unsafe = new Connection.Unsafe() {
@Override
public void sendPacket(final DefinedPacket packet) {
if (ServerConnection.this.ch != null) ServerConnection.this.ch.write(packet);
}
};
this.ch = ch;
this.info = info;
}
public ChannelWrapper getCh() {
return this.ch;
}
@Override
public BungeeServerInfo getInfo() {
return this.info;
}
public boolean isObsolete() {
return this.isObsolete;
}
public void setObsolete(final boolean isObsolete) {
this.isObsolete = isObsolete;
}
}