aboutsummaryrefslogtreecommitdiff
path: root/spark-common/src/main/java11
diff options
context:
space:
mode:
authorLuck <git@lucko.me>2023-03-07 21:54:14 +0000
committerLuck <git@lucko.me>2023-03-07 21:54:14 +0000
commit0f30d2983ec6ef487fd1966c1c22fa4a73e081f9 (patch)
treed719c1994e359fbe5387eef8ad74def15e9044e2 /spark-common/src/main/java11
parentd61aa1f95e8c9afaf55bb00d869782025efcd953 (diff)
downloadspark-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')
-rw-r--r--spark-common/src/main/java11/me/lucko/spark/common/util/ws/BytesocksClientImpl.java146
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));
- }
- }
-
-
-}