forked from KNEMC/KLALB
KLALB3.2
This commit is contained in:
@@ -10,6 +10,8 @@ import java.net.UnknownHostException;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.LinkedBlockingQueue;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import org.kne.cloud.network.MultipurposeSocketAddress;
|
||||
|
||||
@@ -135,8 +137,28 @@ public class KLALBUtils {
|
||||
Color col=new Color( r,g,0);
|
||||
return col;
|
||||
}
|
||||
public static Color getColorByLoadPercentagex(float f) {
|
||||
int r=0;
|
||||
int g=200;
|
||||
if(f<50f) {
|
||||
r+=f/50f*200f;
|
||||
}else {
|
||||
r=200;
|
||||
g-=(f-50f)/50f*200f;
|
||||
}
|
||||
if(r>200)
|
||||
r=200;
|
||||
if(r<0)
|
||||
r=0;
|
||||
if(g>200)
|
||||
g=200;
|
||||
if(g<0)
|
||||
g=0;
|
||||
Color col=new Color( r,g,0);
|
||||
return col;
|
||||
}
|
||||
|
||||
public static KLALBPacketLink createKLALBPacketLink(MultipurposeSocketAddress bindAddress, MultipurposeSocketAddress targetAddress)
|
||||
public static KLALBPacketLink createKLALBPacketLink(MultipurposeSocketAddress bindAddress, MultipurposeSocketAddress targetAddress,boolean buffered)
|
||||
throws IOException {
|
||||
if (targetAddress.isStream()) {
|
||||
if (targetAddress.supportNIO()) {
|
||||
@@ -164,14 +186,23 @@ public class KLALBUtils {
|
||||
}
|
||||
}
|
||||
public static KLALBPacketLink createKLALBPacketLink(MultipurposeSocketAddress bindAddress,
|
||||
MultipurposeSocketAddress targetAddress, int timeout) throws UnknownHostException, IOException {
|
||||
MultipurposeSocketAddress targetAddress,boolean buffered, int timeout) throws UnknownHostException, IOException {
|
||||
if (targetAddress.isStream()) {
|
||||
if (targetAddress.supportNIO()) {
|
||||
if (bindAddress != null) {
|
||||
if(buffered) {
|
||||
return new StreamChannelKLALBPacketLink(targetAddress
|
||||
.connectSocketChannel(InetAddress.getByName(bindAddress.getHost()), bindAddress.getPort(),timeout));
|
||||
}else {
|
||||
return new StreamChannelKLALBPacketLink(targetAddress
|
||||
.connectSocketChannel(InetAddress.getByName(bindAddress.getHost()), bindAddress.getPort(),timeout));
|
||||
}
|
||||
} else {
|
||||
if(buffered) {
|
||||
return new StreamChannelKLALBPacketLink(targetAddress.connectSocketChannel(timeout));
|
||||
}else {
|
||||
return new StreamChannelKLALBPacketLink(targetAddress.connectSocketChannel(timeout));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (bindAddress != null) {
|
||||
@@ -190,7 +221,116 @@ public class KLALBUtils {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static final String IPv6Reg = "([\\da-fA-F]{1,4}:){7}[\\da-fA-F]{1,4}$"
|
||||
+ "|^:((:[\\da-fA-F]{1,4}){1,6}|:)$"
|
||||
+ "|^[\\da-fA-F]{1,4}:((:[\\da-fA-F]{1,4}){1,5}|:)$"
|
||||
+ "|^([\\da-fA-F]{1,4}:){2}((:[\\da-fA-F]{1,4}){1,4}|:)$"
|
||||
+ "|^([\\da-fA-F]{1,4}:){3}((:[\\da-fA-F]{1,4}){1,3}|:)$"
|
||||
+ "|^([\\da-fA-F]{1,4}:){4}((:[\\da-fA-F]{1,4}){1,2}|:)$"
|
||||
+ "|^([\\da-fA-F]{1,4}:){5}:([\\da-fA-F]{1,4})?$"
|
||||
+ "|^([\\da-fA-F]{1,4}:){6}:"; // IPv6地址的格式
|
||||
|
||||
/**
|
||||
* 将一个IPv6地址转为全写格式,全写中的前导0省略
|
||||
* 例:将1ade:03da:0::转为1ade:3da:0:0:0:0:0:0
|
||||
*
|
||||
* @param IPv6Str
|
||||
* @return fullIPv6
|
||||
*/
|
||||
public static String parseFullIPv6(String IPv6Str) {
|
||||
// 判断IPv6地址的格式是否正确
|
||||
if (!IPv6Str.matches(IPv6Reg)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
String[] arr = new String[]{"0", "0", "0", "0", "0", "0", "0", "0"};
|
||||
|
||||
// 将IPv6地址用::分开
|
||||
// 如果IPv6地址为::,tempArr.length==0
|
||||
// 如果不包含::或以::结尾,tempArr.length==1
|
||||
// 如果以::开头或::在中间,tempArr.length==2
|
||||
String[] tempArr = IPv6Str.split("::");
|
||||
|
||||
// tempArr[0]用:分开,填充到arr前半部分
|
||||
if (tempArr.length > 0) {
|
||||
// new String[0]为空数组,因为"".split(":")为{""},如果tempArr[0]=="",此时数组包含一个元素
|
||||
String[] tempArr0 = tempArr[0].isEmpty() ? new String[0] : tempArr[0].split(":");
|
||||
for (int i = 0; i < tempArr0.length; i++) {
|
||||
// 如果是纯数字,用parseInt去除前导0,如果包含字母,用正则去除前导0
|
||||
arr[i] = tempArr0[i].matches("\\d+")
|
||||
? (Integer.parseInt(tempArr0[i]) + "")
|
||||
: tempArr0[i].replaceAll("^(0+)", "");
|
||||
}
|
||||
}
|
||||
|
||||
// tempArr[1]用:分开,填充到arr后半部分
|
||||
if (tempArr.length > 1) {
|
||||
String[] tempArr1 = tempArr[1].isEmpty() ? new String[0] : tempArr[1].split(":");
|
||||
for (int i = 0; i < tempArr1.length; i++) {
|
||||
arr[i + arr.length - tempArr1.length] = tempArr1[i].matches("\\d+")
|
||||
? (Integer.parseInt(tempArr1[i]) + "")
|
||||
: tempArr1[i].replaceAll("^(0+)", "");
|
||||
}
|
||||
}
|
||||
|
||||
return join(arr, ":");
|
||||
}
|
||||
|
||||
private static String join(String[] arr, String string) {
|
||||
StringBuilder sb=new StringBuilder();
|
||||
for (int i = 0; i < arr.length; i++) {
|
||||
sb.append(arr[i]);
|
||||
if(i+1<arr.length) {
|
||||
sb.append(string);
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
/**
|
||||
* 将一个IPv6地址转为简写格式
|
||||
* 例:将1ade:03da:0::转为1ade:3da::
|
||||
*
|
||||
* @param IPv6Str
|
||||
* @return AbbrIPv6
|
||||
*/
|
||||
public static String parseAbbrIPv6(String IPv6Str) {
|
||||
// 将一个IPv6地址转为全写格式,全写中的前导0省略
|
||||
String fullIPv6 = parseFullIPv6(IPv6Str);
|
||||
if (fullIPv6.isEmpty()) { // 如果IPv6地址的格式不正确
|
||||
return "";
|
||||
}
|
||||
|
||||
// 将1ade:3da:0:0:0:0:0:99转为{"-","-","0","0","0","0","0","-"}
|
||||
String[] arr = fullIPv6.split(":");
|
||||
for (int i = 0, len = arr.length; i < len; i++) {
|
||||
if (!"0".equals(arr[i])) {
|
||||
arr[i] = "-";
|
||||
}
|
||||
}
|
||||
|
||||
// 找到最长的连续的0
|
||||
Pattern pattern = Pattern.compile("0{2,}");
|
||||
Matcher matcher = pattern.matcher(join(arr, ""));
|
||||
String maxStr = "";
|
||||
int start = -1;
|
||||
int end = -1;
|
||||
while (matcher.find()) {
|
||||
if (maxStr.length() < matcher.group().length()) {
|
||||
maxStr = matcher.group();
|
||||
start = matcher.start();
|
||||
end = matcher.end();
|
||||
}
|
||||
}
|
||||
|
||||
// 合并
|
||||
arr = fullIPv6.split(":");
|
||||
if (maxStr.length() > 0) {
|
||||
for (int i = start; i < end; i++) {
|
||||
arr[i] = ":";
|
||||
}
|
||||
}
|
||||
return join(arr, ":").replaceAll(":{2,}", "::");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user