I'm using OkHttp for sending and receiving messages through socket on Android.
Creating a socket connection -
SocketListener listener = new SocketListener();
mOkHttpClient = new OkHttpClient.Builder()
.readTimeout(0, TimeUnit.MILLISECONDS)
.build();
Request request = new Request.Builder()
.url(socketURL)
.build();
mOkHttpClient.newWebSocket(request, listener);
And this is the SocketListener class that is used to listen to all the web socket events -
public final class SocketListener extends WebSocketListener {
@Override
public void onOpen(WebSocket webSocket, Response response) {
// doing something
isSocketConnected = true;
}
@Override
public void onMessage(WebSocket webSocket, String text) {
// doing something
}
@Override
public void onMessage(WebSocket webSocket, ByteString bytes) {
}
@Override
public void onClosing(WebSocket webSocket, int code, String reason) {
// doing something
isSocketConnected = true;
}
@Override
public void onFailure(WebSocket webSocket, Throwable t, Response response) {
isSocketConnected = false;
}
}
Sometimes the socket connection drops and as you can see, I'm using isSocketConnected variable on SocketListener class to keep track of 'if socket is connected or disconnected'.
Can there be a better way to check if the socket is connected or disconnected ?
OkHttp is an HTTP client from Square for Java and Android applications. It's designed to load resources faster and save bandwidth. OkHttp is widely used in open-source projects and is the backbone of libraries like Retrofit, Picasso, and many others.
Unlike the traditional request/response model of HTTP, web sockets provide fully bi-directional streaming of messages. This means that both the client and the server can send any number of messages to the other peer at any time. With today's version 3.5 release, OkHttp now offers native support for web sockets!
OkHttp Query Parameters Example Builder urlBuilder = HttpUrl. parse("https://httpbin.org/get).newBuilder(); urlBuilder. addQueryParameter("website", "www.journaldev.com"); urlBuilder. addQueryParameter("tutorials", "android"); String url = urlBuilder.
This is Tinder Scarlet method to solve by using Rx
internal class OkHttpWebSocketEventObserver : WebSocketListener() {
private val processor = PublishProcessor.create<WebSocket.Event>().toSerialized()
fun observe(): Flowable<WebSocket.Event> = processor
fun terminate() = processor.onComplete()
override fun onOpen(webSocket: okhttp3.WebSocket, response: Response) =
processor.onNext(WebSocket.Event.OnConnectionOpened(webSocket))
override fun onMessage(webSocket: okhttp3.WebSocket, bytes: ByteString) =
processor.onNext(WebSocket.Event.OnMessageReceived(Message.Bytes(bytes.toByteArray())))
override fun onMessage(webSocket: okhttp3.WebSocket, text: String) =
processor.onNext(WebSocket.Event.OnMessageReceived(Message.Text(text)))
override fun onClosing(webSocket: okhttp3.WebSocket, code: Int, reason: String) =
processor.onNext(WebSocket.Event.OnConnectionClosing(ShutdownReason(code, reason)))
override fun onClosed(webSocket: okhttp3.WebSocket, code: Int, reason: String) =
processor.onNext(WebSocket.Event.OnConnectionClosed(ShutdownReason(code, reason)))
override fun onFailure(webSocket: okhttp3.WebSocket, t: Throwable, response: Response?) =
processor.onNext(WebSocket.Event.OnConnectionFailed(t))
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With