Sha256: c6e97391e3c44219293f90535d85be0e7f7038cf74af224b743fc979488b6535

Contents?: true

Size: 1.01 KB

Versions: 2

Compression:

Stored size: 1.01 KB

Contents

require 'json'
require 'deepstream/constants'

module Deepstream
  class Message
    attr_reader :action, :data, :topic, :sending_deadline

    def self.parse(*args)
      args.first.is_a?(self) ? args.first : new(*args)
    end

    def initialize(*args)
      if args.one?
        args = args.first.delete(MESSAGE_SEPARATOR).split(MESSAGE_PART_SEPARATOR)
      end
      @sending_deadline = nil
      @topic, @action = args.take(2).map(&:to_sym)
      @data = args.drop(2)
    rescue
      ''
    end

    def set_timeout(timeout)
      @sending_deadline = Time.now + timeout
    end

    def to_s
      args = [@topic, @action]
      args << @data unless (@data.nil? || @data.empty?)
      args.join(MESSAGE_PART_SEPARATOR).concat(MESSAGE_SEPARATOR)
    end

    def inspect
      "#{self.class.name}: #{@topic} #{@action} #{@data}"
    end

    def needs_authentication?
      ![TOPIC::CONNECTION, TOPIC::AUTH].include?(@topic)
    end

    def expired?
      @sending_deadline && @sending_deadline < Time.now
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
deepstream-1.0.1 lib/deepstream/message.rb
deepstream-1.0.0 lib/deepstream/message.rb