lib/websocket/handshake/base.rb in websocket-1.0.7 vs lib/websocket/handshake/base.rb in websocket-1.1.0

- old
+ new

@@ -1,16 +1,18 @@ module WebSocket module Handshake # @abstract Subclass and override to implement custom handshakes class Base + include ExceptionHandler attr_reader :host, :port, :path, :query, - :error, :state, :version, :secure + :state, :version, :secure, :headers # Initialize new WebSocket Handshake and set it's state to :new def initialize(args = {}) @state = :new + @handler = nil @data = "" @headers = {} end @@ -20,12 +22,13 @@ end # Return textual representation of handshake request or response # @return [String] text of response def to_s - "" + @handler ? @handler.to_s : "" end + rescue_method :to_s, :return => "" # Recreate inspect as #to_s was overwritten def inspect vars = self.instance_variables.map{|v| "#{v}=#{instance_variable_get(v).inspect}"}.join(", ") insp = "#{self.class}:0x%08x" % (self.__id__ * 2) @@ -39,12 +42,13 @@ end # Is parsed data valid? # @return [Boolean] False if some errors occured. Reason for error could be found in error method def valid? - finished? && @error == nil + finished? && @error == nil && @handler && @handler.valid? end + rescue_method :valid?, :return => false # @abstract Should send data after parsing is finished? def should_respond? raise NotImplementedError end @@ -78,11 +82,11 @@ # Changes state to error and sets error message # @param [String] message Error message to set def set_error(message) @state = :error - @error = message + super end HEADER = /^([^:]+):\s*(.+)$/ # Parse data imported to handshake and sets state to finished if necessary. @@ -92,10 +96,10 @@ return false unless @leftovers # The whole header has not been received yet. lines = header.split("\r\n") first_line = lines.shift - return false unless parse_first_line(first_line) + parse_first_line(first_line) lines.each do |line| h = HEADER.match(line) @headers[h[1].strip.downcase] = h[2].strip if h end