DispatchObserverI.java

// Copyright (c) ZeroC, Inc.

package com.zeroc.Ice;

import com.zeroc.Ice.Instrumentation.DispatchObserver;
import com.zeroc.IceMX.DispatchMetrics;
import com.zeroc.IceMX.ObserverWithDelegate;

/**
 * @hidden Public because it's used by IceMX (via reflection).
 */
public class DispatchObserverI extends ObserverWithDelegate<DispatchMetrics, DispatchObserver>
    implements DispatchObserver {
    @Override
    public void userException() {
        forEach(_userException);
        if (_delegate != null) {
            _delegate.userException();
        }
    }

    @Override
    public void reply(final int size) {
        forEach(
            new MetricsUpdate<DispatchMetrics>() {
                @Override
                public void update(DispatchMetrics v) {
                    v.replySize += size;
                }
            });
        if (_delegate != null) {
            _delegate.reply(size);
        }
    }

    private final MetricsUpdate<DispatchMetrics> _userException =
        new MetricsUpdate<DispatchMetrics>() {
            @Override
            public void update(DispatchMetrics v) {
                ++v.userException;
            }
        };
}