diff -r 62043f5f7c67 -r 0e29eec2df5c project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/JnaFrontlib.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/JnaFrontlib.java Thu Jul 19 18:31:58 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/JnaFrontlib.java Thu Jul 19 18:58:18 2012 +0200 @@ -2,6 +2,8 @@ import java.nio.Buffer; import java.util.Collections; +import android.util.Log; + import com.sun.jna.Callback; import com.sun.jna.Library; import com.sun.jna.Native; @@ -15,6 +17,25 @@ System.loadLibrary("SDL_net"); } public static final JnaFrontlib INSTANCE = (JnaFrontlib)Native.loadLibrary("frontlib", JnaFrontlib.class, Collections.singletonMap(Library.OPTION_TYPE_MAPPER, FrontlibTypeMapper.INSTANCE)); + + // Hook frontlib logging into Android logging + private static final JnaFrontlib.LogCallback logCb = new JnaFrontlib.LogCallback() { + public void callback(int level, String message) { + if(level >= JnaFrontlib.FLIB_LOGLEVEL_ERROR) { + Log.e("Frontlib", message); + } else if(level == JnaFrontlib.FLIB_LOGLEVEL_WARNING){ + Log.w("Frontlib", message); + } else if(level == JnaFrontlib.FLIB_LOGLEVEL_INFO){ + Log.i("Frontlib", message); + } else if(level <= JnaFrontlib.FLIB_LOGLEVEL_DEBUG){ + Log.d("Frontlib", message); + } + } + }; + static { + INSTANCE.flib_log_setLevel(JnaFrontlib.FLIB_LOGLEVEL_WARNING); + INSTANCE.flib_log_setCallback(logCb); + } } public interface JnaFrontlib extends Library { @@ -56,14 +77,60 @@ static class MapconnPtr extends PointerType { } static class GameconnPtr extends PointerType { } static class MetaschemePtr extends PointerType { } - static class RoomlistPtr extends PointerType { } - static class RoomPtr extends PointerType { } + + static class RoomArrayPtr extends PointerType { + /** + * Returns the (native-owned) rooms in this list + */ + public RoomPtr[] getRooms(int count) { + Pointer ptr = getPointer(); + if(ptr == null) { + return new RoomPtr[0]; + } + Pointer[] untypedPtrs = ptr.getPointerArray(0, count); + RoomPtr[] typedPtrs = new RoomPtr[count]; + for(int i=0; i