Sha256: 4e0bf35164dac82fdbed93e9b5eb44b294d72769b28ab76315de973ead64f927

Contents?: true

Size: 1.69 KB

Versions: 3

Compression:

Stored size: 1.69 KB

Contents

module OverSIP::WebSocket

  class WsApp

    include ::OverSIP::Logger


    def self.class_init
      @@max_message_size = ::OverSIP.configuration[:websocket][:max_ws_message_size]
      @@ws_keepalive_interval = ::OverSIP.configuration[:websocket][:ws_keepalive_interval]
    end


    def initialize connection, ws_framing
      @connection = connection
      @ws_framing = ws_framing
      @ws_message = ::IO::Buffer.new
      @cvars = connection.cvars

      # Mantain WebSocket keepalive.
      @ws_framing.do_keep_alive @@ws_keepalive_interval  if @@ws_keepalive_interval
    end


    def close_connection status=nil, reason=nil
      @ws_framing.send_close_frame status, reason
      @connection.ws_locally_closed = true
    end


    def receive_payload_data payload_data
      # payload_data is always Encoding::BINARY so also @ws_message.to_str.
      @ws_message << payload_data

      # Check max message size.
      if @ws_message.size > @@max_message_size
        close_connection 1009, "message too big"
        return false
      end
      true
    end


    def message_done type
      log_system_debug "received WS message: length=#{@ws_message.size}"  if $oversip_debug

      case type

      when :text
        ws_message = @ws_message.to_str.force_encoding ::Encoding::UTF_8
        process_text_message ws_message

      when :binary
        process_binary_message @ws_message.to_str  # As IO::Buffer#to_str always generates Encoding::BINARY.
      end

      @ws_message.clear
      true
    end


    def tcp_closed
      nil
    end


    # Methods to be overriden by child classes.
    def process_text_message ws_message
    end

    def process_binary_message ws_message
    end


  end  # WsApp

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
oversip-1.1.0.beta5 lib/oversip/websocket/ws_app.rb
oversip-1.1.0.beta4 lib/oversip/websocket/ws_app.rb
oversip-1.1.0.beta3 lib/oversip/websocket/ws_app.rb