aboutsummaryrefslogtreecommitdiffstats
path: root/lib/plum/frame/ping.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/plum/frame/ping.rb')
-rw-r--r--lib/plum/frame/ping.rb24
1 files changed, 24 insertions, 0 deletions
diff --git a/lib/plum/frame/ping.rb b/lib/plum/frame/ping.rb
new file mode 100644
index 0000000..b0b3804
--- /dev/null
+++ b/lib/plum/frame/ping.rb
@@ -0,0 +1,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