com.alibaba.nacos.naming.push.ClientInfo Maven / Gradle / Ivy
/*
* Copyright 1999-2021 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.nacos.naming.push;
import com.alibaba.nacos.common.utils.StringUtils;
import com.alibaba.nacos.naming.misc.UtilsAndCommons;
import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.core.util.VersionUtil;
/**
* Client info.
*
* @author nacos
*/
public class ClientInfo {
public Version version;
public ClientType type;
public ClientInfo(String userAgent) {
String versionStr = StringUtils.isEmpty(userAgent) ? StringUtils.EMPTY : userAgent;
this.type = ClientType.getType(versionStr);
if (versionStr.startsWith(ClientTypeDescription.CPP_CLIENT)) {
this.type = ClientType.C;
}
this.version = parseVersion(versionStr);
}
private Version parseVersion(String versionStr) {
if (StringUtils.isBlank(versionStr) || ClientType.UNKNOWN.equals(this.type)) {
return Version.unknownVersion();
}
int versionStartIndex = versionStr.indexOf(":v");
if (versionStartIndex < 0) {
return Version.unknownVersion();
}
return VersionUtil.parseVersion(versionStr.substring(versionStartIndex + 2), null, null);
}
public enum ClientType {
/**
* Go client type.
*/
GO(ClientTypeDescription.GO_CLIENT),
/**
* Java client type.
*/
JAVA(ClientTypeDescription.JAVA_CLIENT),
/**
* C client type.
*/
C(ClientTypeDescription.C_CLIENT),
/**
* CSharp client type.
*/
CSHARP(ClientTypeDescription.CSHARP_CLIENT),
/**
* php client type.
*/
PHP(ClientTypeDescription.PHP_CLIENT),
/**
* dns-f client type.
*/
DNS(ClientTypeDescription.DNSF_CLIENT),
/**
* nginx client type.
*/
TENGINE(ClientTypeDescription.NGINX_CLIENT),
/**
* sdk client type.
*/
JAVA_SDK(ClientTypeDescription.SDK_CLIENT),
/**
* Server notify each other.
*/
NACOS_SERVER(UtilsAndCommons.NACOS_SERVER_HEADER),
/**
* Unknown client type.
*/
UNKNOWN(UtilsAndCommons.UNKNOWN_SITE);
private final String clientTypeDescription;
ClientType(String clientTypeDescription) {
this.clientTypeDescription = clientTypeDescription;
}
public String getClientTypeDescription() {
return clientTypeDescription;
}
public static ClientType getType(String userAgent) {
for (ClientType each : ClientType.values()) {
if (userAgent.startsWith(each.getClientTypeDescription())) {
return each;
}
}
return UNKNOWN;
}
}
public static class ClientTypeDescription {
public static final String JAVA_CLIENT = "Nacos-Java-Client";
public static final String DNSF_CLIENT = "Nacos-DNS";
public static final String C_CLIENT = "Nacos-C-Client";
public static final String SDK_CLIENT = "Nacos-SDK-Java";
public static final String NGINX_CLIENT = "unit-nginx";
public static final String CPP_CLIENT = "vip-client4cpp";
public static final String GO_CLIENT = "Nacos-Go-Client";
public static final String PHP_CLIENT = "Nacos-Php-Client";
public static final String CSHARP_CLIENT = "Nacos-CSharp-Client";
}
}