package server; import java.io.IOException; import java.net.Socket; import java.util.HashMap; import java.util.LinkedList; import java.util.Queue; import java.util.Vector; import java.util.Map.Entry; import slimpleslickgame.Creep; import util.Logger; public class Statebox { private Queue<byte[]> messages; private HashMap<Integer, Socket> clients; public Statebox() { this.messages = new LinkedList<byte[]>(); this.clients = new HashMap<Integer, Socket>(); } public synchronized int getCurrentClients() { return clients.size(); } public synchronized byte[] readMessage() { while (messages.isEmpty()) { try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } byte[] temp = this.messages.poll(); notifyAll(); return temp; } public synchronized void writeMessage(byte[] msg) { messages.offer(msg); notifyAll(); } public synchronized void addClient(Socket s) { clients.put(new Integer(clients.size() + 1), s); } public synchronized Socket[] getClientSockets(int originId) { Socket[] ss = new Socket[clients.size() - 1]; HashMap<Integer, Socket> returnMap = new HashMap<Integer, Socket>(); for (Entry<Integer, Socket> socket : clients.entrySet()) { if (originId != socket.getKey()) { returnMap.put(socket.getKey(), socket.getValue()); } } return returnMap.values().toArray(ss); } public synchronized boolean removeClientSocket(Socket s) { for (Entry<Integer, Socket> socket : clients.entrySet()) { if (socket.equals(s)) { return clients.remove(socket.getKey()) != null; } } return false; } }