project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomList.java
changeset 7476 2fb781bbdd51
parent 7461 38acbfdb484f
equal deleted inserted replaced
7473:45b9f25ff611 7476:2fb781bbdd51
     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 }