/
echo.rb
43 lines (37 loc) · 1.11 KB
/
echo.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
require 'pio/open_flow'
module Pio
module OpenFlow
# Base class of Echo Request and Reply.
class Echo < OpenFlow::Message
# rubocop:disable MethodLength
def self.inherited(child)
child.module_eval <<-EOS
class Format < BinData::Record
extend OpenFlow::Format
header version: :of_version,
message_type: :of_message_type
string :body, read_length: -> { message_length - header_length }
def user_data
body
end
end
EOS
end
# rubocop:enable MethodLength
def self.version(version)
const_get(:Format).tap do |klass|
klass.__send__(:define_method, :of_version) { version }
klass.class_eval { private :of_version }
end
end
def self.message_type(message_type)
const_get(:Format).tap do |klass|
klass.__send__(:define_method, :of_message_type) { message_type }
klass.class_eval { private :of_message_type }
end
end
body_option :body
body_option :user_data
end
end
end