class WebSocket::Frame::Incoming

Construct or parse incoming WebSocket Frame. @note You should NEVER use this class directly - use Client or Server subclasses instead, as they contain additional frame options(i.e. Client-side masking in draft 04)

@example

frame = WebSocket::Frame::Incoming::Server.new(version: @handshake.version)
frame << "\x81\x05\x48\x65\x6c\x6c\x6f\x81\x06\x77\x6f\x72\x6c\x64\x21"
frame.next # "Hello"
frame.next # "world!""

Public Class Methods

new(args = {}) click to toggle source
Calls superclass method WebSocket::Frame::Base::new
# File lib/websocket/frame/incoming.rb, line 17
def initialize(args = {})
  @decoded = args[:decoded] || false
  super
end

Public Instance Methods

<<(data) click to toggle source

Add provided string as raw incoming frame. @param data [String] Raw frame

# File lib/websocket/frame/incoming.rb, line 32
def <<(data)
  @data << data
end
decoded?() click to toggle source

If data is still encoded after receiving then this is false. After calling “next” you will receive another instance of incoming frame, but with data decoded - this function will return true and to_s will return frame content instead of raw data. @return [Boolean] If frame already decoded?

# File lib/websocket/frame/incoming.rb, line 26
def decoded?
  @decoded
end
next() click to toggle source

Return next complete frame. This function will merge together splitted frames and return as combined content. Check error if nil received to check for eventual parsing errors @return [WebSocket::Frame::Incoming] Single incoming frame or nil if no complete frame is available.

# File lib/websocket/frame/incoming.rb, line 40
def next
  @handler.decode_frame unless decoded?
end
to_s() click to toggle source

If decoded then this will return frame content. Otherwise it will return raw frame. @return [String] Data of frame

# File lib/websocket/frame/incoming.rb, line 47
def to_s
  @data
end