package org.threadly.litesockets.udp;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.threadly.litesockets.Client;
import org.threadly.litesockets.UDPClient;
import org.threadly.litesockets.UDPServer;
import org.threadly.litesockets.Client.CloseListener;
import org.threadly.litesockets.Client.Reader;
import org.threadly.litesockets.Server;
import org.threadly.litesockets.Server.ClientAcceptor;
import org.threadly.litesockets.Server.ServerCloseListener;
import org.threadly.litesockets.buffers.MergedByteBuffers;
import org.threadly.litesockets.buffers.ReuseableMergedByteBuffers;
import org.threadly.litesockets.SocketExecuter;
public class FakeUDPServerClient implements CloseListener, Reader, ClientAcceptor, ServerCloseListener {
SocketExecuter SE;
Set<UDPServer> servers = new HashSet<UDPServer>();
ConcurrentHashMap<UDPClient, MergedByteBuffers> clients = new ConcurrentHashMap<UDPClient, MergedByteBuffers>();
List<UDPClient> clientList = new ArrayList<UDPClient>();
public FakeUDPServerClient(SocketExecuter se) {
SE = se;
}
public void AddUDPServer(UDPServer userver) {
servers.add(userver);
userver.setClientAcceptor(this);
userver.addCloseListener(this);
userver.start();
}
@Override
public void accept(Client c) {
UDPClient uc = (UDPClient) c;
System.out.println("New Client:"+this);
uc.setReader(this);
uc.addCloseListener(this);
clients.put(uc, new ReuseableMergedByteBuffers());
clientList.add(uc);
}
@Override
public void onRead(Client client) {
MergedByteBuffers bb = client.getRead();
System.out.println("Got Read:"+bb);
MergedByteBuffers mbb = clients.get(client);
if(mbb != null) {
mbb.add(bb);
}
System.out.println("Got Read:"+mbb.remaining());
}
@Override
public void onClose(Client client) {
System.out.println("Closing:"+client);
clients.remove(client);
}
@Override
public void onClose(Server server) {
System.out.println("Close Server:"+server);
servers.remove(server);
}
}