openethereum/parity-clib/Parity.java
Niklas Adolfsson b4f8bba843 parity-clib: async C bindings to RPC requests + subscribe/unsubscribe to websocket events (#9920)
* feat(parity-clib asynchronous rpc queries)

* feat(seperate bindings for ws and rpc)

* Subscribing to websockets for the full-client works

* feat(c binding unsubscribe_from_websocket)

* fix(tests): tweak CMake build config

* Enforce C+11

* refactor(parity-cpp-example) : `cpp:ify`

* fix(typedefs) : revert typedefs parity-clib

* docs(nits)

* fix(simplify websocket_unsubscribe)

* refactor(cpp example) : more subscriptions

* fix(callback type) : address grumbles on callback

* Use it the example to avoid using global variables

* docs(nits) - don't mention `arc`

* fix(jni bindings): fix compile errors

* feat(java example and updated java bindings)

* fix(java example) : run both full and light client

* fix(Java shutdown) : unsubscribe to sessions

Forgot to pass the JNIEnv environment since it is an instance method

* feat(return valid JString)

* Remove Java dependency by constructing a valid Java String in the callback

* fix(logger) : remove `rpc` trace log

* fix(format)

* fix(parity-clib): remove needless callback `type`

* fix(parity-clib-examples) : update examples

* `cpp` example pass in a struct instead to determines `callback kind`
* `java` add a instance variable the class `Callback` to determine `callback kind`

* fix(review comments): docs and format

* Update parity-clib/src/java.rs

Co-Authored-By: niklasad1 <niklasadolfsson1@gmail.com>

* fix(bad merge + spelling)

* fix(move examples to parity-clib/examples)
2019-01-02 16:49:01 +01:00

87 lines
3.1 KiB
Java
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2018 Parity Technologies (UK) Ltd.
// This file is part of Parity.
// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Parity 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 Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
package io.parity.ethereum;
/**
* Interface to the Parity client.
*/
public class Parity {
/**
* Starts the Parity client with the CLI options passed as an array of strings.
*
* Each space-delimited option corresponds to an array entry.
* For example: `["--port", "12345"]`
*
* @param options The CLI options to start Parity with
*/
public Parity(String[] options) {
long config = configFromCli(options);
inner = build(config);
}
/** Performs an asynchronous RPC query by spawning a background thread that is executed until
* either a response is received or the timeout has been expired.
*
* @param query The JSON-encoded RPC query to perform
* @param timeoutMillis The maximum time in milliseconds that the query will run
* @param callback An instance of class which must have a instance method named `callback` that will be
* invoke when the result is ready
*/
public void rpcQuery(String query, long timeoutMillis, Object callback) {
rpcQueryNative(inner, query, timeoutMillis, callback);
}
/** Subscribes to a specific WebSocket event that will run in a background thread until it is canceled.
*
* @param query The JSON-encoded RPC query to perform
* @param callback An instance of class which must have a instance method named `callback` that will be invoked
* when the result is ready
*
* @return A pointer to the current sessions which can be used to terminate the session later
*/
public long subscribeWebSocket(String query, Object callback) {
return subscribeWebSocketNative(inner, query, callback);
}
/** Unsubscribes to a specific WebSocket event
*
* @param session Pointer the the session to terminate
*/
public void unsubscribeWebSocket(long session) {
unsubscribeWebSocketNative(session);
}
// FIXME: `finalize` is deprecated - https://github.com/paritytech/parity-ethereum/issues/10066
@Override
protected void finalize() {
destroy(inner);
}
static {
System.loadLibrary("parity");
}
private static native long configFromCli(String[] cliOptions);
private static native long build(long config);
private static native void destroy(long inner);
private static native void rpcQueryNative(long inner, String rpc, long timeoutMillis, Object callback);
private static native long subscribeWebSocketNative(long inner, String rpc, Object callback);
private static native void unsubscribeWebSocketNative(long session);
private long inner;
}