package org.threadly.litesockets.tcp;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import org.threadly.litesockets.Client;
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.TCPClient;
import org.threadly.litesockets.TCPServer;
public class FakeTCPServerClient implements Reader, CloseListener, ClientAcceptor, ServerCloseListener{
private ConcurrentHashMap<TCPClient, MergedByteBuffers> map = new ConcurrentHashMap<TCPClient, MergedByteBuffers>();
private ArrayList<TCPClient> clients = new ArrayList<TCPClient>();
private ArrayList<TCPServer> servers = new ArrayList<TCPServer>();
public FakeTCPServerClient() {
}
public int getNumberOfClients() {
synchronized(clients) {
return clients.size();
}
}
public TCPClient getClientAt(int inx) {
synchronized(clients) {
return clients.get(inx);
}
}
public List<TCPClient> getAllClients() {
synchronized(clients) {
return new ArrayList<TCPClient>(clients);
}
}
public MergedByteBuffers getClientsBuffer(TCPClient client) {
return map.get(client);
}
public List<TCPServer> getAllServers() {
synchronized(servers) {
return new ArrayList<TCPServer>(servers);
}
}
@Override
public void onRead(Client client) {
MergedByteBuffers mbb = client.getRead();
System.out.println("GotData:"+mbb.remaining()+":"+client);
map.get(client).add(mbb);
}
@Override
public void onClose(Client client) {
System.out.println("Closed!");
map.remove((TCPClient)client);
synchronized(clients) {
clients.remove((TCPClient) client);
}
}
@Override
public void onClose(Server server) {
System.out.println("Server Closed!!");
synchronized(servers) {
servers.remove(server);
}
}
@Override
public void accept(Client sc) {
addTCPClient(sc);
}
public void addTCPServer(Server server) {
synchronized(servers) {
servers.add((TCPServer)server);
}
server.addCloseListener(this);
server.setClientAcceptor(this);
server.start();
}
public void addTCPClient(Client client) {
TCPClient tclient = (TCPClient)client;
map.put(tclient, new ReuseableMergedByteBuffers());
synchronized(clients) {
clients.add(tclient);
}
System.out.println("Accepted new Client!:"+map.size()+":"+client+":");
client.setReader(this);
client.addCloseListener(this);
client.connect();
// if(client instanceof SSLProcessor) {
// SSLProcessor sslc = (SSLProcessor)client;
// sslc.doHandShake();
// sslc.getTCPClient().connect();
// } else {
//
// }
}
}