project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomList.java
--- /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> { }
+}