// Copyright (c) 2009 The Chromium 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 org.chromium.sdk.internal.v8native;
import org.chromium.sdk.internal.v8native.protocol.input.CommandResponse;
import org.chromium.sdk.internal.v8native.protocol.input.SuccessCommandResponse;
/**
* The callback that handles JSON response to a VM command. The command-sender is staying
* blocked until callback finishes, which allows the callback to return a result of
* user-specified type {@code RES}.
* <p>User should subclass this and implement
* {@link #handleSuccessfulResponse(SuccessCommandResponse)} method.
* @param <RES> type of result value that is passed back to caller
*/
public abstract class V8BlockingCallback<RES> {
public RES messageReceived(CommandResponse response) {
SuccessCommandResponse successResponse = response.asSuccess();
if (successResponse == null) {
throw new RuntimeException("Unsuccessful command " +
response.asFailure().message());
}
return handleSuccessfulResponse(successResponse);
}
/**
* User-implementable method that handled successful json response and pass result back to
* command-sender.
* @param response with "success=true"
*/
protected abstract RES handleSuccessfulResponse(SuccessCommandResponse response);
}