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);
   }
 }
Example #4
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));
    }
  }
Example #5
0
  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.");
    }
  }
Example #6
0
 @Override
 public void run() {
   cb.onFrameRead(resource);
 }