diff -r 62043f5f7c67 -r 0e29eec2df5c 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 { + 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 { } +}