aboutsummaryrefslogtreecommitdiffstats
path: root/lib/plum/frame/ping.rb
blob: b0b3804d578cf52ff897a32a382fa30275f94e6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# frozen-string-literal: true

using Plum::BinaryString
module Plum
  class Frame::Ping < Frame
    register_subclass 0x06

    # Creates a PING frame.
    # @overload ping(ack, payload)
    #   @param ack [Symbol] Pass :ack to create an ACK frame.
    #   @param payload [String] 8 bytes length data to send.
    # @overload ping(payload = "plum\x00\x00\x00\x00")
    #   @param payload [String] 8 bytes length data to send.
    def initialize(arg1 = "plum\x00\x00\x00\x00".b, arg2 = nil)
      if !arg2
        raise ArgumentError.new("data must be 8 octets") if arg1.bytesize != 8
        arg1 = arg1.b if arg1.encoding != Encoding::BINARY
        initialize_base(type: :ping, stream_id: 0, payload: arg1)
      else
        initialize_base(type: :ping, stream_id: 0, flags: [:ack], payload: arg2)
      end
    end
  end
end