sábado, 19 de octubre de 2019

Java 12 web socket Client




Para este ejemplo vamos a usar la librería de java.net.http con la que podemos usar un objeto de webSocket que nos permitirá conectarnos a algún servicio. En este caso vamos a utilizar un websocket para hacer testing.

También ocupamos usar un servidor publico para hacer testing del websocket http://www.websocket.org/echo.html



Lo primero que vamos a crear es una clase nuevo, con el nombre de WebSocketClient. En esta clase tenemos que hacer un import de la libreria java.net.http.WebSocket. Con esto podremos hacer un implements de la interfaz WebSocket.Listener.


public class WebSocketClient implements WebSocket.Listener {

    @Override
    public void onOpen(WebSocket webSocket) {
        webSocket.request(1);
        System.out.println("We are connected to the server");
    }
    
    @Override
    public CompletionStage<?> onClose(WebSocket webSocket, int statusCode, String reason) {
        System.out.println("Close websocket: " + reason);
        webSocket.sendClose(statusCode, reason);
        return new CompletableFuture<Void>();
    }

    @Override
    public void onError(WebSocket webSocket, Throwable error) {
        System.out.println("Exception " + error.getCause());
        System.out.println("Error: " + error.getLocalizedMessage());
        webSocket.abort();
    }

    @Override
    public CompletionStage<?> onText(WebSocket webSocket, CharSequence data, boolean last) {
        System.out.println("Data we got from server: " + data);
        return new CompletableFuture().completedFuture("onText completed.").thenAccept(System.out::println);
    }
}

Para que nuestro sistema funcione se tiene que agregar los siguientes paquetes a la clase.


import java.net.http.WebSocket;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionStage;


Con esta interfaz podemos sobrescribir una serie de métodos para poder establecer la comunicación correcta con el servicio.

Para este ejemplo vamos a usar el metodo onOpen para conectarnos al webSocket, onClose para poder cerrar la conexion del webSocket, onError en caso de que alguna cosa ocurra con la conexion que estamos estableciendo con el servidor, onText que nos permite recibir las respuestas del servidor.

Ahora nos vamos hacer una clase nueva para nuestro metodo main para poder ejecutar nuestro sistema para conectarnos al websocket.

Debemos hacer los siguientes imports para poder inicializar nuestro cliente


import java.net.URI;
import java.net.http.HttpClient;
import javax.swing.JOptionPane;

Ahora tenemos que crear un objeto de tipo WebSocketClient que tiene los métodos que esperan los eventos del websocket.


    public static void main(String[] args) {
        var client = new WebSocketClient();
        var serverConection = HttpClient.newHttpClient().newWebSocketBuilder().buildAsync(URI.create("ws://echo.websocket.org"), client);
        var connectedClient = serverConection.join();
        var result = JOptionPane.showInputDialog("Message");
        while (true) {
            connectedClient.sendText(result, true);
            result = JOptionPane.showInputDialog("Message");
        }

    }

Luego creamos otro objeto (httpClient) usando el newHttpClient() usando el método newWebSocketBuilder vamos a crear nuestra conexión. Que tiene un método llamado buildAsync el cual requiere del URL de nuestro websocket y le pasamos el objeto que tiene todos los eventos para usar el websocket.

Con esto ya podemos crear una variable String que recibe un texto del JOptionPane con los mensajes que el usuario le quiere enviar al servidor. Con el método sendText podemos enviar los mensajes que el usuario quiere. La respuesta la vamos a esperar en el método onText.

Etiquetas: , , , ,

0 comentarios:

Publicar un comentario

Suscribirse a Enviar comentarios [Atom]

<< Inicio