Merge pull request #124 from TheBlueMatt/main
[ldk-java] / c_sharp / src / org / ldk / structs / EventHandler.cs
1 using org.ldk.impl;
2 using org.ldk.enums;
3 using org.ldk.util;
4 using System;
5
6 namespace org { namespace ldk { namespace structs {
7
8 /**
9  * A trait implemented for objects handling events from [`EventsProvider`].
10  * 
11  * An async variation also exists for implementations of [`EventsProvider`] that support async
12  * event handling. The async event handler should satisfy the generic bounds: `F:
13  * core::future::Future, H: Fn(Event) -> F`.
14  */
15 public class EventHandler : CommonBase {
16         internal readonly bindings.LDKEventHandler bindings_instance;
17         internal EventHandler(object _dummy, long ptr) : base(ptr) { bindings_instance = null; }
18         private EventHandler(bindings.LDKEventHandler arg) : base(bindings.LDKEventHandler_new(arg)) {
19                 this.ptrs_to.AddLast(arg);
20                 this.bindings_instance = arg;
21         }
22         ~EventHandler() {
23                 if (ptr != 0) { bindings.EventHandler_free(ptr); }
24         }
25
26         public interface EventHandlerInterface {
27                 /**
28                  * Handles the given [`Event`].
29                  * 
30                  * See [`EventsProvider`] for details that must be considered when implementing this method.
31                  */
32                 void handle_event(Event _event);
33         }
34         private class LDKEventHandlerHolder { internal EventHandler held; }
35         private class LDKEventHandlerImpl : bindings.LDKEventHandler {
36                 internal LDKEventHandlerImpl(EventHandlerInterface arg, LDKEventHandlerHolder impl_holder) { this.arg = arg; this.impl_holder = impl_holder; }
37                 private EventHandlerInterface arg;
38                 private LDKEventHandlerHolder impl_holder;
39                 public void handle_event(long _event) {
40                         org.ldk.structs.Event _event_hu_conv = org.ldk.structs.Event.constr_from_ptr(_event);
41                         if (_event_hu_conv != null) { _event_hu_conv.ptrs_to.AddLast(this); };
42                         arg.handle_event(_event_hu_conv);
43                                 GC.KeepAlive(arg);
44                 }
45         }
46         public static EventHandler new_impl(EventHandlerInterface arg) {
47                 LDKEventHandlerHolder impl_holder = new LDKEventHandlerHolder();
48                 impl_holder.held = new EventHandler(new LDKEventHandlerImpl(arg, impl_holder));
49                 return impl_holder.held;
50         }
51         /**
52          * Handles the given [`Event`].
53          * 
54          * See [`EventsProvider`] for details that must be considered when implementing this method.
55          */
56         public void handle_event(org.ldk.structs.Event _event) {
57                 bindings.EventHandler_handle_event(this.ptr, _event.ptr);
58                 GC.KeepAlive(this);
59                 GC.KeepAlive(_event);
60         }
61
62 }
63 } } }