Archiviert
13
0

Print caught exceptions in debug mode.

Dieser Commit ist enthalten in:
Kristian S. Stangeland 2013-12-29 11:58:54 +01:00
Ursprung 32758061a9
Commit 58c027f162
9 geänderte Dateien mit 99 neuen und 14 gelöschten Zeilen

Datei anzeigen

@ -356,7 +356,6 @@ class ProtocolConfig {
* Set whether or not the background compiler for structure modifiers is enabled or not.
* <p>
* This setting will take effect next time ProtocolLib is started.
*
* @param enabled - TRUE if is enabled/running, FALSE otherwise.
*/
public void setBackgroundCompilerEnabled(boolean enabled) {

Datei anzeigen

@ -126,14 +126,15 @@ public class ProtocolLibrary extends JavaPlugin {
// Used to clean up server packets that have expired. But mostly required to simulate
// recieving client packets.
private int asyncPacketTask = -1;
private int packetTask = -1;
private int tickCounter = 0;
private static final int ASYNC_PACKET_DELAY = 1;
private static final int ASYNC_MANAGER_DELAY = 1;
// Used to unhook players after a delay
private DelayedSingleTask unhookTask;
// Settings/options
private int configExpectedMod = -1;
private ProtocolConfig config;
// Updater
@ -364,7 +365,7 @@ public class ProtocolLibrary extends JavaPlugin {
// Worker that ensures that async packets are eventually sent
// It also performs the update check.
createAsyncTask(server);
createPacketTask(server);
} catch (Throwable e) {
reporter.reportDetailed(this, Report.newBuilder(REPORT_PLUGIN_ENABLE_ERROR).error(e));
@ -483,34 +484,46 @@ public class ProtocolLibrary extends JavaPlugin {
getServer().getPluginManager().disablePlugin(this);
}
private void createAsyncTask(Server server) {
private void createPacketTask(Server server) {
try {
if (asyncPacketTask >= 0)
throw new IllegalStateException("Async task has already been created");
if (packetTask >= 0)
throw new IllegalStateException("Packet task has already been created");
// Attempt to create task
asyncPacketTask = server.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
packetTask = server.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
@Override
public void run() {
AsyncFilterManager manager = (AsyncFilterManager) protocolManager.getAsynchronousManager();
// We KNOW we're on the main thread at the moment
manager.sendProcessedPackets(tickCounter++, true);
// House keeping
updateConfiguration();
// Check for updates too
if (!UPDATES_DISABLED) {
checkUpdates();
}
}
}, ASYNC_PACKET_DELAY, ASYNC_PACKET_DELAY);
}, ASYNC_MANAGER_DELAY, ASYNC_MANAGER_DELAY);
} catch (Throwable e) {
if (asyncPacketTask == -1) {
if (packetTask == -1) {
reporter.reportDetailed(this, Report.newBuilder(REPORT_CANNOT_CREATE_TIMEOUT_TASK).error(e));
}
}
}
private void updateConfiguration() {
if (config != null && config.getModificationCount() != configExpectedMod) {
configExpectedMod = config.getModificationCount();
// Update the debug flag
protocolManager.setDebug(config.isDebug());
}
}
private void checkUpdates() {
// Ignore milliseconds - it's pointless
long currentTime = System.currentTimeMillis() / MILLI_PER_SECOND;
@ -551,9 +564,9 @@ public class ProtocolLibrary extends JavaPlugin {
}
// Clean up
if (asyncPacketTask >= 0) {
getServer().getScheduler().cancelTask(asyncPacketTask);
asyncPacketTask = -1;
if (packetTask >= 0) {
getServer().getScheduler().cancelTask(packetTask);
packetTask = -1;
}
// And redirect handler too

Datei anzeigen

@ -28,7 +28,6 @@ import org.bukkit.entity.Player;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.error.ErrorReporter;
import com.comphenix.protocol.error.Report;
import com.comphenix.protocol.error.ReportType;
import com.comphenix.protocol.events.PacketEvent;

Datei anzeigen

@ -60,6 +60,7 @@ public class DelayedPacketManager implements ProtocolManager, InternalManager {
// If we have been closed
private boolean closed;
private boolean debug;
// Queued registration
private PluginManager queuedManager;
@ -110,6 +111,8 @@ public class DelayedPacketManager implements ProtocolManager, InternalManager {
if (queuedManager != null && queuedPlugin != null) {
delegate.registerEvents(queuedManager, queuedPlugin);
}
// And update the debug mode
delegate.setDebug(debug);
// Add any pending listeners
synchronized (queuedListeners) {
@ -428,6 +431,20 @@ public class DelayedPacketManager implements ProtocolManager, InternalManager {
return asyncManager;
}
@Override
public boolean isDebug() {
return debug;
}
@Override
public void setDebug(boolean debug) {
this.debug = debug;
if (delegate != null) {
delegate.setDebug(debug);
}
}
/**
* Update the asynchronous manager. This must be set.
* @param asyncManager - the asynchronous manager.

Datei anzeigen

@ -35,4 +35,16 @@ public interface InternalManager extends ProtocolManager {
* Called when ProtocolLib is closing.
*/
public void close();
/**
* Determine if debug mode is enabled.
* @return TRUE if it is, FALSE otherwise.
*/
public boolean isDebug();
/**
* Set whether or not debug mode is enabled.
* @param debug - TRUE if it is, FALSE otherwise.
*/
public void setDebug(boolean debug);
}

Datei anzeigen

@ -199,6 +199,9 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok
// Login packets
private LoginPackets loginPackets;
// Debug mode
private boolean debug;
/**
* Only create instances of this class if protocol lib is disabled.
*/
@ -301,6 +304,21 @@ public final class PacketFilterManager implements ProtocolManager, ListenerInvok
return asyncFilterManager;
}
@Override
public boolean isDebug() {
return debug;
}
@Override
public void setDebug(boolean debug) {
this.debug = debug;
// Inform components that can handle debug mode
if (nettyInjector != null) {
nettyInjector.setDebug(debug);
}
}
/**
* Retrieves how the server packets are read.
* @return Injection method for reading server packets.

Datei anzeigen

@ -210,6 +210,13 @@ class ChannelInjector extends ByteToMessageDecoder implements Injector {
ENCODER_TYPE_MATCHER.set(encoder, TypeParameterMatcher.get(MinecraftReflection.getPacketClass()));
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
if (channelListener.isDebug())
cause.printStackTrace();
super.exceptionCaught(ctx, cause);
}
/**
* Encode a packet to a byte buffer, taking over for the standard Minecraft encoder.
* @param ctx - the current context.

Datei anzeigen

@ -57,4 +57,10 @@ interface ChannelListener {
* @return The error reporter.
*/
public ErrorReporter getReporter();
/**
* Determine if debug mode is enabled.
* @return TRUE if it is, FALSE otherwise.
*/
boolean isDebug();
}

Datei anzeigen

@ -65,12 +65,26 @@ public class NettyProtocolInjector implements ChannelListener {
// Handle errors
private ErrorReporter reporter;
private boolean debug;
public NettyProtocolInjector(ListenerInvoker invoker, ErrorReporter reporter) {
this.invoker = invoker;
this.reporter = reporter;
}
@Override
public boolean isDebug() {
return debug;
}
/**
* Set whether or not the debug mode is enabled.
* @param debug - TRUE if it is, FALSE otherwise.
*/
public void setDebug(boolean debug) {
this.debug = debug;
}
/**
* Inject into the spigot connection class.
*/