package com.hdl.sdk.socket;
|
|
import com.hdl.sdk.socket.client.IClient;
|
|
import java.net.DatagramSocket;
|
import java.net.InetSocketAddress;
|
import java.net.SocketException;
|
import java.util.concurrent.ConcurrentHashMap;
|
|
/**
|
* Created by Tong on 2021/10/19.
|
* 计划参考generic-pool、Commons Pool进行完善
|
*/
|
public class SocketPool {
|
|
private final ConcurrentHashMap<String, IClient> mPool;
|
private final ConcurrentHashMap<String, DatagramSocket> mUdpClientPool;
|
|
private SocketPool() {
|
mPool = new ConcurrentHashMap<>();
|
mUdpClientPool = new ConcurrentHashMap<>();
|
}
|
|
private static final SocketPool instance = new SocketPool();
|
|
public static SocketPool getInstance() {
|
return instance;
|
}
|
|
public void clear() {
|
mPool.clear();
|
mUdpClientPool.clear();
|
}
|
|
public synchronized DatagramSocket getUdpSocket(InetSocketAddress address) throws SocketException {
|
DatagramSocket socket;
|
final String key = address.toString();
|
if (mUdpClientPool.containsKey(key)) {
|
socket = mUdpClientPool.get(key);
|
if (socket != null && !socket.isClosed()) {
|
return socket;
|
} else {
|
socket = new DatagramSocket(address);
|
}
|
} else {
|
socket = new DatagramSocket(address);
|
}
|
mUdpClientPool.put(address.toString(), socket);
|
return socket;
|
}
|
}
|