- Route get_route(byte[] dest_node, ChannelDetails[] our_chans) {
- try (LockedNetworkGraph netgraph = this.router.read_locked_graph()) {
- NetworkGraph graph = netgraph.graph();
- long res = bindings.get_route(this.node_id, graph._test_only_get_ptr(), dest_node, new long[]{our_chans[0]._test_only_get_ptr()},
- new long[0], 1000, 42, this.logger._test_only_get_ptr());
- assert bindings.LDKCResult_RouteLightningErrorZ_result_ok(res);
- byte[] serialized_route = bindings.Route_write(bindings.LDKCResult_RouteLightningErrorZ_get_ok(res));
- must_free_objs.add(new WeakReference<>(serialized_route));
- Result_RouteDecodeErrorZ copy = Route.constructor_read(serialized_route);
- assert copy instanceof Result_RouteDecodeErrorZ.Result_RouteDecodeErrorZ_OK;
- bindings.CResult_RouteLightningErrorZ_free(res);
- return ((Result_RouteDecodeErrorZ.Result_RouteDecodeErrorZ_OK) copy).res;
+ Event[] get_monitor_events(int expected_len) {
+ if (use_chan_manager_constructor) {
+ while (true) {
+ synchronized (this.pending_manager_events) {
+ if (expected_len != 0 && this.pending_manager_events.size() == expected_len) {
+ break;
+ }
+ }
+ if (expected_len == 0) {
+ try { Thread.sleep(500); } catch (InterruptedException e) { assert false; }
+ break;
+ } else {
+ Thread.yield();
+ }
+ }
+ synchronized (this.pending_manager_events) {
+ Event[] res = this.pending_manager_events.toArray(new Event[0]);
+ this.pending_manager_events.clear();
+ assert res.length == expected_len;
+ return res;
+ }
+ } else if (chain_monitor != null) {
+ ArrayList<Event> l = new ArrayList<Event>();
+ chain_monitor.as_EventsProvider().process_pending_events(EventHandler.new_impl(l::add));
+ assert l.size() == expected_len;
+ return l.toArray(new Event[0]);
+ } else {
+ synchronized (monitors) {
+ assert monitors.size() == 1;
+ for (ChannelMonitor mon : monitors.values()) {
+ Event[] res = mon.get_and_clear_pending_events();
+ assert res.length == expected_len;
+ return res;
+ }
+ return null;
+ }
+ }
+ }
+
+ Event[] get_manager_events(int expected_len, Peer peer1, Peer peer2) {
+ assert expected_len != 0;
+ if (!use_nio_peer_handler) {
+ maybe_exchange_peer_messages(peer1, peer2);
+ }
+ Event[] res = new Event[0];
+ if (use_chan_manager_constructor) {
+ while (res.length < expected_len) {
+ synchronized (this.pending_manager_events) {
+ res = this.pending_manager_events.toArray(res);
+ assert res.length == expected_len || res.length == 0; // We don't handle partial results
+ this.pending_manager_events.clear();
+ if (res.length < expected_len) {
+ try { this.pending_manager_events.wait(); } catch (InterruptedException e) { assert false; }
+ }
+ }
+ }
+ } else {
+ ArrayList<Event> l = new ArrayList<Event>();
+ while (l.size() < expected_len) {
+ Thread.yield();
+ if (use_nio_peer_handler) {
+ peer1.nio_peer_handler.check_events();
+ peer2.nio_peer_handler.check_events();
+ }
+ chan_manager.as_EventsProvider().process_pending_events(EventHandler.new_impl(l::add));
+ assert l.size() == expected_len || l.size() == 0; // We don't handle partial results
+ }
+ return l.toArray(new Event[0]);