project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/PlayerList.java
changeset 7332 3f2e130f9715
child 7342 0e29eec2df5c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project_files/Android-build/SDL-android-project/src/org/hedgewars/hedgeroid/netplay/PlayerList.java	Tue Jul 17 22:27:16 2012 +0200
@@ -0,0 +1,51 @@
+package org.hedgewars.hedgeroid.netplay;
+
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+public class PlayerList {
+	private List<Player> list = new LinkedList<Player>();
+	private List<Observer> observers = new LinkedList<Observer>();
+	private long nextId = 1;
+	
+	public List<Player> getList() {
+		return Collections.unmodifiableList(list);
+	}
+	
+	public void observePlayerList(Observer plo) {
+		observers.add(plo);
+	}
+	
+	public void unobservePlayerList(Observer plo) {
+		observers.remove(plo);
+	}
+	
+	void addPlayer(String name) {
+		Player p = new Player(name, nextId++);
+		list.add(p);
+		List<Player> unmodifiableList = Collections.unmodifiableList(list);
+		for(Observer o : observers) {
+			o.itemAdded(unmodifiableList, p);
+		}
+	}
+	
+	void removePlayer(String name) {
+		for(Iterator<Player> iter = list.iterator(); iter.hasNext();) {
+			Player p = iter.next();
+			if(name.equals(p.name)) {
+				iter.remove();
+				List<Player> unmodifiableList = Collections.unmodifiableList(list);
+				for(Observer o : observers) {
+					o.itemDeleted(unmodifiableList, p);
+				}
+			}
+		}
+	}
+
+	public static interface Observer {
+		void itemAdded(List<Player> newList, Player added);
+		void itemDeleted(List<Player> newList, Player deleted);
+	}
+}