project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomList.java
changeset 7342 0e29eec2df5c
child 7346 b0f67c5b4215
equal deleted inserted replaced
7340:62043f5f7c67 7342:0e29eec2df5c
       
     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 }