|
1 package org.hedgewars.hedgeroid.netplay; |
|
2 |
|
3 import java.util.Collections; |
|
4 import java.util.Iterator; |
|
5 import java.util.LinkedList; |
|
6 import java.util.List; |
|
7 |
|
8 public class PlayerList { |
|
9 private List<Player> list = new LinkedList<Player>(); |
|
10 private List<Observer> observers = new LinkedList<Observer>(); |
|
11 private long nextId = 1; |
|
12 |
|
13 public List<Player> getList() { |
|
14 return Collections.unmodifiableList(list); |
|
15 } |
|
16 |
|
17 public void observePlayerList(Observer plo) { |
|
18 observers.add(plo); |
|
19 } |
|
20 |
|
21 public void unobservePlayerList(Observer plo) { |
|
22 observers.remove(plo); |
|
23 } |
|
24 |
|
25 void addPlayer(String name) { |
|
26 Player p = new Player(name, nextId++); |
|
27 list.add(p); |
|
28 List<Player> unmodifiableList = Collections.unmodifiableList(list); |
|
29 for(Observer o : observers) { |
|
30 o.itemAdded(unmodifiableList, p); |
|
31 } |
|
32 } |
|
33 |
|
34 void removePlayer(String name) { |
|
35 for(Iterator<Player> iter = list.iterator(); iter.hasNext();) { |
|
36 Player p = iter.next(); |
|
37 if(name.equals(p.name)) { |
|
38 iter.remove(); |
|
39 List<Player> unmodifiableList = Collections.unmodifiableList(list); |
|
40 for(Observer o : observers) { |
|
41 o.itemDeleted(unmodifiableList, p); |
|
42 } |
|
43 } |
|
44 } |
|
45 } |
|
46 |
|
47 public static interface Observer { |
|
48 void itemAdded(List<Player> newList, Player added); |
|
49 void itemDeleted(List<Player> newList, Player deleted); |
|
50 } |
|
51 } |