1 package org.hedgewars.hedgeroid.netplay; |
1 package org.hedgewars.hedgeroid.netplay; |
2 |
2 |
3 import java.util.Collections; |
|
4 import java.util.Map; |
3 import java.util.Map; |
5 import java.util.TreeMap; |
4 import java.util.TreeMap; |
6 |
5 |
7 import android.database.DataSetObservable; |
6 import org.hedgewars.hedgeroid.Datastructures.RoomlistRoom; |
8 import android.util.Log; |
7 |
9 import android.util.Pair; |
8 import android.util.Pair; |
10 |
9 |
11 public class Roomlist extends DataSetObservable { |
10 public class Roomlist extends ObservableTreeMap<String, Pair<RoomlistRoom, Long>> { |
12 private long nextId = 1; |
11 private long nextId = 1; |
13 private Map<String, Pair<Room, Long>> rooms = new TreeMap<String, Pair<Room, Long>>(); |
|
14 |
12 |
15 public void updateList(Room[] newRooms) { |
13 public void updateList(RoomlistRoom[] newRooms) { |
16 Map<String, Pair<Room, Long>> newMap = new TreeMap<String, Pair<Room, Long>>(); |
14 Map<String, Pair<RoomlistRoom, Long>> newMap = new TreeMap<String, Pair<RoomlistRoom, Long>>(); |
17 for(Room room : newRooms) { |
15 for(RoomlistRoom room : newRooms) { |
18 Pair<Room, Long> oldEntry = rooms.get(room.name); |
16 Pair<RoomlistRoom, Long> oldEntry = get(room.name); |
19 if(oldEntry == null) { |
17 if(oldEntry == null) { |
20 newMap.put(room.name, Pair.create(room, nextId++)); |
18 newMap.put(room.name, Pair.create(room, nextId++)); |
21 } else { |
19 } else { |
22 newMap.put(room.name, Pair.create(room, oldEntry.second)); |
20 newMap.put(room.name, Pair.create(room, oldEntry.second)); |
23 } |
21 } |
24 } |
22 } |
25 rooms = newMap; |
23 replaceContent(newMap); |
26 notifyChanged(); |
|
27 } |
24 } |
28 |
25 |
29 public void addRoomWithNewId(Room room) { |
26 public void addRoomWithNewId(RoomlistRoom room) { |
30 rooms.put(room.name, Pair.create(room, nextId++)); |
27 put(room.name, Pair.create(room, nextId++)); |
31 notifyChanged(); |
|
32 } |
28 } |
33 |
29 |
34 public void updateRoom(String name, Room room) { |
30 public void updateRoom(String name, RoomlistRoom room) { |
35 Pair<Room, Long> oldEntry = rooms.get(name); |
31 Pair<RoomlistRoom, Long> oldEntry = get(name); |
36 if(oldEntry == null) { |
32 if(oldEntry == null) { |
37 Log.e("RoomList", "Received update for unknown room: "+name); |
33 addRoomWithNewId(room); |
38 rooms.put(room.name, Pair.create(room, nextId++)); |
|
39 } else { |
34 } else { |
40 if(!name.equals(room.name)) { |
35 remove(name); |
41 rooms.remove(name); |
36 put(room.name, Pair.create(room, oldEntry.second)); |
42 } |
|
43 rooms.put(room.name, Pair.create(room, oldEntry.second)); |
|
44 } |
|
45 notifyChanged(); |
|
46 } |
|
47 |
|
48 public void removeRoom(String name) { |
|
49 if(rooms.remove(name) != null) { |
|
50 notifyChanged(); |
|
51 } |
37 } |
52 } |
38 } |
53 |
|
54 public void clear() { |
|
55 if(!rooms.isEmpty()) { |
|
56 rooms.clear(); |
|
57 notifyChanged(); |
|
58 } |
|
59 } |
|
60 |
|
61 public Map<String, Pair<Room, Long>> getMap() { |
|
62 return Collections.unmodifiableMap(rooms); |
|
63 } |
|
64 } |
39 } |