class DebuggerSessionImpl implements IDebuggerSession {

    @Override
    public void handleInterrupt(final IMessageProcessor messageProcessor)
            throws InterruptProcessingException {
        if (messageProcessor != processor || !isRunning()) {
            return;
        }

        try {
            if (prePaused
                    || sequence.getCurrentLevel() <= stepModeMaxDepth
                    || sequence.isCompleted()
                    || breakpointsStorage.shouldBreakAt(sequence)) {
                pauseProcessor();
            } else
            //noinspection ThrowableResultOfMethodCallIgnored
            if (sequence.getException() != null) {
                if (breakOnException) {
                    pauseProcessor();
                } else if (!sequence.processException()) {
                    pauseProcessor();
                }
            }
        } catch (AsynchronousOperationException | BreakpointStorageException e) {
            throw new InterruptProcessingException("Error occurred pausing processing of debuggable message.", e);
        }
    }

    public  DebuggerSessionImpl(final String id, final Object debuggerAddress);

}