X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=c_sharp%2Fsrc%2Forg%2Fldk%2Fstructs%2FEventHandler.cs;h=718935df0f86e6ec49bf9a0c00fbe1baa5322333;hb=8de7213fbf663ff60322896282dad51e8ab2f001;hp=7a637f04f4347324a9b54599549ffd0a962256a7;hpb=afc50e5d491a11364849383b75a8f939df703bac;p=ldk-java diff --git a/c_sharp/src/org/ldk/structs/EventHandler.cs b/c_sharp/src/org/ldk/structs/EventHandler.cs index 7a637f04..718935df 100644 --- a/c_sharp/src/org/ldk/structs/EventHandler.cs +++ b/c_sharp/src/org/ldk/structs/EventHandler.cs @@ -1,3 +1,4 @@ + using org.ldk.impl; using org.ldk.enums; using org.ldk.util; @@ -5,6 +6,17 @@ using System; namespace org { namespace ldk { namespace structs { + + +/** An implementation of EventHandler */ +public interface EventHandlerInterface { + /**Handles the given [`Event`]. + * + * See [`EventsProvider`] for details that must be considered when implementing this method. + */ + void handle_event(Event _event); +} + /** * A trait implemented for objects handling events from [`EventsProvider`]. * @@ -13,24 +25,14 @@ namespace org { namespace ldk { namespace structs { * core::future::Future, H: Fn(Event) -> F`. */ public class EventHandler : CommonBase { - internal readonly bindings.LDKEventHandler bindings_instance; + internal bindings.LDKEventHandler bindings_instance; + internal long instance_idx; + internal EventHandler(object _dummy, long ptr) : base(ptr) { bindings_instance = null; } - private EventHandler(bindings.LDKEventHandler arg) : base(bindings.LDKEventHandler_new(arg)) { - this.ptrs_to.AddLast(arg); - this.bindings_instance = arg; - } ~EventHandler() { if (ptr != 0) { bindings.EventHandler_free(ptr); } } - public interface EventHandlerInterface { - /** - * Handles the given [`Event`]. - * - * See [`EventsProvider`] for details that must be considered when implementing this method. - */ - void handle_event(Event _event); - } private class LDKEventHandlerHolder { internal EventHandler held; } private class LDKEventHandlerImpl : bindings.LDKEventHandler { internal LDKEventHandlerImpl(EventHandlerInterface arg, LDKEventHandlerHolder impl_holder) { this.arg = arg; this.impl_holder = impl_holder; } @@ -43,11 +45,19 @@ public class EventHandler : CommonBase { GC.KeepAlive(arg); } } + + /** Creates a new instance of EventHandler from a given implementation */ public static EventHandler new_impl(EventHandlerInterface arg) { LDKEventHandlerHolder impl_holder = new LDKEventHandlerHolder(); - impl_holder.held = new EventHandler(new LDKEventHandlerImpl(arg, impl_holder)); + LDKEventHandlerImpl impl = new LDKEventHandlerImpl(arg, impl_holder); + long[] ptr_idx = bindings.LDKEventHandler_new(impl); + + impl_holder.held = new EventHandler(null, ptr_idx[0]); + impl_holder.held.instance_idx = ptr_idx[1]; + impl_holder.held.bindings_instance = impl; return impl_holder.held; } + /** * Handles the given [`Event`]. *