diff options
author | Luck <git@lucko.me> | 2023-03-07 21:54:14 +0000 |
---|---|---|
committer | Luck <git@lucko.me> | 2023-03-07 21:54:14 +0000 |
commit | 0f30d2983ec6ef487fd1966c1c22fa4a73e081f9 (patch) | |
tree | d719c1994e359fbe5387eef8ad74def15e9044e2 /spark-common/src/main/java11/me/lucko | |
parent | d61aa1f95e8c9afaf55bb00d869782025efcd953 (diff) | |
download | spark-0f30d2983ec6ef487fd1966c1c22fa4a73e081f9.tar.gz spark-0f30d2983ec6ef487fd1966c1c22fa4a73e081f9.tar.bz2 spark-0f30d2983ec6ef487fd1966c1c22fa4a73e081f9.zip |
Don't use multi-release jar for websocket code
Diffstat (limited to 'spark-common/src/main/java11/me/lucko')
-rw-r--r-- | spark-common/src/main/java11/me/lucko/spark/common/util/ws/BytesocksClientImpl.java | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/spark-common/src/main/java11/me/lucko/spark/common/util/ws/BytesocksClientImpl.java b/spark-common/src/main/java11/me/lucko/spark/common/util/ws/BytesocksClientImpl.java deleted file mode 100644 index 7adb809..0000000 --- a/spark-common/src/main/java11/me/lucko/spark/common/util/ws/BytesocksClientImpl.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * This file is part of spark. - * - * Copyright (c) lucko (Luck) <luck@lucko.me> - * Copyright (c) contributors - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -package me.lucko.spark.common.util.ws; - -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.net.http.WebSocket; -import java.time.Duration; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CompletionStage; - -/** - * Java 11 implementation of {@link BytesocksClient}. - */ -class BytesocksClientImpl implements BytesocksClient { - - private final HttpClient client; - - /* The bytesocks urls */ - private final String httpUrl; - private final String wsUrl; - - /** The client user agent */ - private final String userAgent; - - BytesocksClientImpl(String host, String userAgent) { - this.client = HttpClient.newHttpClient(); - - this.httpUrl = "https://" + host + "/"; - this.wsUrl = "wss://" + host + "/"; - this.userAgent = userAgent; - } - - @Override - public Socket createAndConnect(Listener listener) throws Exception { - HttpRequest createRequest = HttpRequest.newBuilder() - .uri(URI.create(this.httpUrl + "create")) - .header("User-Agent", this.userAgent) - .build(); - - HttpResponse<Void> resp = this.client.send(createRequest, HttpResponse.BodyHandlers.discarding()); - if (resp.statusCode() != 201) { - throw new RuntimeException("Request failed: " + resp); - } - - String channelId = resp.headers().firstValue("Location").orElse(null); - if (channelId == null) { - throw new RuntimeException("Location header not returned: " + resp); - } - - return connect(channelId, listener); - } - - @Override - public Socket connect(String channelId, Listener listener) throws Exception { - WebSocket socket = this.client.newWebSocketBuilder() - .header("User-Agent", this.userAgent) - .connectTimeout(Duration.ofSeconds(5)) - .buildAsync(URI.create(this.wsUrl + channelId), new ListenerImpl(listener)) - .join(); - - return new SocketImpl(channelId, socket); - } - - private static final class SocketImpl implements Socket { - private final String id; - private final WebSocket ws; - - private SocketImpl(String id, WebSocket ws) { - this.id = id; - this.ws = ws; - } - - @Override - public String getChannelId() { - return this.id; - } - - @Override - public boolean isOpen() { - return !this.ws.isOutputClosed() && !this.ws.isInputClosed(); - } - - @Override - public CompletableFuture<?> send(CharSequence msg) { - return this.ws.sendText(msg, true); - } - - @Override - public void close(int statusCode, String reason) { - this.ws.sendClose(statusCode, reason); - } - } - - private static final class ListenerImpl implements WebSocket.Listener { - private final Listener listener; - - private ListenerImpl(Listener listener) { - this.listener = listener; - } - - @Override - public void onOpen(WebSocket webSocket) { - this.listener.onOpen(); - webSocket.request(1); - } - - @Override - public CompletionStage<?> onClose(WebSocket webSocket, int statusCode, String reason) { - return CompletableFuture.runAsync(() -> this.listener.onClose(statusCode, reason)); - } - - @Override - public void onError(WebSocket webSocket, Throwable error) { - this.listener.onError(error); - } - - @Override - public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) { - webSocket.request(1); - return CompletableFuture.runAsync(() -> this.listener.onText(data)); - } - } - - -} |