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.
