Callbacks (part 3)
In the third part of our series on callbacks, we’ll discuss what to do if we have a .NET assembly that implements callbacks using a Java-style listener interface. (See part one: using callbacks in .NET-to-Java projects and part two: callbacks in Java-to-.NET projects.) Since JNBridgePro only supports the delegate/event callback style in Java-to-.NET projects, we need to have a way to convert between the two styles. Here’s one such way. Assume we have the following listener interface:
public interface MyCallbackInterface { bool myCallbackMethod(int param1, string param2); }
and the following callback generator
public class CallbackGenerator { public static void registerCallback(MyCallbackInterface theCallback) {…} public static void fire() {…} }
We can create .NET event-style wrappers that can be proxied as follows:
public delegate bool MyCallbackHandler(int param1, string param2); public class NewCallbackGenerator { // this is the wrapper to convert listeners to events private class MyCallbackHandlerWrapper : MyCallbackInterface { MyCallbackHandler mch; public MyCallbackHandlerWrapper(MyCallbackHandler mch) { this.mch = mch; } public bool myCallbackMethod(int param1, string param2) { return mch(param1, param2); } } // here is the event interface public static event MyCallbackHandler MyEvent { add { MyCallbackHandlerWrapper mcw = new MyCallbackHandlerWrapper(value); CallbackGenerator.registerCallback(mcw); } } public static void fireEvents() { CallbackGenerator.fire(); } }
You should proxy and use MyCallbackHandler
and NewCallbackGenerator
as you would any other proxied delegate/event-style callback.