diff -r 62043f5f7c67 -r 0e29eec2df5c project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/Netconn.java --- a/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/Netconn.java Thu Jul 19 18:31:58 2012 +0200 +++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/Netconn.java Thu Jul 19 18:58:18 2012 +0200 @@ -7,8 +7,14 @@ import org.hedgewars.hedgeroid.netplay.JnaFrontlib.IntStrCallback; import org.hedgewars.hedgeroid.netplay.JnaFrontlib.MetaschemePtr; import org.hedgewars.hedgeroid.netplay.JnaFrontlib.NetconnPtr; +import org.hedgewars.hedgeroid.netplay.JnaFrontlib.RoomArrayPtr; +import org.hedgewars.hedgeroid.netplay.JnaFrontlib.RoomCallback; +import org.hedgewars.hedgeroid.netplay.JnaFrontlib.RoomListCallback; +import org.hedgewars.hedgeroid.netplay.JnaFrontlib.RoomPtr; import org.hedgewars.hedgeroid.netplay.JnaFrontlib.StrCallback; +import org.hedgewars.hedgeroid.netplay.JnaFrontlib.StrRoomCallback; import org.hedgewars.hedgeroid.netplay.JnaFrontlib.StrStrCallback; +import org.hedgewars.hedgeroid.netplay.JnaFrontlib.VoidCallback; import com.sun.jna.Pointer; @@ -29,19 +35,20 @@ private String playerName; public final PlayerList playerList = new PlayerList(); + public final RoomList roomList = new RoomList(); public final MessageLog lobbyLog; public final MessageLog roomLog; private StrCallback lobbyJoinCb = new StrCallback() { public void callback(Pointer context, String arg1) { - playerList.addPlayer(arg1); + playerList.addPlayerWithNewId(arg1); lobbyLog.appendPlayerJoin(arg1); } }; private StrStrCallback lobbyLeaveCb = new StrStrCallback() { public void callback(Pointer context, String name, String msg) { - playerList.removePlayer(name); + playerList.remove(name); lobbyLog.appendPlayerLeave(name, msg); } }; @@ -58,6 +65,40 @@ } }; + private RoomCallback roomAddCb = new RoomCallback() { + public void callback(Pointer context, RoomPtr roomPtr) { + roomList.addRoomWithNewId(roomPtr); + } + }; + + private StrRoomCallback roomUpdateCb = new StrRoomCallback() { + public void callback(Pointer context, String name, RoomPtr roomPtr) { + roomList.updateRoom(name, roomPtr); + } + }; + + private StrCallback roomDeleteCb = new StrCallback() { + public void callback(Pointer context, String name) { + roomList.remove(name); + } + }; + + private VoidCallback connectedCb = new VoidCallback() { + public void callback(Pointer context) { + // TODO I guess more needs to happen here... + FLIB.flib_netconn_send_request_roomlist(conn); + } + }; + + private RoomListCallback roomlistCb = new RoomListCallback() { + public void callback(Pointer context, RoomArrayPtr arg1, int count) { + roomList.clear(); + for(RoomPtr roomPtr : arg1.getRooms(count)) { + roomList.addRoomWithNewId(roomPtr); + } + } + }; + /** * Connect to the official Hedgewars server. * @@ -96,6 +137,11 @@ FLIB.flib_netconn_onLobbyLeave(conn, lobbyLeaveCb, null); FLIB.flib_netconn_onChat(conn, chatCb, null); FLIB.flib_netconn_onMessage(conn, messageCb, null); + FLIB.flib_netconn_onRoomAdd(conn, roomAddCb, null); + FLIB.flib_netconn_onRoomUpdate(conn, roomUpdateCb, null); + FLIB.flib_netconn_onRoomDelete(conn, roomDeleteCb, null); + FLIB.flib_netconn_onConnected(conn, connectedCb, null); + FLIB.flib_netconn_onRoomlist(conn, roomlistCb, null); } finally { FLIB.flib_metascheme_release(meta); } @@ -133,6 +179,7 @@ public void sendNick(String nick) { FLIB.flib_netconn_send_nick(conn, nick); } public void sendPassword(String password) { FLIB.flib_netconn_send_password(conn, password); } public void sendQuit(String message) { FLIB.flib_netconn_send_quit(conn, message); } + public void sendRoomlistRequest() { FLIB.flib_netconn_send_request_roomlist(conn); } public boolean isConnected() { return conn != null;