balboa_worldwide_app 1.3.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class ControlConfiguration < Message
4
- MESSAGE_TYPE = "\xbf\x24".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x24").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 21
6
8
 
7
9
  attr_accessor :model, :version
8
10
 
9
11
  def initialize
10
12
  super
11
- @model = ''
13
+ @model = ""
12
14
  @version = 0
13
15
  end
14
16
 
@@ -23,15 +25,17 @@ module BWA
23
25
  end
24
26
 
25
27
  class ControlConfiguration2 < Message
26
- MESSAGE_TYPE = "\xbf\x2e".force_encoding(Encoding::ASCII_8BIT)
28
+ MESSAGE_TYPE = (+"\xbf\x2e").force_encoding(Encoding::ASCII_8BIT)
27
29
  MESSAGE_LENGTH = 6
28
30
 
29
- attr_accessor :pumps, :lights, :circ_pump, :blower, :mister, :aux
31
+ attr_accessor :pumps, :lights, :circulation_pump, :blower, :mister, :aux
30
32
 
31
33
  def initialize
34
+ super
35
+
32
36
  self.pumps = Array.new(6, 0)
33
37
  self.lights = Array.new(2, false)
34
- self.circ_pump = false
38
+ self.circulation_pump = false
35
39
  self.blower = 0
36
40
  self.mister = false
37
41
  self.aux = Array.new(2, false)
@@ -51,7 +55,7 @@ module BWA
51
55
  lights[1] = ((flags >> 6) & 0x03 != 0)
52
56
  flags = data[3].ord
53
57
  self.blower = flags & 0x03
54
- self.circ_pump = ((flags >> 6) & 0x03 != 0)
58
+ self.circulation_pump = ((flags >> 6) & 0x03 != 0)
55
59
  flags = data[4].ord
56
60
  self.mister = (flags & 0x30 != 0)
57
61
  aux[0] = (flags & 0x01 != 0)
@@ -59,17 +63,16 @@ module BWA
59
63
  end
60
64
 
61
65
  def inspect
62
- result = "#<BWA::Messages::ControlConfiguration2 "
63
66
  items = []
64
67
 
65
68
  items << "pumps=#{pumps.inspect}"
66
69
  items << "lights=#{lights.inspect}"
67
- items << "circ_pump" if circ_pump
70
+ items << "circulation_pump" if circulation_pump
68
71
  items << "blower=#{blower}" if blower != 0
69
72
  items << "mister" if mister
70
73
  items << "aux=#{aux.inspect}"
71
74
 
72
- result << items.join(' ') << ">"
75
+ "#<BWA::Messages::ControlConfiguration2 #{items.join(" ")}>"
73
76
  end
74
77
  end
75
78
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class ControlConfigurationRequest < Message
4
- MESSAGE_TYPE = "\xbf\x22".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x22").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 3
6
8
 
7
9
  attr_accessor :type
@@ -13,20 +15,20 @@ module BWA
13
15
 
14
16
  def parse(data)
15
17
  self.type = case data
16
- when "\x02\x00\x00"; 1
17
- when "\x00\x00\x01"; 2
18
- when "\x01\x00\x00"; 3
19
- else 0
20
- end
18
+ when "\x02\x00\x00" then 1
19
+ when "\x00\x00\x01" then 2
20
+ when "\x01\x00\x00" then 3
21
+ else 0
22
+ end
21
23
  end
22
24
 
23
25
  def serialize
24
26
  data = case type
25
- when 1; "\x02\x00\x00"
26
- when 2; "\x00\x00\x01"
27
- when 3; "\x01\x00\x00"
28
- else "\x00\x00\x00"
29
- end
27
+ when 1 then "\x02\x00\x00"
28
+ when 2 then "\x00\x00\x01"
29
+ when 3 then "\x01\x00\x00"
30
+ else "\x00\x00\x00"
31
+ end
30
32
  super(data)
31
33
  end
32
34
 
@@ -1,39 +1,67 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class FilterCycles < Message
4
- attr_reader :filter1_hour, :filter1_minute, :filter1_duration_hours, :filter1_duration_minutes,
5
- :filter2_enabled,
6
- :filter2_hour, :filter2_minute, :filter2_duration_hours, :filter2_duration_minutes
6
+ attr_accessor :cycle1_start_hour, :cycle1_start_minute, :cycle1_duration,
7
+ :cycle2_enabled, :cycle2_start_hour, :cycle2_start_minute, :cycle2_duration
8
+ alias_method :cycle2_enabled?, :cycle2_enabled
7
9
 
8
- MESSAGE_TYPE = "\xbf\x23".force_encoding(Encoding::ASCII_8BIT)
10
+ MESSAGE_TYPE = (+"\xbf\x23").force_encoding(Encoding::ASCII_8BIT)
9
11
  MESSAGE_LENGTH = 8
10
12
 
11
13
  def parse(data)
12
- @filter1_hour = data[0].ord
13
- @filter1_minute = data[1].ord
14
- @filter1_duration_hours = data[2].ord
15
- @filter1_duration_minutes = data[3].ord
16
-
17
- f2_hour = data[4].ord
18
- @filter2_enabled = !!(f2_hour & 0x80 == 0x80)
19
- @filter2_hour = f2_hour & 0x7f
20
- @filter2_minute = data[5].ord
21
- @filter2_duration_hours = data[6].ord
22
- @filter2_duration_minutes = data[7].ord
14
+ self.cycle1_start_hour = data[0].ord
15
+ self.cycle1_start_minute = data[1].ord
16
+ hours = data[2].ord
17
+ minutes = data[3].ord
18
+ self.cycle1_duration = (hours * 60) + minutes
19
+
20
+ c2_hour = data[4].ord
21
+ self.cycle2_enabled = !!(c2_hour & 0x80 == 0x80)
22
+ self.cycle2_start_hour = c2_hour & 0x7f
23
+ self.cycle2_start_minute = data[5].ord
24
+ hours = data[6].ord
25
+ minutes = data[7].ord
26
+ self.cycle2_duration = (hours * 60) + minutes
27
+ end
28
+
29
+ def serialize
30
+ data = cycle1_start_hour.chr
31
+ data += cycle1_start_minute.chr
32
+ data += (cycle1_duration / 60).chr
33
+ data += (cycle1_duration % 60).chr
34
+
35
+ # The cycle2 start hour is merged with the cycle2 enable.
36
+ # The high order bit of the byte is a flag to indicate this so we have
37
+ # to do a bit of different processing to set that.
38
+ # Get the filter 2 start hour
39
+ start_hour = cycle2_start_hour
40
+
41
+ # Check to see if we want filter 2 enabled (either because it changed or from the current configuration)
42
+ start_hour |= 0x80 if cycle2_enabled
43
+
44
+ data += start_hour.chr
45
+
46
+ data += cycle2_start_minute.chr
47
+ data += (cycle2_duration / 60).chr
48
+ data += (cycle2_duration % 60).chr
49
+
50
+ super(data)
23
51
  end
24
52
 
25
53
  def inspect
26
- result = "#<BWA::Messages::FilterCycles "
54
+ result = +"#<BWA::Messages::FilterCycles "
27
55
 
28
- result << "filter1 "
29
- result << self.class.format_duration(filter1_duration_hours, filter1_duration_minutes)
56
+ result << "cycle1 "
57
+ result << self.class.format_duration(cycle1_duration)
30
58
  result << "@"
31
- result << self.class.format_time(filter1_hour, filter1_minute)
59
+ result << self.class.format_time(cycle1_start_hour, cycle1_start_minute)
32
60
 
33
- result << " filter2(#{@filter2_enabled ? 'enabled' : 'disabled'}) "
34
- result << self.class.format_duration(filter2_duration_hours, filter2_duration_minutes)
61
+ result << " cycle2(#{@cycle2_enabled ? "enabled" : "disabled"}) "
62
+ result << self.class.format_duration(cycle2_duration)
35
63
  result << "@"
36
- result << self.class.format_time(filter2_hour, filter2_minute)
64
+ result << self.class.format_time(cycle2_start_hour, cycle2_start_minute)
37
65
 
38
66
  result << ">"
39
67
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class Ready < Message
4
- MESSAGE_TYPE = "\xbf\06".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\06").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 0
6
8
 
7
9
  def inspect
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
- class SetTemperature < Message
4
- MESSAGE_TYPE = "\xbf\x20".force_encoding(Encoding::ASCII_8BIT)
5
+ class SetTargetTemperature < Message
6
+ MESSAGE_TYPE = (+"\xbf\x20").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 1
6
8
 
7
9
  attr_accessor :temperature
@@ -20,7 +22,7 @@ module BWA
20
22
  end
21
23
 
22
24
  def inspect
23
- "#<BWA::Messages::SetTemperature #{temperature}º>"
25
+ "#<BWA::Messages::SetTargetTemperature #{temperature}°>"
24
26
  end
25
27
  end
26
28
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class SetTemperatureScale < Message
4
- MESSAGE_TYPE = "\xbf\x27".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x27").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 2
6
8
 
7
9
  attr_accessor :scale
@@ -12,7 +14,7 @@ module BWA
12
14
  end
13
15
 
14
16
  def parse(data)
15
- self.scale = data[1].ord == 0x00 ? :fahrenheit : :celsius
17
+ self.scale = data[1].ord.zero? ? :fahrenheit : :celsius
16
18
  end
17
19
 
18
20
  def serialize
@@ -22,7 +24,7 @@ module BWA
22
24
  end
23
25
 
24
26
  def inspect
25
- "#<BWA::Messages::SetTemperatureScale º#{scale.to_s[0].upcase}>"
27
+ "#<BWA::Messages::SetTemperatureScale °#{scale.to_s[0].upcase}>"
26
28
  end
27
29
  end
28
30
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class SetTime < Message
4
- MESSAGE_TYPE = "\xbf\x21".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x21").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 2
6
8
 
7
9
  attr_accessor :hour, :minute, :twenty_four_hour_time
@@ -24,7 +26,7 @@ module BWA
24
26
  end
25
27
 
26
28
  def inspect
27
- "#<BWA::Messages::SetTime #{Status.format_time(hour, minute, twenty_four_hour_time)}>"
29
+ "#<BWA::Messages::SetTime #{Status.format_time(hour, minute, twenty_four_hour_time: twenty_four_hour_time)}>"
28
30
  end
29
31
  end
30
32
  end
@@ -1,63 +1,72 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class Status < Message
4
6
  attr_accessor :hold,
5
7
  :priming,
6
8
  :heating_mode,
7
- :temperature_scale,
8
9
  :twenty_four_hour_time,
9
- :filter,
10
+ :filter_cycles,
10
11
  :heating,
11
12
  :temperature_range,
12
13
  :hour, :minute,
13
- :circ_pump,
14
+ :circulation_pump,
14
15
  :blower,
15
16
  :pumps,
16
17
  :lights,
17
18
  :mister,
18
19
  :aux,
19
- :current_temperature, :set_temperature
20
+ :current_temperature,
21
+ :target_temperature
22
+ attr_reader :temperature_scale
23
+ alias_method :hold?, :hold
24
+ alias_method :priming?, :priming
25
+ alias_method :twenty_four_hour_time?, :twenty_four_hour_time
26
+ alias_method :heating?, :heating
20
27
 
21
- MESSAGE_TYPE = "\xaf\x13".force_encoding(Encoding::ASCII_8BIT)
28
+ MESSAGE_TYPE = (+"\xaf\x13").force_encoding(Encoding::ASCII_8BIT)
22
29
  # additional features have been added in later versions
23
- MESSAGE_LENGTH = 24..32
30
+ MESSAGE_LENGTH = (24..32).freeze
24
31
 
25
32
  def initialize
33
+ super
34
+
26
35
  @src = 0xff
27
36
  self.hold = false
28
37
  self.priming = false
29
38
  self.heating_mode = :ready
30
39
  @temperature_scale = :fahrenheit
31
40
  self.twenty_four_hour_time = false
32
- self.filter = Array.new(2, false)
41
+ self.filter_cycles = Array.new(2, false)
33
42
  self.heating = false
34
43
  self.temperature_range = :high
35
44
  self.hour = self.minute = 0
36
- self.circ_pump = false
45
+ self.circulation_pump = false
37
46
  self.pumps = Array.new(6, 0)
38
47
  self.lights = Array.new(2, false)
39
48
  self.mister = false
40
49
  self.aux = Array.new(2, false)
41
- self.set_temperature = 100
50
+ self.target_temperature = 100
42
51
  end
43
52
 
44
53
  def parse(data)
45
54
  flags = data[0].ord
46
- self.hold = (flags & 0x05 != 0 )
55
+ self.hold = (flags & 0x05 != 0)
47
56
 
48
57
  flags = data[1].ord
49
58
  self.priming = (flags & 0x01 == 0x01)
50
59
  flags = data[5].ord
51
60
  self.heating_mode = case flags & 0x03
52
- when 0x00; :ready
53
- when 0x01; :rest
54
- when 0x02; :ready_in_rest
61
+ when 0x00 then :ready
62
+ when 0x01 then :rest
63
+ when 0x02 then :ready_in_rest
55
64
  end
56
65
  flags = data[9].ord
57
66
  self.temperature_scale = (flags & 0x01 == 0x01) ? :celsius : :fahrenheit
58
67
  self.twenty_four_hour_time = (flags & 0x02 == 0x02)
59
- filter[0] = (flags & 0x04 != 0)
60
- filter[1] = (flags & 0x08 != 0)
68
+ filter_cycles[0] = (flags & 0x04 != 0)
69
+ filter_cycles[1] = (flags & 0x08 != 0)
61
70
  flags = data[10].ord
62
71
  self.heating = (flags & 0x30 != 0)
63
72
  self.temperature_range = (flags & 0x04 == 0x04) ? :high : :low
@@ -71,7 +80,7 @@ module BWA
71
80
  pumps[5] = (flags >> 2) & 0x03
72
81
 
73
82
  flags = data[13].ord
74
- self.circ_pump = (flags & 0x02 == 0x02)
83
+ self.circulation_pump = (flags & 0x02 == 0x02)
75
84
  self.blower = (flags & 0x0C == 0x0C)
76
85
  flags = data[14].ord
77
86
  lights[0] = (flags & 0x03 != 0)
@@ -83,23 +92,22 @@ module BWA
83
92
  self.hour = data[3].ord
84
93
  self.minute = data[4].ord
85
94
  self.current_temperature = data[2].ord
86
- self.current_temperature = nil if self.current_temperature == 0xff
87
- self.set_temperature = data[20].ord
88
- if temperature_scale == :celsius
89
- self.current_temperature /= 2.0 if self.current_temperature
90
- self.set_temperature /= 2.0 if self.set_temperature
91
- end
95
+ self.current_temperature = nil if current_temperature == 0xff
96
+ self.target_temperature = data[20].ord
97
+
98
+ return unless temperature_scale == :celsius
99
+
100
+ self.current_temperature /= 2.0 if current_temperature
101
+ self.target_temperature /= 2.0 if target_temperature
92
102
  end
93
103
 
94
104
  def serialize
95
105
  data = "\x00" * 24
96
106
  data[0] = (hold ? 0x05 : 0x00).chr
97
107
  data[1] = (priming ? 0x01 : 0x00).chr
98
- data[5] = (case heating_mode
99
- when :ready; 0x00
100
- when :rest; 0x01
101
- when :ready_in_rest; 0x02
102
- end).chr
108
+ data[5] = { ready: 0x00,
109
+ rest: 0x01,
110
+ ready_in_rest: 0x02 }[heating_mode].chr
103
111
  flags = 0
104
112
  flags |= 0x01 if temperature_scale == :celsius
105
113
  flags |= 0x02 if twenty_four_hour_time
@@ -113,7 +121,7 @@ module BWA
113
121
  flags |= pump2 * 4
114
122
  data[11] = flags.chr
115
123
  flags = 0
116
- flags |= 0x02 if circ_pump
124
+ flags |= 0x02 if circulation_pump
117
125
  data[13] = flags.chr
118
126
  flags = 0
119
127
  flags |= 0x03 if light1
@@ -122,10 +130,10 @@ module BWA
122
130
  data[4] = minute.chr
123
131
  if temperature_scale == :celsius
124
132
  data[2] = (current_temperature ? (current_temperature * 2).to_i : 0xff).chr
125
- data[20] = (set_temperature * 2).to_i.chr
133
+ data[20] = (target_temperature * 2).to_i.chr
126
134
  else
127
135
  data[2] = (current_temperature.to_i || 0xff).chr
128
- data[20] = set_temperature.to_i.chr
136
+ data[20] = target_temperature.to_i.chr
129
137
  end
130
138
 
131
139
  super(data)
@@ -135,47 +143,46 @@ module BWA
135
143
  if value != @temperature_scale
136
144
  if value == :fahrenheit
137
145
  if current_temperature
138
- self.current_temperature *= 9.0/5
146
+ self.current_temperature *= 9.0 / 5
139
147
  self.current_temperature += 32
140
148
  self.current_temperature = current_temperature.round
141
149
  end
142
- self.set_temperature *= 9.0/5
143
- self.set_temperature += 32
144
- self.set_temperature = set_temperature.round
150
+ self.target_temperature *= 9.0 / 5
151
+ self.target_temperature += 32
152
+ self.target_temperature = target_temperature.round
145
153
  else
146
154
  if current_temperature
147
155
  self.current_temperature -= 32
148
- self.current_temperature *= 5.0/90
156
+ self.current_temperature *= 5.0 / 90
149
157
  self.current_temperature = (current_temperature * 2).round / 2.0
150
158
  end
151
- self.set_temperature -= 32
152
- self.set_temperature *= 5.0/9
153
- self.set_temperature = (set_temperature * 2).round / 2.0
159
+ self.target_temperature -= 32
160
+ self.target_temperature *= 5.0 / 9
161
+ self.target_temperature = (target_temperature * 2).round / 2.0
154
162
  end
155
163
  end
156
164
  @temperature_scale = value
157
165
  end
158
166
 
159
167
  def inspect
160
- result = "#<BWA::Messages::Status "
161
168
  items = []
162
169
 
163
170
  items << "hold" if hold
164
171
  items << "priming" if priming
165
- items << self.class.format_time(hour, minute, twenty_four_hour_time)
166
- items << "#{current_temperature || '--'}/#{set_temperature}º#{temperature_scale.to_s[0].upcase}"
167
- items << "filter=#{filter.inspect}"
172
+ items << self.class.format_time(hour, minute, twenty_four_hour_time: twenty_four_hour_time)
173
+ items << "#{current_temperature || "--"}/#{target_temperature}°#{temperature_scale.to_s[0].upcase}"
174
+ items << "filter_cycles=#{filter_cycles.inspect}"
168
175
  items << heating_mode
169
176
  items << "heating" if heating
170
177
  items << temperature_range
171
- items << "circ_pump" if circ_pump
178
+ items << "circulation_pump" if circulation_pump
172
179
  items << "blower" if blower
173
180
  items << "pumps=#{pumps.inspect}"
174
181
  items << "lights=#{lights.inspect}"
175
182
  items << "aux=#{aux.inspect}"
176
183
  items << "mister" if mister
177
184
 
178
- result << items.join(' ') << ">"
185
+ "#<BWA::Messages::Status #{items.join(" ")}>"
179
186
  end
180
187
  end
181
188
  end
@@ -1,8 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BWA
2
4
  module Messages
3
5
  class ToggleItem < Message
4
- MESSAGE_TYPE = "\xbf\x11".force_encoding(Encoding::ASCII_8BIT)
6
+ MESSAGE_TYPE = (+"\xbf\x11").force_encoding(Encoding::ASCII_8BIT)
5
7
  MESSAGE_LENGTH = 2
8
+ ITEMS = {
9
+ normal_operation: 0x01,
10
+ clear_notification: 0x03,
11
+ pump1: 0x04,
12
+ pump2: 0x05,
13
+ pump3: 0x06,
14
+ pump4: 0x07,
15
+ pump5: 0x08,
16
+ pump6: 0x09,
17
+ blower: 0x0c,
18
+ mister: 0x0e,
19
+ light1: 0x11,
20
+ light2: 0x12,
21
+ aux1: 0x16,
22
+ aux2: 0x17,
23
+ hold: 0x3c,
24
+ temperature_range: 0x50,
25
+ heating_mode: 0x51
26
+ }.freeze
6
27
 
7
28
  attr_accessor :item
8
29
 
@@ -12,35 +33,16 @@ module BWA
12
33
  end
13
34
 
14
35
  def parse(data)
15
- self.item = case data[0].ord
16
- when 0x04; :pump1
17
- when 0x05; :pump2
18
- when 0x0c; :blower
19
- when 0x0e; :mister
20
- when 0x11; :light1
21
- when 0x3c; :hold
22
- when 0x50; :temperature_range
23
- when 0x51; :heating_mode
24
- else; data[0].ord
25
- end
36
+ self.item = ITEMS.invert[data[0].ord] || data[0].ord
26
37
  end
27
38
 
28
39
  def serialize
29
- data = "\x00\x00"
30
- if item.is_a? Integer
31
- data[0] = item.chr
32
- else
33
- data[0] = (case item
34
- when :pump1; 0x04
35
- when :pump2; 0x05
36
- when :blower; 0x0c
37
- when :mister; 0x0e
38
- when :light1; 0x11
39
- when :hold; 0x3c
40
- when :temperature_range; 0x50
41
- when :heating_mode; 0x51
42
- end).chr
43
- end
40
+ data = +"\x00\x00"
41
+ data[0] = if item.is_a? Integer
42
+ item.chr
43
+ else
44
+ ITEMS[item].chr
45
+ end
44
46
  super(data)
45
47
  end
46
48
 
data/lib/bwa/proxy.rb CHANGED
@@ -1,32 +1,31 @@
1
- require 'socket'
2
- require 'bwa/logger'
3
- require 'bwa/message'
1
+ # frozen_string_literal: true
2
+
3
+ require "socket"
4
+ require "bwa/logger"
5
+ require "bwa/message"
4
6
 
5
7
  module BWA
6
8
  class Proxy
7
- def initialize(host, port: 4257, listen_port: 4257)
9
+ def initialize(host, port: 4257)
8
10
  @host, @port = host, port
9
11
  @listen_socket = TCPServer.open(port)
10
12
  end
11
13
 
12
14
  def run
13
- loop do
14
- client_socket = @listen_socket.accept
15
- server_socket = TCPSocket.new(@host, @port)
16
- t1 = Thread.new do
17
- shuffle_messages(client_socket, server_socket, "Client")
18
- end
19
- t2 = Thread.new do
20
- shuffle_messages(server_socket, client_socket, "Server")
21
- end
22
- t1.join
23
- t2.join
24
- break
15
+ client_socket = @listen_socket.accept
16
+ server_socket = TCPSocket.new(@host, @port)
17
+ t1 = Thread.new do
18
+ shuffle_messages(client_socket, server_socket, "Client")
19
+ end
20
+ t2 = Thread.new do
21
+ shuffle_messages(server_socket, client_socket, "Server")
25
22
  end
23
+ t1.join
24
+ t2.join
26
25
  end
27
26
 
28
27
  def shuffle_messages(socket1, socket2, tag)
29
- leftover_data = "".force_encoding(Encoding::ASCII_8BIT)
28
+ leftover_data = (+"").force_encoding(Encoding::ASCII_8BIT)
30
29
  loop do
31
30
  if leftover_data.length < 2 || leftover_data.length < leftover_data[1].ord + 2
32
31
  begin
@@ -42,7 +41,7 @@ module BWA
42
41
  end
43
42
  data_length = leftover_data[1].ord
44
43
  data = leftover_data[0...(data_length + 2)]
45
- leftover_data = leftover_data[(data_length + 2)..-1] || ''
44
+ leftover_data = leftover_data[(data_length + 2)..-1] || ""
46
45
  begin
47
46
  message = Message.parse(data)
48
47
  BWA.logger.info "#{tag}: #{message.inspect}"