All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.openbase.jul.communication.RPCFutureImpl.kt Maven / Gradle / Ivy

The newest version!
package org.openbase.jul.communication

import java.lang.InterruptedException
import org.openbase.jul.communication.exception.RPCException
import org.openbase.jul.communication.exception.RPCResolvedException
import java.util.concurrent.ExecutionException
import java.util.concurrent.Future
import java.util.concurrent.TimeUnit
import java.util.concurrent.TimeoutException

/*-
 * #%L
 * JUL Communication Default
 * %%
 * Copyright (C) 2015 - 2022 openbase.org
 * %%
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Lesser Public License for more details.
 * 
 * You should have received a copy of the GNU General Lesser Public
 * License along with this program.  If not, see
 * .
 * #L%
 */ /**
 * @param  The result type returned by this Future's `get` method
 */
class RPCFutureImpl(val internalFuture: Future) : Future {
    override fun cancel(mayInterruptIfRunning: Boolean): Boolean {
        return internalFuture.cancel(mayInterruptIfRunning)
    }

    override fun isCancelled(): Boolean {
        return internalFuture.isCancelled
    }

    override fun isDone(): Boolean {
        return internalFuture.isDone
    }

    @Throws(InterruptedException::class, ExecutionException::class)
    override fun get(): V {
        return try {
            internalFuture.get()
        } catch (ex: ExecutionException) {
            if (ex.cause is RPCException) {
                throw ExecutionException(RPCResolvedException(ex.cause as RPCException?))
            }
            throw ex
        }
    }

    @Throws(InterruptedException::class, ExecutionException::class, TimeoutException::class)
    override fun get(timeout: Long, unit: TimeUnit): V {
        return try {
            internalFuture[timeout, unit]
        } catch (ex: ExecutionException) {
            if (ex.cause is RPCException) {
                throw ExecutionException(RPCResolvedException("Remote task failed!", ex.cause as RPCException?))
            }
            throw ex
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy