Я использую nv-websocket-client
lib для подключения URL-адреса веб-сокета. Я вижу некоторые примеры в документе для подключения URL, как показано ниже,
private static WebSocket connectSocket() {
return new WebSocketFactory()
.createSocket("http://...")
.addProtocol(8081)
.addListener(new WebSocketAdapter() {
public void onTextMessage(WebSocket websocket, String message) throws JSONException {
if (!message.isEmpty()) {
JSONArray jsonArray = new JSONArray(message);
for (int i = 0; i < jsonArray.length(); ++i) {
// TODO : Method Invocation
}
}
}
public void onConnected(WebSocket websocket, Map<String, List<String>> headers) throws JSONException {
// TODO : Method Invocation
}
})
.addExtension(WebSocketExtension.PERMESSAGE_DEFLATE)
.connect();
}
используется анонимный класс, и я вижу, что есть два метода onTextMessage
и onConnected
, которые я хотел бы Использовать функциональный подход и ссылаться на https://blog.codefx.org/techniques/getting-rid-of-anonymous-classes/ блог попытался рефакторинг моего кода. Моя попытка, как показано ниже,
private static WebSocket connectionSocket(){
WebSocketFactory socketFactory = new WebSocketFactory();
WebSocket webSocket = socketFactory.createSocket(connectionParameters.getWssHostName());
webSocket.addProtocol(connectionParameters.getProtocol());
//new FunctionalWebSocketListener(webSocket, );
//webSocket.addListener();
webSocket.addExtension(WebSocketExtension.PERMESSAGE_DEFLATE);
webSocket.connect();
return webSocket;
}
public class FunctionalWebSocketListener implements WebSocketListener {
private final BiConsumer<WebSocket, String> textMessage;
private final BiConsumer<WebSocket, Map<String, List<String>>> connectionMessage;
public FunctionalWebSocketListener(BiConsumer<WebSocket, String> textMessage,
BiConsumer<WebSocket, Map<String, List<String>>> connectionMessage) {
this.textMessage = textMessage;
this.connectionMessage = connectionMessage;
}
@Override
public void onTextMessage(WebSocket websocket, String text) throws Exception {
textMessage.accept(websocket,text);
}
@Override
public void onConnected(WebSocket websocket, Map<String, List<String>> headers) throws Exception {
connectionMessage.accept(websocket, headers);
}
// rest of un-implemented method goes here
}
Не удалось продолжить, и завис, и я хотел извлечь два отдельных метода publi c и предоставить доступ к другому классу.
Любая помощь высоко ценится?
//new FunctionalWebSocketListener( p1, p2 ); // Not clear what consumer to be passed here.
//webSocket.addListener();