project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/RoomList.java
author Medo <smaxein@googlemail.com>
Thu, 19 Jul 2012 22:55:36 +0200
changeset 7346 b0f67c5b4215
parent 7342 0e29eec2df5c
child 7352 641f11cdd319
permissions -rw-r--r--
Hedgeroid: Lobby activity improvements

package org.hedgewars.hedgeroid.netplay;

import org.hedgewars.hedgeroid.netplay.JnaFrontlib.RoomPtr;

import android.util.Log;

public class RoomList extends ObservableLinkedHashMap<String, Room> {
	private long nextId = 1;
	
	public void addRoomWithNewId(RoomPtr roomPtr) {
		JnaFrontlib.Room r = roomPtr.deref();
		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<String, Room> { }
}