+ if (use_chan_manager_constructor) {
+ if (use_ignore_handler) {
+ this.constructor = new ChannelManagerConstructor(Network.LDKNetwork_Bitcoin, UserConfig.with_default(), new byte[32], 0,
+ this.keys_interface, this.fee_estimator, this.chain_monitor, null, this.tx_broadcaster, this.logger);
+ } else {
+ this.constructor = new ChannelManagerConstructor(Network.LDKNetwork_Bitcoin, UserConfig.with_default(), new byte[32], 0,
+ this.keys_interface, this.fee_estimator, this.chain_monitor, this.router, this.tx_broadcaster, this.logger);
+ }
+ MultiThreadedLockableScore scorer = null;
+ if (use_invoice_payer) { scorer = MultiThreadedLockableScore.of(Scorer.with_default().as_Score()); }
+ constructor.chain_sync_completed(new ChannelManagerConstructor.EventHandler() {
+ @Override public void handle_event(Event event) {
+ synchronized (pending_manager_events) {
+ pending_manager_events.add(event);
+ pending_manager_events.notifyAll();
+ }
+ }
+ @Override public void persist_manager(byte[] channel_manager_bytes) { assert channel_manager_bytes.length > 1; }
+ }, scorer);
+ this.chan_manager = constructor.channel_manager;
+ this.peer_manager = constructor.peer_manager;
+ this.payer = constructor.payer;
+ must_free_objs.add(new WeakReference<>(this.chan_manager));
+ } else {
+ ChainParameters params = ChainParameters.of(Network.LDKNetwork_Bitcoin, BestBlock.of(new byte[32], 0));
+ this.chan_manager = ChannelManager.of(this.fee_estimator, chain_watch, tx_broadcaster, logger, this.keys_interface, UserConfig.with_default(), params);
+ byte[] random_data = keys_interface.get_secure_random_bytes();
+ this.peer_manager = PeerManager.of(chan_manager.as_ChannelMessageHandler(), route_handler.as_RoutingMessageHandler(), keys_interface.get_node_secret(), random_data, logger, this.custom_message_handler);
+ if (use_invoice_payer) {
+ this.payer = InvoicePayer.of(this.chan_manager.as_Payer(), Router.new_impl(new Router.RouterInterface() {
+ @Override
+ public Result_RouteLightningErrorZ find_route(byte[] payer, RouteParameters params, byte[] payment_hash, ChannelDetails[] first_hops, Score scorer) {
+ return UtilMethods.find_route(payer, params, router, first_hops, logger, scorer);
+ }
+ }), MultiThreadedLockableScore.of(Score.new_impl(new Score.ScoreInterface() {
+ @Override public void payment_path_failed(RouteHop[] path, long scid) {}
+ @Override public long channel_penalty_msat(long short_channel_id, long send_amt_msat, Option_u64Z channel_capacity_msat, NodeId source, NodeId target) { return 0; }
+ @Override public void payment_path_successful(RouteHop[] path) {}
+ @Override public byte[] write() { assert false; return null; }
+ })), logger, EventHandler.new_impl(new EventHandler.EventHandlerInterface() {
+ @Override public void handle_event(Event event) {
+ synchronized (pending_manager_events) {
+ pending_manager_events.add(event);
+ pending_manager_events.notifyAll();
+ }
+ }
+ }), RetryAttempts.of(0));
+ }