project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomList.java
changeset 7342 0e29eec2df5c
child 7346 b0f67c5b4215
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomList.java	Thu Jul 19 18:58:18 2012 +0200
@@ -0,0 +1,35 @@
+package org.hedgewars.hedgeroid.netplay;
+
+import org.hedgewars.hedgeroid.netplay.JnaFrontlib.RoomPtr;
+
+import android.util.Log;
+
+public class RoomList extends ObservableLinkedHashMap<String, Room> {
+	private long nextId = 1;
+	
+	public void addRoomWithNewId(RoomPtr roomPtr) {
+		JnaFrontlib.Room r = roomPtr.deref();
+		Log.d("RoomList", "Adding room "+r.name);
+		long id = nextId++;
+		put(r.name, new Room(r.name, r.map, r.scheme, r.weapons, r.owner, r.playerCount, r.teamCount, r.inProgress, id));
+	}
+	
+	public void updateRoom(String name, RoomPtr roomPtr) {
+		Room oldEntry = getMap().get(name);
+		if(oldEntry == null) {
+			Log.e("RoomList", "Received update for unknown room: "+name);
+		} else {
+			JnaFrontlib.Room r = roomPtr.deref();
+			/*
+			 *  TODO Room renames are handled as re-insertions which push the room
+			 *  up to the top of the list again. Should maybe be revisited (sorting by ID is an option)
+			 */
+			if(!r.name.equals(oldEntry.name)) {
+				remove(oldEntry.name);
+			}
+			put(r.name, new Room(r.name, r.map, r.scheme, r.weapons, r.owner, r.playerCount, r.teamCount, r.inProgress, oldEntry.id));
+		}
+	}
+
+	public static interface Observer extends ObservableLinkedHashMap.Observer<String, Room> { }
+}