project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/Netconn.java
changeset 7342 0e29eec2df5c
parent 7332 3f2e130f9715
child 7349 12fdfd2038d4
--- 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;