Update:修改为工厂模式创建实例
This commit is contained in:
parent
53622bada8
commit
99dc6a5b10
147
src/main/java/cn/montaro/aria2/Aria2Client.java
Normal file
147
src/main/java/cn/montaro/aria2/Aria2Client.java
Normal file
@ -0,0 +1,147 @@
|
|||||||
|
package cn.montaro.aria2;
|
||||||
|
|
||||||
|
import cn.montaro.aria2.annotation.Aria2Method;
|
||||||
|
import cn.montaro.aria2.constants.Aria2MethodName;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
* Aria2 Client Api
|
||||||
|
*
|
||||||
|
* @author ZhangJiaYu
|
||||||
|
* @date 2021/12/14
|
||||||
|
*/
|
||||||
|
public interface Aria2Client {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加文件下载
|
||||||
|
*
|
||||||
|
* @param uris
|
||||||
|
* @param option
|
||||||
|
* @param position
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@Aria2Method(Aria2MethodName.ADD_URI)
|
||||||
|
String addUri(List<String> uris, Map<String, String> option, Integer position);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.ADD_TORRENT)
|
||||||
|
String addTorrent(List<String> uris, Map<String, String> option, Integer position);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.ADD_METALINK)
|
||||||
|
String addMetalink(List<String> uris, Map<String, String> option, Integer position);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 移除一个下载任务,如果任务正在进行中,任务会先停止
|
||||||
|
*
|
||||||
|
* @param gid GID
|
||||||
|
* @return 操作成功返回GID
|
||||||
|
*/
|
||||||
|
@Aria2Method(Aria2MethodName.REMOVE)
|
||||||
|
String remove(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.FORCE_REMOVE)
|
||||||
|
String forceRemove(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.PAUSE)
|
||||||
|
String pause(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.PAUSE_ALL)
|
||||||
|
String pauseAll();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.FORCE_PAUSE)
|
||||||
|
String forcePause(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.FORCE_PAUSE_ALL)
|
||||||
|
String forcePauseAll();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.UNPAUSE)
|
||||||
|
String unpause(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.UNPAUSE_ALL)
|
||||||
|
String unpauseAll();
|
||||||
|
|
||||||
|
// TODO: define return type
|
||||||
|
@Aria2Method(Aria2MethodName.TELL_STATUS)
|
||||||
|
String tellStatus(String gid, String... keys);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.GET_URIS)
|
||||||
|
String getUris(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.GET_FILES)
|
||||||
|
String getFiles(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.GET_PEERS)
|
||||||
|
String getPeers(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.GET_SERVERS)
|
||||||
|
String getServers(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.TELL_ACTIVE)
|
||||||
|
String tellActive(List<String> keys);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.TELL_WAITING)
|
||||||
|
String tellWaiting(int offset, int num, String... keys);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.TELL_STOPPED)
|
||||||
|
String tellStopped(int offset, int num, String... keys);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.CHANGE_POSITION)
|
||||||
|
Integer changePosition(String gid, Integer pos, String how);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.CHANGE_URI)
|
||||||
|
String changeUri(String gid, int fileIndex, List<String> delUris, List<String> addUris);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.GET_OPTION)
|
||||||
|
Map<String, String> getOption(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.CHANGE_OPTION)
|
||||||
|
String changeOption(String gid, Map<String, String> options);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.GET_GLOBAL_OPTION)
|
||||||
|
Map<String, String> getGlobalOption();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.CHANGE_GLOBAL_OPTION)
|
||||||
|
String changeGlobalOption(Map<String, String> options);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.GET_GLOBAL_STAT)
|
||||||
|
String getGlobalStat();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.PURGE_DOWNLOAD_RESULT)
|
||||||
|
String purgeDownloadResult();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.REMOVE_DOWNLOAD_RESULT)
|
||||||
|
String removeDownloadResult(String gid);
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.GET_VERSION)
|
||||||
|
String getVersion();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.GET_SESSION_INFO)
|
||||||
|
String getSessionInfo();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.SHUTDOWN)
|
||||||
|
String shutdown();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.FORCE_SHUTDOWN)
|
||||||
|
String forceShutdown();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.SAVE_SESSION)
|
||||||
|
String saveSession();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.MULTICALL)
|
||||||
|
String multicall(List<Map<String, List<Object>>> methods);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询支持的方法列表
|
||||||
|
*
|
||||||
|
* @return 方法列表
|
||||||
|
*/
|
||||||
|
@Aria2Method(Aria2MethodName.LIST_METHODS)
|
||||||
|
List<String> listMethods();
|
||||||
|
|
||||||
|
@Aria2Method(Aria2MethodName.LIST_NOTIFICATIONS)
|
||||||
|
List<String> listNotifications();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
26
src/main/java/cn/montaro/aria2/Aria2ClientFactory.java
Normal file
26
src/main/java/cn/montaro/aria2/Aria2ClientFactory.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
package cn.montaro.aria2;
|
||||||
|
|
||||||
|
import cn.montaro.aria2.client.websocket.Aria2WebSocketConfig;
|
||||||
|
import cn.montaro.aria2.client.websocket.Aria2WebSocketProxy;
|
||||||
|
|
||||||
|
import java.lang.reflect.Proxy;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
*
|
||||||
|
* @author ZhangJiaYu
|
||||||
|
* @date 2021/12/22
|
||||||
|
*/
|
||||||
|
public class Aria2ClientFactory {
|
||||||
|
|
||||||
|
private static ClassLoader getClassLoader() {
|
||||||
|
return Thread.currentThread().getContextClassLoader();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Aria2Client webSocketClient(Aria2WebSocketConfig config) {
|
||||||
|
ClassLoader classLoader = getClassLoader();
|
||||||
|
Aria2WebSocketProxy proxy = new Aria2WebSocketProxy(config);
|
||||||
|
Aria2Client webSocketClient = (Aria2Client) Proxy.newProxyInstance(classLoader, new Class[]{Aria2Client.class}, proxy);
|
||||||
|
return webSocketClient;
|
||||||
|
}
|
||||||
|
}
|
||||||
21
src/main/java/cn/montaro/aria2/annotation/Aria2Method.java
Normal file
21
src/main/java/cn/montaro/aria2/annotation/Aria2Method.java
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package cn.montaro.aria2.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
*
|
||||||
|
* @author ZhangJiaYu
|
||||||
|
* @date 2021/12/22
|
||||||
|
*/
|
||||||
|
@Inherited
|
||||||
|
@Target(ElementType.METHOD)
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
public @interface Aria2Method {
|
||||||
|
/**
|
||||||
|
* 调用的方法名称
|
||||||
|
* 如 aria2.addUri aria2.listMethods
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
String value();
|
||||||
|
}
|
||||||
@ -1,58 +0,0 @@
|
|||||||
package cn.montaro.aria2.api;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Description:
|
|
||||||
* Aria2 Client Api
|
|
||||||
*
|
|
||||||
* @author ZhangJiaYu
|
|
||||||
* @date 2021/12/14
|
|
||||||
*/
|
|
||||||
public interface Aria2Client {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 添加文件下载
|
|
||||||
*
|
|
||||||
* @param uris
|
|
||||||
* @param option
|
|
||||||
* @param position
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
String addUri(List<String> uris, Map<String, String> option, Integer position);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询支持的方法列表
|
|
||||||
*
|
|
||||||
* @return 方法列表
|
|
||||||
*/
|
|
||||||
List<String> listMethods();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 移除一个下载任务,如果任务正在进行中,任务会先停止
|
|
||||||
*
|
|
||||||
* @param gid GID
|
|
||||||
* @return 操作成功返回GID
|
|
||||||
*/
|
|
||||||
String remove(String gid);
|
|
||||||
|
|
||||||
String forceRemove(String gid);
|
|
||||||
|
|
||||||
String pause(String gid);
|
|
||||||
|
|
||||||
String forcePause(String gid);
|
|
||||||
|
|
||||||
String pauseAll();
|
|
||||||
|
|
||||||
String forcePauseAll();
|
|
||||||
|
|
||||||
String unpause(String gid);
|
|
||||||
|
|
||||||
void tellStatus(String gid);
|
|
||||||
|
|
||||||
void tellStopped(Integer offset, Integer num, String[] keys);
|
|
||||||
|
|
||||||
void changePosition(String gid, Integer pos, String how);
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,8 +1,8 @@
|
|||||||
package cn.montaro.aria2.client.websocket;
|
package cn.montaro.aria2.client.websocket;
|
||||||
|
|
||||||
|
|
||||||
import cn.montaro.aria2.api.Aria2Client;
|
import cn.montaro.aria2.Aria2Client;
|
||||||
import cn.montaro.aria2.client.websocket.constants.Aria2Method;
|
import cn.montaro.aria2.constants.Aria2MethodName;
|
||||||
import cn.montaro.aria2.client.websocket.exception.Aria2WebSocketClientConnectTimeoutException;
|
import cn.montaro.aria2.client.websocket.exception.Aria2WebSocketClientConnectTimeoutException;
|
||||||
import cn.montaro.aria2.client.websocket.exception.Aria2WebSocketClientException;
|
import cn.montaro.aria2.client.websocket.exception.Aria2WebSocketClientException;
|
||||||
import cn.montaro.aria2.client.websocket.exception.Aria2WebSocketClientTimeoutException;
|
import cn.montaro.aria2.client.websocket.exception.Aria2WebSocketClientTimeoutException;
|
||||||
@ -27,7 +27,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
* @date 2021/12/15
|
* @date 2021/12/15
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class Aria2WebSocketClient extends WebSocketClient implements Aria2Client {
|
public class Aria2WebSocketClient extends WebSocketClient {
|
||||||
|
|
||||||
private Gson gson = null;
|
private Gson gson = null;
|
||||||
private Aria2WebSocketConfig config = null;
|
private Aria2WebSocketConfig config = null;
|
||||||
@ -147,6 +147,12 @@ public class Aria2WebSocketClient extends WebSocketClient implements Aria2Client
|
|||||||
return result.getResult();
|
return result.getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private <T> T getResult(Aria2WebSocketRequest request) {
|
||||||
|
String id = request.getId();
|
||||||
|
this.sendRequest(request);
|
||||||
|
return this.waitResult(id);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 清理id映射关系
|
* 清理id映射关系
|
||||||
*
|
*
|
||||||
@ -160,90 +166,9 @@ public class Aria2WebSocketClient extends WebSocketClient implements Aria2Client
|
|||||||
|
|
||||||
public String addUri(String[] uris) {
|
public String addUri(String[] uris) {
|
||||||
List<String> uriList = Arrays.asList(uris);
|
List<String> uriList = Arrays.asList(uris);
|
||||||
return this.addUri(uriList, null, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String addUri(List<String> uris, Map<String, String> option, Integer position) {
|
|
||||||
Aria2WebSocketRequest request = this.buildRequest(
|
|
||||||
Aria2Method.ADD_URI,
|
|
||||||
new TypeToken<Aria2WebSocketResponse<String>>() {
|
|
||||||
}.getType(),
|
|
||||||
uris,
|
|
||||||
option,
|
|
||||||
position
|
|
||||||
);
|
|
||||||
String id = request.getId();
|
|
||||||
this.sendRequest(request);
|
|
||||||
return this.waitResult(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> listMethods() {
|
|
||||||
Aria2WebSocketRequest request = this.buildRequest(
|
|
||||||
Aria2Method.LIST_METHODS,
|
|
||||||
new TypeToken<Aria2WebSocketResponse<List<String>>>() {
|
|
||||||
}.getType()
|
|
||||||
);
|
|
||||||
String id = request.getId();
|
|
||||||
this.sendRequest(request);
|
|
||||||
return this.waitResult(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String remove(String s) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public String forceRemove(String s) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String pause(String s) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String forcePause(String s) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String pauseAll() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String forcePauseAll() {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String unpause(String s) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void tellStatus(String gid) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------WebSocket Client--------------
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void tellStopped(Integer offset, Integer num, String[] keys) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void changePosition(String gid, Integer pos, String how) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onOpen(ServerHandshake serverHandshake) {
|
public void onOpen(ServerHandshake serverHandshake) {
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
package cn.montaro.aria2.client.websocket;
|
package cn.montaro.aria2.client.websocket;
|
||||||
|
|
||||||
import cn.montaro.aria2.client.websocket.constants.WebSocketProtocol;
|
import cn.montaro.aria2.constants.WebSocketProtocol;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,177 @@
|
|||||||
|
package cn.montaro.aria2.client.websocket;
|
||||||
|
|
||||||
|
import cn.montaro.aria2.annotation.Aria2Method;
|
||||||
|
import cn.montaro.aria2.client.websocket.exception.Aria2WebSocketClientException;
|
||||||
|
import com.google.gson.*;
|
||||||
|
import lombok.SneakyThrows;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.java_websocket.client.WebSocketClient;
|
||||||
|
import org.java_websocket.handshake.ServerHandshake;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationHandler;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import java.lang.reflect.Type;
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
*
|
||||||
|
* @author ZhangJiaYu
|
||||||
|
* @date 2021/12/22
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class Aria2WebSocketProxy implements InvocationHandler {
|
||||||
|
|
||||||
|
private final Gson gson;
|
||||||
|
private final WebSocketImpl webSocket;
|
||||||
|
private final Aria2WebSocketConfig config;
|
||||||
|
|
||||||
|
@SneakyThrows
|
||||||
|
public Aria2WebSocketProxy(Aria2WebSocketConfig config) {
|
||||||
|
this.config = config;
|
||||||
|
this.gson = new GsonBuilder().create();
|
||||||
|
this.webSocket = new WebSocketImpl(config.getURI());
|
||||||
|
this.webSocket.connectBlocking(config.getTimeout(), TimeUnit.MILLISECONDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
|
||||||
|
Aria2Method aria2Method = method.getDeclaredAnnotation(Aria2Method.class);
|
||||||
|
String methodName = aria2Method.value();
|
||||||
|
Aria2WebSocketRequest request = this.buildRequest(methodName, args);
|
||||||
|
Object o = this.sendRequest(request, method.getGenericReturnType());
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 序列化参数
|
||||||
|
*
|
||||||
|
* @param args
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private JsonElement serializeArguments(Object[] args) {
|
||||||
|
ArrayList<Object> arguments = new ArrayList<>();
|
||||||
|
if (args != null && args.length != 0) {
|
||||||
|
arguments = new ArrayList<>(Arrays.asList(args));
|
||||||
|
}
|
||||||
|
String secret = "token:";
|
||||||
|
if (config.getSecret() != null) {
|
||||||
|
secret += config.getSecret();
|
||||||
|
}
|
||||||
|
arguments.add(0, secret);
|
||||||
|
int size = arguments.size();
|
||||||
|
ListIterator<Object> listIterator = arguments.listIterator(size);
|
||||||
|
while (listIterator.hasPrevious()) {
|
||||||
|
Object previous = listIterator.previous();
|
||||||
|
if (previous == null) {
|
||||||
|
listIterator.remove();
|
||||||
|
} else {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return gson.toJsonTree(arguments);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String serializeRequest(Aria2WebSocketRequest request) {
|
||||||
|
return this.gson.toJson(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构建请求体
|
||||||
|
*
|
||||||
|
* @param methodName 调用方法名称 如 aria2.addUri
|
||||||
|
* @param args 参数
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private Aria2WebSocketRequest buildRequest(String methodName, Object[] args) {
|
||||||
|
Aria2WebSocketRequest request = new Aria2WebSocketRequest();
|
||||||
|
String id = UUID.randomUUID().toString();
|
||||||
|
request.setId(id);
|
||||||
|
request.setMethod(methodName);
|
||||||
|
request.setParams(serializeArguments(args));
|
||||||
|
return request;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private <T> T sendRequest(Aria2WebSocketRequest request, Type resultType) {
|
||||||
|
String id = request.getId();
|
||||||
|
webSocket.send(serializeRequest(request));
|
||||||
|
JsonObject returnResult = null;
|
||||||
|
while ((returnResult = this.webSocket.getResponse(id)) == null) {
|
||||||
|
Aria2WebSocketClientException exception = this.webSocket.getException(id);
|
||||||
|
if (exception != null) {
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
JsonElement result = returnResult.get("result");
|
||||||
|
return gson.fromJson(result, resultType);
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////// WebSocket Client //////////////////////////
|
||||||
|
|
||||||
|
private class WebSocketImpl extends WebSocketClient {
|
||||||
|
|
||||||
|
private final Map<String, JsonObject> resultValueMap = new HashMap<>();
|
||||||
|
private final Map<String, Aria2WebSocketClientException> resultExceptionMap = new HashMap<>();
|
||||||
|
|
||||||
|
public WebSocketImpl(URI serverUri) {
|
||||||
|
super(serverUri);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JsonObject getResponse(String id) {
|
||||||
|
JsonObject result = resultValueMap.get(id);
|
||||||
|
if (result != null) {
|
||||||
|
resultValueMap.remove(id);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Aria2WebSocketClientException getException(String id) {
|
||||||
|
Aria2WebSocketClientException exception = resultExceptionMap.get(id);
|
||||||
|
if (exception != null) {
|
||||||
|
resultExceptionMap.remove(id);
|
||||||
|
return exception;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onOpen(ServerHandshake handshakedata) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onMessage(String message) {
|
||||||
|
JsonElement jsonElement = JsonParser.parseString(message);
|
||||||
|
JsonObject jsonObject = jsonElement.getAsJsonObject();
|
||||||
|
String id = jsonObject.get("id").getAsString();
|
||||||
|
if (id == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
JsonObject error = jsonObject.getAsJsonObject("error");
|
||||||
|
if (error != null) {
|
||||||
|
String errorMessage = error.get("message").getAsString();
|
||||||
|
this.resultExceptionMap.put(id, new Aria2WebSocketClientException(errorMessage));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.resultValueMap.put(id, jsonObject);
|
||||||
|
} catch (Exception e) {
|
||||||
|
this.resultExceptionMap.put(id, new Aria2WebSocketClientException(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClose(int code, String reason, boolean remote) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Exception ex) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,13 +1,10 @@
|
|||||||
package cn.montaro.aria2.client.websocket;
|
package cn.montaro.aria2.client.websocket;
|
||||||
|
|
||||||
import com.google.gson.Gson;
|
|
||||||
import com.google.gson.GsonBuilder;
|
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description:
|
* Description:
|
||||||
|
|||||||
@ -9,6 +9,7 @@ package cn.montaro.aria2.client.websocket.exception;
|
|||||||
public class Aria2WebSocketClientException extends RuntimeException {
|
public class Aria2WebSocketClientException extends RuntimeException {
|
||||||
|
|
||||||
public Aria2WebSocketClientException() {
|
public Aria2WebSocketClientException() {
|
||||||
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Aria2WebSocketClientException(String message) {
|
public Aria2WebSocketClientException(String message) {
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package cn.montaro.aria2.client.websocket.constants;
|
package cn.montaro.aria2.constants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description:
|
* Description:
|
||||||
@ -7,7 +7,7 @@ package cn.montaro.aria2.client.websocket.constants;
|
|||||||
* @author ZhangJiaYu
|
* @author ZhangJiaYu
|
||||||
* @date 2021/12/14
|
* @date 2021/12/14
|
||||||
*/
|
*/
|
||||||
public class Aria2Method {
|
public class Aria2MethodName {
|
||||||
|
|
||||||
private final static String ARIA2 = "aria2.";
|
private final static String ARIA2 = "aria2.";
|
||||||
private final static String SYSTEM = "system.";
|
private final static String SYSTEM = "system.";
|
||||||
@ -39,6 +39,7 @@ public class Aria2Method {
|
|||||||
public final static String GET_VERSION = ARIA2 + "getVersion";
|
public final static String GET_VERSION = ARIA2 + "getVersion";
|
||||||
public final static String GET_GLOBAL_STAT = ARIA2 + "getGlobalStat";
|
public final static String GET_GLOBAL_STAT = ARIA2 + "getGlobalStat";
|
||||||
public final static String GET_SESSION_INFO = ARIA2 + "getSessionInfo";
|
public final static String GET_SESSION_INFO = ARIA2 + "getSessionInfo";
|
||||||
|
public final static String GET_GLOBAL_OPTION = ARIA2 + "getGlobalOption";
|
||||||
|
|
||||||
public final static String CHANGE_URI = ARIA2 + "changeUri";
|
public final static String CHANGE_URI = ARIA2 + "changeUri";
|
||||||
public final static String CHANGE_OPTION = ARIA2 + "changeOption";
|
public final static String CHANGE_OPTION = ARIA2 + "changeOption";
|
||||||
@ -1,4 +1,4 @@
|
|||||||
package cn.montaro.aria2.client.websocket.constants;
|
package cn.montaro.aria2.constants;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Description:
|
* Description:
|
||||||
26
src/test/java/Aria2WebSocketClientTest.java
Normal file
26
src/test/java/Aria2WebSocketClientTest.java
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
import cn.montaro.aria2.Aria2Client;
|
||||||
|
import cn.montaro.aria2.Aria2ClientFactory;
|
||||||
|
import cn.montaro.aria2.client.websocket.Aria2WebSocketConfig;
|
||||||
|
import cn.montaro.aria2.client.websocket.Aria2WebSocketClient;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Description:
|
||||||
|
*
|
||||||
|
* @author ZhangJiaYu
|
||||||
|
* @date 2021/12/15
|
||||||
|
*/
|
||||||
|
public class Aria2WebSocketClientTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void test() {
|
||||||
|
Aria2WebSocketConfig config = new Aria2WebSocketConfig().setSecret("123456");
|
||||||
|
Aria2Client client = Aria2ClientFactory.webSocketClient(config);
|
||||||
|
String version = client.getVersion();
|
||||||
|
System.out.println(version);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,26 +0,0 @@
|
|||||||
import cn.montaro.aria2.api.Aria2Client;
|
|
||||||
import cn.montaro.aria2.client.websocket.Aria2WebSocketConfig;
|
|
||||||
import cn.montaro.aria2.client.websocket.Aria2WebSocketClient;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Description:
|
|
||||||
*
|
|
||||||
* @author ZhangJiaYu
|
|
||||||
* @date 2021/12/15
|
|
||||||
*/
|
|
||||||
public class ClientTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
Aria2WebSocketConfig aria2WebSocketConfig = new Aria2WebSocketConfig();
|
|
||||||
aria2WebSocketConfig.setSecret("123456");
|
|
||||||
Aria2Client client = new Aria2WebSocketClient(aria2WebSocketConfig);
|
|
||||||
List<String> methods = client.listMethods();
|
|
||||||
for (String method : methods) {
|
|
||||||
System.out.println(method);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user