/
dixsu
/
websocket-client
Обзор
Документация
Войти
/
dixsu
/
websocket-client
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
master
src/main/java/WebSocketLayer.java
140 строк
5 KB
Сахно Роман Александрович
начало работы с POST как с потоками
19 фев 2025, 20:34
19 фев 2025, 20:34
1b600f0
Код
Авторство
О чём код?
import javax.websocket.*; import java.io.IOException; import java.net.URI; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.CountDownLatch; import javax.net.ssl.*; import java.security.cert.X509Certificate; public class WebSocketLayer { private static final CountDownLatch latch = new CountDownLatch(1); protected static final String DEVICEID = "device-1234"; // private static final String IPWS = "172.16.42.2"; private static final String IPWS = "localhost"; // private static final String IPWS = "37.46.18.158"; // private static final String PORTWS = "8080"; private static final String PORTWS = "8443"; protected static final String LOCALWEBPORT ="5000"; protected static final String LOCALWEBPORTSSL ="443"; //для логов, которые нужно только в режиме debug public static final boolean DEBUG = true; private BusinessLogicLayer businessLogicLayer; public WebSocketLayer() { this.businessLogicLayer = new BusinessLogicLayer(); } public static class CustomConfigurator extends ClientEndpointConfig.Configurator { @Override public void beforeRequest(Map<String, List<String>> headers) { headers.put("X-Device-Id", Collections.singletonList(DEVICEID)); } } public void connect() { try { WebSocketContainer container = ContainerProvider.getWebSocketContainer(); ClientEndpointConfig config = ClientEndpointConfig.Builder.create() .configurator(new CustomConfigurator()) .build(); // disableSSLCertificateChecking(); container.connectToServer(new Endpoint() { @Override public void onOpen(Session session, EndpointConfig config) { businessLogicLayer.onOpen(session); session.addMessageHandler(new MessageHandler.Whole<String>() { @Override public void onMessage(String message) { try { businessLogicLayer.onMessage(message, session); } catch (IOException e) { throw new RuntimeException(e); } } }); // UtilsLayer.logClient("session.getId()=["+session.getId().toString()+"]",true); } // Если серверная часть закрывает соединение с указанным кодом закрытия @Override public void onClose(Session session, CloseReason closeReason) { int code = closeReason.getCloseCode().getCode(); String reason = closeReason.getReasonPhrase(); // businessLogicLayer.handleConnectionClose(code, reason); // Специфичная обработка для кода 4000 if (code == 4000) { UtilsLayer.logClient("FATAL: Device already connected. Stop reconnection attempts!"); UtilsLayer.logClient("Device ID ["+DEVICEID+"] Conflict"+" This device is already connected elsewhere"); } // Переподключение только для некритичных ошибок if (code != 4000 && code != 1008) { UtilsLayer.logClient(" соединение закрыто "+reason); } } }, config, new URI("wss://" + IPWS + ":" + PORTWS + "/ws?deviceId=" + DEVICEID)); latch.await(); } catch (Exception e) { e.printStackTrace(); } } //Отключение проверки сертификатов (для тестирования) // Использование: // Вызовите метод disableSSLCertificateChecking() перед установкой соединения: public void disableSSLCertificateChecking() { try { // Создаем TrustManager, который принимает любой сертификат TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) {} public void checkServerTrusted(X509Certificate[] certs, String authType) {} } }; // Устанавливаем TrustManager SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // Отключаем проверку хоста HostnameVerifier allHostsValid = (hostname, session) -> true; HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { WebSocketLayer webSocketLayer = new WebSocketLayer(); webSocketLayer.connect(); } }