You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
3.3 KiB
85 lines
3.3 KiB
package com.fr.design.env; |
|
|
|
import com.fanruan.workplace.http.HttpConstants; |
|
import com.fanruan.workplace.http.RepositoryManager; |
|
import com.fr.log.FineLoggerFactory; |
|
import com.fr.stable.StringUtils; |
|
import com.fr.workspace.server.repository.authority.RemoteAuthorityRepository; |
|
import com.fr.workspace.server.repository.compatible.register.CompatibleRegister; |
|
import com.fr.workspace.server.repository.connect.FineWorkspaceHttpClient; |
|
import com.fr.decision.webservice.bean.authentication.LoginRequestInfoBean; |
|
import com.fr.decision.webservice.bean.authentication.LoginResponseInfoBean; |
|
import com.fr.workspace.connect.WorkspaceClient; |
|
import com.fr.workspace.connect.WorkspaceConnection; |
|
import com.fr.workspace.connect.WorkspaceConnectionInfo; |
|
import com.fr.workspace.connect.WorkspaceConnector; |
|
|
|
import java.net.InetAddress; |
|
import java.util.UUID; |
|
|
|
/** |
|
* 远程环境连接器 |
|
* |
|
* @author Destiny.Lin |
|
* @since 11.0 |
|
* Created on 2024/5/24 |
|
*/ |
|
public class HttpWorkspaceConnector implements WorkspaceConnector { |
|
private static final HttpWorkspaceConnector INSTANCE = new HttpWorkspaceConnector(); |
|
|
|
/** |
|
* 获取单例 |
|
*/ |
|
public static HttpWorkspaceConnector getInstance() { |
|
|
|
return INSTANCE; |
|
} |
|
|
|
@Override |
|
public boolean testConnection(WorkspaceConnectionInfo connectionInfo) throws Exception { |
|
FineWorkspaceHttpClient client = FineWorkspaceHttpClient.create("Http-Client", connectionInfo); |
|
LoginResponseInfoBean bean; |
|
try { |
|
bean = RemoteAuthorityRepository.getInstance().login(createLoginBean(connectionInfo)); |
|
} finally { |
|
client.closePool(); |
|
} |
|
|
|
return StringUtils.isNotEmpty(bean.getAccessToken()); |
|
} |
|
|
|
@Override |
|
public WorkspaceClient connect(WorkspaceConnectionInfo connectionInfo) throws Exception { |
|
FineWorkspaceHttpClient client = FineWorkspaceHttpClient.create("Http-Client", connectionInfo); |
|
try { |
|
LoginResponseInfoBean bean = RemoteAuthorityRepository.getInstance().login(createLoginBean(connectionInfo)); |
|
// 服务器如果没返回token,肯定是出问题了,直接抛出异常 |
|
if (StringUtils.isEmpty(bean.getAccessToken())) { |
|
throw new RuntimeException("Empty token, try connect again and check server"); |
|
} |
|
FineLoggerFactory.getLogger().info("[connector] infos:{}", bean.getAccessToken()); |
|
WorkspaceConnection connection = new WorkspaceConnection( |
|
UUID.randomUUID().toString(), |
|
connectionInfo.getUserName(), |
|
HttpConstants.AUTHORIZATION_PREFIX + bean.getAccessToken(), |
|
InetAddress.getLocalHost().getHostAddress()); |
|
client.updateConnection(connection); |
|
client.startHeartBeat(); |
|
} catch (Exception e) { |
|
client.closePool(); |
|
throw e; |
|
} |
|
CompatibleRegister.registerCompatibleEnv(); |
|
RepositoryManager.getInstance().clearLastPool(); |
|
return client; |
|
} |
|
|
|
private LoginRequestInfoBean createLoginBean(WorkspaceConnectionInfo connectionInfo) { |
|
LoginRequestInfoBean bean = new LoginRequestInfoBean(); |
|
bean.setUsername(connectionInfo.getUserName()); |
|
bean.setPassword(connectionInfo.getPassword()); |
|
bean.setEncrypted(false); |
|
bean.setValidity(-2); |
|
return bean; |
|
} |
|
} |