blob: dfe3b90c7b527d9acea859fca9ee5b01ddbe7bd3 [file] [log] [blame]
package com.squareup.okhttp.recipes;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ws.WebSocket;
import com.squareup.okhttp.ws.WebSocketCall;
import com.squareup.okhttp.ws.WebSocketListener;
import java.io.IOException;
import okio.Buffer;
import okio.BufferedSource;
import static com.squareup.okhttp.ws.WebSocket.PayloadType;
import static com.squareup.okhttp.ws.WebSocket.PayloadType.BINARY;
import static com.squareup.okhttp.ws.WebSocket.PayloadType.TEXT;
public final class WebSocketEcho implements WebSocketListener {
private void run() throws IOException {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("ws://echo.websocket.org")
.build();
WebSocketCall.create(client, request).enqueue(this);
// Trigger shutdown of the dispatcher's executor so this process can exit cleanly.
client.getDispatcher().getExecutorService().shutdown();
}
@Override public void onOpen(WebSocket webSocket, Request request, Response response)
throws IOException {
webSocket.sendMessage(TEXT, new Buffer().writeUtf8("Hello..."));
webSocket.sendMessage(TEXT, new Buffer().writeUtf8("...World!"));
webSocket.sendMessage(BINARY, new Buffer().writeInt(0xdeadbeef));
webSocket.close(1000, "Goodbye, World!");
}
@Override public void onMessage(BufferedSource payload, PayloadType type) throws IOException {
switch (type) {
case TEXT:
System.out.println(payload.readUtf8());
break;
case BINARY:
System.out.println(payload.readByteString().hex());
break;
default:
throw new IllegalStateException("Unknown payload type: " + type);
}
payload.close();
}
@Override public void onPong(Buffer payload) {
System.out.println("PONG: " + payload.readUtf8());
}
@Override public void onClose(int code, String reason) {
System.out.println("CLOSE: " + code + " " + reason);
}
@Override public void onFailure(IOException e) {
e.printStackTrace();
}
public static void main(String... args) throws IOException {
new WebSocketEcho().run();
}
}