Search in sources :

Example 1 with CancelableCountDownLatch

use of com.alibaba.android.arouter.thread.CancelableCountDownLatch in project ARouter by alibaba.

the class InterceptorServiceImpl method doInterceptions.

@Override
public void doInterceptions(final Postcard postcard, final InterceptorCallback callback) {
    if (null != Warehouse.interceptors && Warehouse.interceptors.size() > 0) {
        checkInterceptorsInitStatus();
        if (!interceptorHasInit) {
            callback.onInterrupt(new HandlerException("Interceptors initialization takes too much time."));
            return;
        }
        LogisticsCenter.executor.execute(new Runnable() {

            @Override
            public void run() {
                CancelableCountDownLatch interceptorCounter = new CancelableCountDownLatch(Warehouse.interceptors.size());
                try {
                    _excute(0, interceptorCounter, postcard);
                    interceptorCounter.await(postcard.getTimeout(), TimeUnit.SECONDS);
                    if (interceptorCounter.getCount() > 0) {
                        // Cancel the navigation this time, if it hasn't return anythings.
                        callback.onInterrupt(new HandlerException("The interceptor processing timed out."));
                    } else if (null != postcard.getTag()) {
                        // Maybe some exception in the tag.
                        callback.onInterrupt(new HandlerException(postcard.getTag().toString()));
                    } else {
                        callback.onContinue(postcard);
                    }
                } catch (Exception e) {
                    callback.onInterrupt(e);
                }
            }
        });
    } else {
        callback.onContinue(postcard);
    }
}
Also used : HandlerException(com.alibaba.android.arouter.exception.HandlerException) CancelableCountDownLatch(com.alibaba.android.arouter.thread.CancelableCountDownLatch) HandlerException(com.alibaba.android.arouter.exception.HandlerException)

Aggregations

HandlerException (com.alibaba.android.arouter.exception.HandlerException)1 CancelableCountDownLatch (com.alibaba.android.arouter.thread.CancelableCountDownLatch)1