project_files/frontlib/extra/jnacontrol.c
branchhedgeroid
changeset 7857 2bc61f8841a1
parent 7691 55c0a856ecd0
child 10017 de822cd3df3a
equal deleted inserted replaced
7855:ddcdedd3330b 7857:2bc61f8841a1
       
     1 /*
       
     2  * Hedgewars, a free turn based strategy game
       
     3  * Copyright (C) 2012 Simeon Maxein <smaxein@googlemail.com>
       
     4  *
       
     5  * This program is free software; you can redistribute it and/or
       
     6  * modify it under the terms of the GNU General Public License
       
     7  * as published by the Free Software Foundation; either version 2
       
     8  * of the License, or (at your option) any later version.
       
     9  *
       
    10  * This program is distributed in the hope that it will be useful,
       
    11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       
    13  * GNU General Public License for more details.
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License
       
    16  * along with this program; if not, write to the Free Software
       
    17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
       
    18  */
       
    19 
       
    20 /*
       
    21  * This file is not directly part of the frontlib and is not required to build it.
       
    22  * However, it is recommended to include it in compilation when building for Android. The purpose of this file
       
    23  * is to ensure consistency between the function signatures of the JNA Java bindings of the Android port and the
       
    24  * frontlib functions.
       
    25  *
       
    26  * This file, in essence, consists only of function declarations. They are duplicates of function declarations
       
    27  * from the frontlib headers that are referenced from JNA bindings. If the signature of one of these functions
       
    28  * changes in the frontlib, it will no longer match the signature in this file, and the compiler will show an error.
       
    29  * If that happens, you need to update the JNA bindings in Hedgeroid to match the new function signature, and then
       
    30  * update this file.
       
    31  *
       
    32  * The reason for all this is that JNA does not actually know the function signatures of the functions it binds,
       
    33  * it derives them from Java method declarations. If those do not match the actual function signatures, you will
       
    34  * only notice when you suddenly get strange (and possibly hard to track down) problems at runtime. This file is
       
    35  * an attempt to detect these problems at compile time instead. Notice that it will NOT detect changes to structs
       
    36  * or constants though, which also require updates to the JNA bindings.
       
    37  */
       
    38 
       
    39 /*
       
    40  * Before we include the frontlib headers, we define away the const keyword. This is necessary because there is no
       
    41  * distinction between const and non-const types on the JNA side, and we don't want the compiler to complain because
       
    42  * of bad constness.
       
    43  *
       
    44  * This is so evil, but it works...
       
    45  */
       
    46 #define const
       
    47 
       
    48 #include "../frontlib.h"
       
    49 
       
    50 /*
       
    51  * Now we map the Java types to the corresponding C types...
       
    52  */
       
    53 typedef flib_netconn *NetconnPtr;
       
    54 typedef flib_gameconn *GameconnPtr;
       
    55 typedef flib_mapconn *MapconnPtr;
       
    56 typedef flib_metascheme *MetaschemePtr;
       
    57 typedef flib_room **RoomArrayPtr;
       
    58 typedef flib_weaponset *WeaponsetPtr;
       
    59 typedef flib_weaponsetlist *WeaponsetListPtr;
       
    60 typedef flib_map *MapRecipePtr;
       
    61 typedef flib_scheme *SchemePtr;
       
    62 typedef flib_schemelist *SchemelistPtr;
       
    63 
       
    64 typedef flib_room *RoomPtr;
       
    65 typedef flib_team *TeamPtr;
       
    66 typedef flib_gamesetup *GameSetupPtr;
       
    67 typedef bool boolean;
       
    68 typedef size_t NativeSizeT;
       
    69 typedef void *Pointer;
       
    70 typedef uint8_t *ByteArrayPtr;
       
    71 typedef char *String;
       
    72 
       
    73 /*
       
    74  * Mapping callback types
       
    75  */
       
    76 typedef void (*VoidCallback)(Pointer context);
       
    77 typedef void (*StrCallback)(Pointer context, String arg1);
       
    78 typedef void (*IntCallback)(Pointer context, int arg1);
       
    79 typedef void (*IntStrCallback)(Pointer context, int arg1, String arg2);
       
    80 typedef void (*StrIntCallback)(Pointer context, String arg1, int arg2);
       
    81 typedef void (*StrStrCallback)(Pointer context, String arg1, String arg2);
       
    82 typedef void (*StrStrBoolCallback)(Pointer context, String arg1, String arg2, boolean arg3);
       
    83 typedef void (*RoomCallback)(Pointer context, RoomPtr arg1);
       
    84 typedef void (*RoomListCallback)(Pointer context, RoomArrayPtr arg1, int arg2);
       
    85 typedef void (*StrRoomCallback)(Pointer context, String arg1, RoomPtr arg2);
       
    86 typedef void (*BoolCallback)(Pointer context, boolean arg1);
       
    87 typedef void (*StrBoolCallback)(Pointer context, String arg1, boolean arg2);
       
    88 typedef void (*TeamCallback)(Pointer context, TeamPtr arg1);
       
    89 typedef void (*BytesCallback)(Pointer context, const uint8_t *buffer, NativeSizeT size);
       
    90 typedef void (*BytesBoolCallback)(Pointer context, const uint8_t *buffer, NativeSizeT size, boolean arg3);
       
    91 typedef void (*SchemeCallback)(Pointer context, SchemePtr arg1);
       
    92 typedef void (*MapIntCallback)(Pointer context, MapRecipePtr arg1, int arg2);
       
    93 typedef void (*WeaponsetCallback)(Pointer context, WeaponsetPtr arg1);
       
    94 typedef void (*MapimageCallback)(Pointer context, const uint8_t *mapimage, int hogs);
       
    95 typedef void (*LogCallback)(int arg1, String arg2);
       
    96 
       
    97 /*
       
    98  * Below here are the copypasted method declarations from the JNA bindings
       
    99  */
       
   100 
       
   101 	// frontlib.h
       
   102     int flib_init();
       
   103     void flib_quit();
       
   104 
       
   105     // hwconsts.h
       
   106     int flib_get_teamcolor_count();
       
   107     int flib_get_hedgehogs_per_team();
       
   108     int flib_get_weapons_count();
       
   109 	MetaschemePtr flib_get_metascheme();
       
   110 
       
   111     // net/netconn.h
       
   112 	NetconnPtr flib_netconn_create(String playerName, String dataDirPath, String host, int port);
       
   113 	void flib_netconn_destroy(NetconnPtr conn);
       
   114 
       
   115 	void flib_netconn_tick(NetconnPtr conn);
       
   116 	boolean flib_netconn_is_chief(NetconnPtr conn);
       
   117 	String flib_netconn_get_playername(NetconnPtr conn);
       
   118 	GameSetupPtr flib_netconn_create_gamesetup(NetconnPtr conn);
       
   119 	int flib_netconn_send_quit(NetconnPtr conn, String quitmsg);
       
   120 	int flib_netconn_send_chat(NetconnPtr conn, String chat);
       
   121 	int flib_netconn_send_teamchat(NetconnPtr conn, String msg);
       
   122 	int flib_netconn_send_password(NetconnPtr conn, String passwd);
       
   123 	int flib_netconn_send_nick(NetconnPtr conn, String nick);
       
   124 	int flib_netconn_send_request_roomlist(NetconnPtr conn);
       
   125 	int flib_netconn_send_joinRoom(NetconnPtr conn, String room);
       
   126 	int flib_netconn_send_createRoom(NetconnPtr conn, String room);
       
   127 	int flib_netconn_send_renameRoom(NetconnPtr conn, String roomName);
       
   128 	int flib_netconn_send_leaveRoom(NetconnPtr conn, String msg);
       
   129 	int flib_netconn_send_toggleReady(NetconnPtr conn);
       
   130 	int flib_netconn_send_addTeam(NetconnPtr conn, TeamPtr team);
       
   131 	int flib_netconn_send_removeTeam(NetconnPtr conn, String teamname);
       
   132 	int flib_netconn_send_engineMessage(NetconnPtr conn, ByteArrayPtr message, NativeSizeT size);
       
   133 	int flib_netconn_send_teamHogCount(NetconnPtr conn, String teamname, int hogcount);
       
   134 	int flib_netconn_send_teamColor(NetconnPtr conn, String teamname, int colorIndex);
       
   135 	int flib_netconn_send_weaponset(NetconnPtr conn, WeaponsetPtr weaponset);
       
   136 	int flib_netconn_send_map(NetconnPtr conn, MapRecipePtr map);
       
   137 	int flib_netconn_send_mapName(NetconnPtr conn, String mapName);
       
   138 	int flib_netconn_send_mapGen(NetconnPtr conn, int mapGen);
       
   139 	int flib_netconn_send_mapTemplate(NetconnPtr conn, int templateFilter);
       
   140 	int flib_netconn_send_mapMazeSize(NetconnPtr conn, int mazeSize);
       
   141 	int flib_netconn_send_mapSeed(NetconnPtr conn, String seed);
       
   142 	int flib_netconn_send_mapTheme(NetconnPtr conn, String theme);
       
   143 	int flib_netconn_send_mapDrawdata(NetconnPtr conn, ByteArrayPtr drawData, NativeSizeT size);
       
   144 	int flib_netconn_send_script(NetconnPtr conn, String scriptName);
       
   145 	int flib_netconn_send_scheme(NetconnPtr conn, SchemePtr scheme);
       
   146 	int flib_netconn_send_roundfinished(NetconnPtr conn, boolean withoutError);
       
   147 	int flib_netconn_send_ban(NetconnPtr conn, String playerName);
       
   148 	int flib_netconn_send_kick(NetconnPtr conn, String playerName);
       
   149 	int flib_netconn_send_playerInfo(NetconnPtr conn, String playerName);
       
   150 	int flib_netconn_send_playerFollow(NetconnPtr conn, String playerName);
       
   151 	int flib_netconn_send_startGame(NetconnPtr conn);
       
   152 	int flib_netconn_send_toggleRestrictJoins(NetconnPtr conn);
       
   153 	int flib_netconn_send_toggleRestrictTeams(NetconnPtr conn);
       
   154 	int flib_netconn_send_clearAccountsCache(NetconnPtr conn);
       
   155 	int flib_netconn_send_setServerVar(NetconnPtr conn, String name, String value);
       
   156 	int flib_netconn_send_getServerVars(NetconnPtr conn);
       
   157 
       
   158 	void flib_netconn_onMessage(NetconnPtr conn, IntStrCallback callback, Pointer context);
       
   159 	void flib_netconn_onClientFlags(NetconnPtr conn, StrStrBoolCallback callback, Pointer context);
       
   160 	void flib_netconn_onChat(NetconnPtr conn, StrStrCallback callback, Pointer context);
       
   161 	void flib_netconn_onConnected(NetconnPtr conn, VoidCallback callback, Pointer context);
       
   162 	void flib_netconn_onDisconnected(NetconnPtr conn, IntStrCallback callback, Pointer context);
       
   163 	void flib_netconn_onRoomlist(NetconnPtr conn, RoomListCallback callback, Pointer context);
       
   164 	void flib_netconn_onRoomAdd(NetconnPtr conn, RoomCallback callback, Pointer context);
       
   165 	void flib_netconn_onRoomDelete(NetconnPtr conn, StrCallback callback, Pointer context);
       
   166 	void flib_netconn_onRoomUpdate(NetconnPtr conn, StrRoomCallback callback, Pointer context);
       
   167 	void flib_netconn_onLobbyJoin(NetconnPtr conn, StrCallback callback, Pointer context);
       
   168 	void flib_netconn_onLobbyLeave(NetconnPtr conn, StrStrCallback callback, Pointer context);
       
   169 	void flib_netconn_onNickTaken(NetconnPtr conn, StrCallback callback, Pointer context);
       
   170 	void flib_netconn_onPasswordRequest(NetconnPtr conn, StrCallback callback, Pointer context);
       
   171 	void flib_netconn_onEnterRoom(NetconnPtr conn, BoolCallback callback, Pointer context);
       
   172 	void flib_netconn_onLeaveRoom(NetconnPtr conn, IntStrCallback callback, Pointer context);
       
   173 	void flib_netconn_onTeamAdd(NetconnPtr conn, TeamCallback callback, Pointer context);
       
   174 	void flib_netconn_onTeamDelete(NetconnPtr conn, StrCallback callback, Pointer context);
       
   175 	void flib_netconn_onRoomJoin(NetconnPtr conn, StrCallback callback, Pointer context);
       
   176 	void flib_netconn_onRoomLeave(NetconnPtr conn, StrStrCallback callback, Pointer context);
       
   177 	void flib_netconn_onRunGame(NetconnPtr conn, VoidCallback callback, Pointer context);
       
   178 	void flib_netconn_onTeamAccepted(NetconnPtr conn, StrCallback callback, Pointer context);
       
   179 	void flib_netconn_onHogCountChanged(NetconnPtr conn, StrIntCallback callback, Pointer context);
       
   180 	void flib_netconn_onTeamColorChanged(NetconnPtr conn, StrIntCallback callback, Pointer context);
       
   181 	void flib_netconn_onEngineMessage(NetconnPtr conn, BytesCallback callback, Pointer context);
       
   182 	void flib_netconn_onSchemeChanged(NetconnPtr conn, SchemeCallback callback, Pointer context);
       
   183 	void flib_netconn_onMapChanged(NetconnPtr conn, MapIntCallback callback, Pointer context);
       
   184 	void flib_netconn_onScriptChanged(NetconnPtr conn, StrCallback callback, Pointer context);
       
   185 	void flib_netconn_onWeaponsetChanged(NetconnPtr conn, WeaponsetCallback callback, Pointer context);
       
   186 	void flib_netconn_onServerVar(NetconnPtr conn, StrStrCallback callback, Pointer context);
       
   187 
       
   188 	// ipc/gameconn.h
       
   189 
       
   190 	GameconnPtr flib_gameconn_create(String playerName, GameSetupPtr setup, boolean netgame);
       
   191 	GameconnPtr flib_gameconn_create_playdemo(ByteArrayPtr demo, NativeSizeT size);
       
   192 	GameconnPtr flib_gameconn_create_loadgame(String playerName, ByteArrayPtr save, NativeSizeT size);
       
   193 	GameconnPtr flib_gameconn_create_campaign(String playerName, String seed, String script);
       
   194 
       
   195 	void flib_gameconn_destroy(GameconnPtr conn);
       
   196 	int flib_gameconn_getport(GameconnPtr conn);
       
   197 	void flib_gameconn_tick(GameconnPtr conn);
       
   198 
       
   199 	int flib_gameconn_send_enginemsg(GameconnPtr conn, ByteArrayPtr data, NativeSizeT len);
       
   200 	int flib_gameconn_send_textmsg(GameconnPtr conn, int msgtype, String msg);
       
   201 	int flib_gameconn_send_chatmsg(GameconnPtr conn, String playername, String msg);
       
   202 	int flib_gameconn_send_quit(GameconnPtr conn);
       
   203 	int flib_gameconn_send_cmd(GameconnPtr conn, String cmdString);
       
   204 
       
   205 	void flib_gameconn_onConnect(GameconnPtr conn, VoidCallback callback, Pointer context);
       
   206 	void flib_gameconn_onDisconnect(GameconnPtr conn, IntCallback callback, Pointer context);
       
   207 	void flib_gameconn_onErrorMessage(GameconnPtr conn, StrCallback callback, Pointer context);
       
   208 	void flib_gameconn_onChat(GameconnPtr conn, StrBoolCallback callback, Pointer context);
       
   209 	void flib_gameconn_onGameRecorded(GameconnPtr conn, BytesBoolCallback callback, Pointer context);
       
   210 	void flib_gameconn_onEngineMessage(GameconnPtr conn, BytesCallback callback, Pointer context);
       
   211 
       
   212 	// ipc/mapconn.h
       
   213 	MapconnPtr flib_mapconn_create(MapRecipePtr mapdesc);
       
   214 	void flib_mapconn_destroy(MapconnPtr conn);
       
   215 	int flib_mapconn_getport(MapconnPtr conn);
       
   216 	void flib_mapconn_onSuccess(MapconnPtr conn, MapimageCallback callback, Pointer context);
       
   217 	void flib_mapconn_onFailure(MapconnPtr conn, StrCallback callback, Pointer context);
       
   218 	void flib_mapconn_tick(MapconnPtr conn);
       
   219 
       
   220 	// model/schemelist.h
       
   221 	SchemelistPtr flib_schemelist_from_ini(String filename);
       
   222 	int flib_schemelist_to_ini(String filename, SchemelistPtr list);
       
   223 	void flib_schemelist_destroy(SchemelistPtr list);
       
   224 
       
   225 	// model/team.h
       
   226 	TeamPtr flib_team_from_ini(String filename);
       
   227 	int flib_team_to_ini(String filename, TeamPtr team);
       
   228 	void flib_team_destroy(TeamPtr team);
       
   229 
       
   230 	// model/weapon.h
       
   231 	WeaponsetListPtr flib_weaponsetlist_from_ini(String filename);
       
   232 	int flib_weaponsetlist_to_ini(String filename, WeaponsetListPtr weaponsets);
       
   233 	void flib_weaponsetlist_destroy(WeaponsetListPtr list);
       
   234 
       
   235 	// model/gamesetup.h
       
   236 	void flib_gamesetup_destroy(GameSetupPtr gamesetup);
       
   237 
       
   238 	// util/logging.h
       
   239     void flib_log_setLevel(int level);
       
   240     void flib_log_setCallback(LogCallback callback);