|
1 package org.hedgewars.hedgeroid.netplay; |
|
2 |
|
3 import org.hedgewars.hedgeroid.netplay.JnaFrontlib.RoomPtr; |
|
4 |
|
5 import android.util.Log; |
|
6 |
|
7 public class RoomList extends ObservableLinkedHashMap<String, Room> { |
|
8 private long nextId = 1; |
|
9 |
|
10 public void addRoomWithNewId(RoomPtr roomPtr) { |
|
11 JnaFrontlib.Room r = roomPtr.deref(); |
|
12 Log.d("RoomList", "Adding room "+r.name); |
|
13 long id = nextId++; |
|
14 put(r.name, new Room(r.name, r.map, r.scheme, r.weapons, r.owner, r.playerCount, r.teamCount, r.inProgress, id)); |
|
15 } |
|
16 |
|
17 public void updateRoom(String name, RoomPtr roomPtr) { |
|
18 Room oldEntry = getMap().get(name); |
|
19 if(oldEntry == null) { |
|
20 Log.e("RoomList", "Received update for unknown room: "+name); |
|
21 } else { |
|
22 JnaFrontlib.Room r = roomPtr.deref(); |
|
23 /* |
|
24 * TODO Room renames are handled as re-insertions which push the room |
|
25 * up to the top of the list again. Should maybe be revisited (sorting by ID is an option) |
|
26 */ |
|
27 if(!r.name.equals(oldEntry.name)) { |
|
28 remove(oldEntry.name); |
|
29 } |
|
30 put(r.name, new Room(r.name, r.map, r.scheme, r.weapons, r.owner, r.playerCount, r.teamCount, r.inProgress, oldEntry.id)); |
|
31 } |
|
32 } |
|
33 |
|
34 public static interface Observer extends ObservableLinkedHashMap.Observer<String, Room> { } |
|
35 } |