blob: e0b71fbb08c23fd61da8693744ca6270c9863631 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package io.v.impl.google.lib.discovery;
import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
import io.v.impl.google.ListenableFutureCallback;
import io.v.v23.InputChannel;
import io.v.v23.context.VContext;
import io.v.v23.discovery.Service;
import io.v.v23.discovery.Update;
import io.v.v23.discovery.VDiscovery;
import io.v.v23.security.BlessingPattern;
import io.v.v23.verror.VException;
class VDiscoveryImpl implements VDiscovery {
private long nativeDiscoveryPtr;
private long nativeTriggerPtr;
private native void nativeAdvertise(
long nativeDiscoveryPtr, long nativeTriggerPtr, VContext ctx, Service service,
List<BlessingPattern> visibility,
ListenableFutureCallback<ListenableFuture<Void>> startCallback,
ListenableFutureCallback<Void> doneCallback);
private native InputChannel<Update> nativeScan(
long nativeDiscoveryPtr, VContext ctx, String query) throws VException;
private native void nativeFinalize(long nativeDiscoveryPtr, long nativeTriggerPtr);
private VDiscoveryImpl(long nativeDiscoveryPtr, long nativeTriggerPtr) {
this.nativeDiscoveryPtr = nativeDiscoveryPtr;
this.nativeTriggerPtr = nativeTriggerPtr;
}
@Override
public ListenableFuture<ListenableFuture<Void>> advertise(VContext ctx, Service service,
List<BlessingPattern> visibility) {
ListenableFutureCallback<ListenableFuture<Void>> startCallback = new ListenableFutureCallback<>();
ListenableFutureCallback<Void> doneCallback = new ListenableFutureCallback<>();
nativeAdvertise(nativeDiscoveryPtr, nativeTriggerPtr, ctx, service, visibility,
startCallback, doneCallback);
return startCallback.getFuture(ctx);
}
@Override
public InputChannel<Update> scan(VContext ctx, String query) {
try {
return nativeScan(nativeDiscoveryPtr, ctx, query);
} catch (VException e) {
throw new RuntimeException("Couldn't start discovery scan()", e);
}
}
@Override
protected void finalize() throws Throwable {
super.finalize();
nativeFinalize(nativeDiscoveryPtr, nativeTriggerPtr);
}
}