public void removeFrameCallback(FrameCallback callbackWrapper) { if (IS_JELLYBEAN_OR_HIGHER) { choreographerRemoveFrameCallback(callbackWrapper.getFrameCallback()); } else { mHandler.removeCallbacks(callbackWrapper.getRunnable()); } }
public void postFrameCallbackDelayed(FrameCallback callbackWrapper, long delayMillis) { if (IS_JELLYBEAN_OR_HIGHER) { choreographerPostFrameCallbackDelayed(callbackWrapper.getFrameCallback(), delayMillis); } else { mHandler.postDelayed(callbackWrapper.getRunnable(), delayMillis + ONE_FRAME_MILLIS); } }
public void postFrameCallback(FrameCallback callbackWrapper) { if (IS_JELLYBEAN_OR_HIGHER) { choreographerPostFrameCallback(callbackWrapper.getFrameCallback()); } else { mHandler.postDelayed(callbackWrapper.getRunnable(), 0); } }
private void readControlFrame() throws IOException { Buffer buffer = null; if (frameBytesRead < frameLength) { buffer = new Buffer(); if (isClient) { source.readFully(buffer, frameLength); } else { while (frameBytesRead < frameLength) { int toRead = (int) Math.min(frameLength - frameBytesRead, maskBuffer.length); int read = source.read(maskBuffer, 0, toRead); if (read == -1) throw new EOFException(); toggleMask(maskBuffer, read, maskKey, frameBytesRead); buffer.write(maskBuffer, 0, read); frameBytesRead += read; } } } switch (opcode) { case OPCODE_CONTROL_PING: frameCallback.onPing(buffer); break; case OPCODE_CONTROL_PONG: frameCallback.onPong(buffer); break; case OPCODE_CONTROL_CLOSE: int code = 1000; String reason = ""; if (buffer != null) { long bufferSize = buffer.size(); if (bufferSize == 1) { throw new ProtocolException("Malformed close payload length of 1."); } else if (bufferSize != 0) { code = buffer.readShort(); validateCloseCode(code, false); reason = buffer.readUtf8(); } } frameCallback.onClose(code, reason); closed = true; break; default: throw new ProtocolException("Unknown control opcode: " + toHexString(opcode)); } }
private void readMessageFrame() throws IOException { final MediaType type; switch (opcode) { case OPCODE_TEXT: type = WebSocket.TEXT; break; case OPCODE_BINARY: type = WebSocket.BINARY; break; default: throw new ProtocolException("Unknown opcode: " + toHexString(opcode)); } final BufferedSource source = Okio.buffer(framedMessageSource); ResponseBody body = new ResponseBody() { @Override public MediaType contentType() { return type; } @Override public long contentLength() { return -1; } @Override public BufferedSource source() { return source; } }; messageClosed = false; frameCallback.onMessage(body); if (!messageClosed) { throw new IllegalStateException("Listener failed to call close on message payload."); } }
@Override public void run() { cb.onFrameRead(resource); }