bayserver-core 2.3.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/lib/baykit/bayserver/agent/accept_handler.rb +0 -26
  3. data/lib/baykit/bayserver/agent/channel_listener.rb +6 -6
  4. data/lib/baykit/bayserver/agent/command_receiver.rb +97 -38
  5. data/lib/baykit/bayserver/agent/grand_agent.rb +444 -134
  6. data/lib/baykit/bayserver/agent/letter.rb +30 -0
  7. data/lib/baykit/bayserver/agent/lifecycle_listener.rb +9 -7
  8. data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +298 -0
  9. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +257 -0
  10. data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +52 -0
  11. data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +150 -0
  12. data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +129 -0
  13. data/lib/baykit/bayserver/agent/multiplexer/rudder_state.rb +81 -0
  14. data/lib/baykit/bayserver/agent/multiplexer/secure_transporter.rb +50 -0
  15. data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +561 -0
  16. data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +311 -0
  17. data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +194 -0
  18. data/lib/baykit/bayserver/agent/multiplexer/transporter.rb +61 -0
  19. data/lib/baykit/bayserver/agent/multiplexer/write_unit.rb +30 -0
  20. data/lib/baykit/bayserver/agent/non_blocking_handler.rb +0 -319
  21. data/lib/baykit/bayserver/agent/signal/signal_agent.rb +2 -1
  22. data/lib/baykit/bayserver/agent/timer_handler.rb +1 -1
  23. data/lib/baykit/bayserver/agent/transporter/data_listener.rb +7 -7
  24. data/lib/baykit/bayserver/agent/transporter/package.rb +0 -3
  25. data/lib/baykit/bayserver/agent/transporter/transporter.rb +5 -139
  26. data/lib/baykit/bayserver/bay_log.rb +1 -0
  27. data/lib/baykit/bayserver/bayserver.rb +32 -28
  28. data/lib/baykit/bayserver/{util → common}/groups.rb +1 -1
  29. data/lib/baykit/bayserver/common/inbound_handler.rb +12 -0
  30. data/lib/baykit/bayserver/{docker/base → common}/inbound_ship.rb +94 -19
  31. data/lib/baykit/bayserver/{docker/base → common}/inbound_ship_store.rb +7 -9
  32. data/lib/baykit/bayserver/common/multiplexer.rb +98 -0
  33. data/lib/baykit/bayserver/common/postpone.rb +15 -0
  34. data/lib/baykit/bayserver/common/read_only_ship.rb +42 -0
  35. data/lib/baykit/bayserver/common/recipient.rb +24 -0
  36. data/lib/baykit/bayserver/common/vehicle.rb +24 -0
  37. data/lib/baykit/bayserver/common/vehicle_runner.rb +127 -0
  38. data/lib/baykit/bayserver/{docker/warp → common}/warp_data.rb +18 -10
  39. data/lib/baykit/bayserver/common/warp_handler.rb +27 -0
  40. data/lib/baykit/bayserver/{docker/warp → common}/warp_ship.rb +107 -27
  41. data/lib/baykit/bayserver/{docker/warp → common}/warp_ship_store.rb +3 -8
  42. data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +2 -2
  43. data/lib/baykit/bayserver/docker/base/port_base.rb +59 -27
  44. data/lib/baykit/bayserver/docker/{warp/warp_docker.rb → base/warp_base.rb} +43 -50
  45. data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +118 -31
  46. data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +60 -63
  47. data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +11 -10
  48. data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +13 -4
  49. data/lib/baykit/bayserver/docker/city.rb +27 -13
  50. data/lib/baykit/bayserver/docker/club.rb +8 -8
  51. data/lib/baykit/bayserver/docker/docker.rb +9 -1
  52. data/lib/baykit/bayserver/docker/harbor.rb +184 -22
  53. data/lib/baykit/bayserver/docker/permission.rb +7 -6
  54. data/lib/baykit/bayserver/docker/port.rb +39 -11
  55. data/lib/baykit/bayserver/docker/secure.rb +11 -9
  56. data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +99 -4
  57. data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +6 -2
  58. data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +92 -0
  59. data/lib/baykit/bayserver/docker/town.rb +31 -15
  60. data/lib/baykit/bayserver/docker/trouble.rb +17 -5
  61. data/lib/baykit/bayserver/docker/warp.rb +34 -0
  62. data/lib/baykit/bayserver/mem_usage.rb +9 -9
  63. data/lib/baykit/bayserver/protocol/command_packer.rb +1 -8
  64. data/lib/baykit/bayserver/protocol/packet_packer.rb +7 -11
  65. data/lib/baykit/bayserver/protocol/packet_store.rb +4 -4
  66. data/lib/baykit/bayserver/protocol/protocol_handler.rb +26 -8
  67. data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +5 -5
  68. data/lib/baykit/bayserver/rudders/io_rudder.rb +62 -0
  69. data/lib/baykit/bayserver/rudders/rudder.rb +29 -0
  70. data/lib/baykit/bayserver/{watercraft → ships}/ship.rb +65 -41
  71. data/lib/baykit/bayserver/taxi/taxi.rb +15 -10
  72. data/lib/baykit/bayserver/taxi/taxi_runner.rb +9 -94
  73. data/lib/baykit/bayserver/tours/read_file_taxi.rb +2 -2
  74. data/lib/baykit/bayserver/tours/req_content_handler.rb +16 -13
  75. data/lib/baykit/bayserver/tours/tour.rb +2 -2
  76. data/lib/baykit/bayserver/tours/tour_handler.rb +36 -0
  77. data/lib/baykit/bayserver/tours/tour_req.rb +14 -24
  78. data/lib/baykit/bayserver/tours/tour_res.rb +5 -89
  79. data/lib/baykit/bayserver/tours/tour_store.rb +5 -5
  80. data/lib/baykit/bayserver/train/train_runner.rb +17 -13
  81. data/lib/baykit/bayserver/util/data_consume_listener.rb +1 -1
  82. data/lib/baykit/bayserver/util/executor_service.rb +11 -7
  83. data/lib/baykit/bayserver/util/ip_matcher.rb +9 -39
  84. data/lib/baykit/bayserver/util/locale.rb +1 -1
  85. data/lib/baykit/bayserver/util/selector.rb +24 -5
  86. data/lib/baykit/bayserver/util/sys_util.rb +6 -6
  87. data/lib/baykit/bayserver/version.rb +1 -1
  88. metadata +37 -18
  89. data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +0 -231
  90. data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +0 -55
  91. data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +0 -81
  92. data/lib/baykit/bayserver/docker/base/inbound_handler.rb +0 -42
  93. data/lib/baykit/bayserver/docker/warp/package.rb +0 -4
  94. data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +0 -112
  95. data/lib/baykit/bayserver/docker/warp/warp_handler.rb +0 -38
  96. /data/lib/baykit/bayserver/{util → common}/cities.rb +0 -0
@@ -0,0 +1,127 @@
1
+ require 'baykit/bayserver/bayserver'
2
+ require 'baykit/bayserver/agent/grand_agent'
3
+ require 'baykit/bayserver/agent/timer_handler'
4
+ require 'baykit/bayserver/agent/lifecycle_listener'
5
+ require 'baykit/bayserver/util/executor_service'
6
+ require 'baykit/bayserver/sink'
7
+
8
+ module Baykit
9
+ module BayServer
10
+ module Common
11
+ class VehicleRunner
12
+
13
+ class AgentListener
14
+ include Baykit::BayServer::Agent::LifecycleListener # implements
15
+ include Baykit::BayServer::Agent
16
+
17
+ attr :runner
18
+ def initialize(runner)
19
+ @runner = runner
20
+ end
21
+
22
+ def add(agt_id)
23
+ while @runner.services.length < agt_id
24
+ @runner.services << nil
25
+ end
26
+ @runner.services[agt_id - 1] = VehicleRunner::VehicleService.new(GrandAgent.get(agt_id), @runner)
27
+ end
28
+
29
+ def remove(agt_id)
30
+ BayLog.debug("agt#%d remove VehicleRunner", agt_id)
31
+ @runner.services[agt_id - 1].terminate
32
+ @runner.services[agt_id - 1] = nil
33
+ end
34
+ end
35
+
36
+
37
+ class VehicleService
38
+ include Baykit::BayServer::Util
39
+
40
+ attr :agent
41
+ attr :exe
42
+ attr :runnings
43
+ attr :runnings_lock
44
+
45
+ def initialize(agt, runner)
46
+ @agent = agt
47
+ @agent.add_timer_handler(self)
48
+ @runnings = []
49
+ @runnings_lock = Mutex.new
50
+ @exe = ExecutorService.new("Runner", runner.max_vehicles)
51
+ end
52
+
53
+ ########################################
54
+ # Implements TimerHandler
55
+ ########################################
56
+ def on_timer
57
+ @runnings_lock.synchronize do
58
+ @runnings.each do |vcl|
59
+ vcl.on_timer
60
+ end
61
+ end
62
+ end
63
+
64
+
65
+ ########################################
66
+ # Private methods
67
+ ########################################
68
+
69
+ def terminate()
70
+ @agent.remove_timer_handler(self)
71
+ @exe.shutdown
72
+ end
73
+
74
+ def submit(vcl)
75
+ @exe.submit() do
76
+ if @agent.aborted
77
+ BayLog.error("%s Agent is aborted", @agent)
78
+ return
79
+ end
80
+
81
+ @runnings_lock.synchronize do
82
+ @runnings << vcl
83
+ end
84
+
85
+ begin
86
+ vcl.run
87
+ rescue => e
88
+ BayLog.fatal_e(e)
89
+ @agent.req_shutdown
90
+ ensure
91
+ @runnings_lock.synchronize do
92
+ @runnings.delete(vcl)
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ include Baykit::BayServer::Agent
100
+
101
+ attr :max_vehicles
102
+ attr :services
103
+
104
+ def initialize
105
+ @max_vehicles = 0
106
+ @services = []
107
+ end
108
+
109
+ ########################################
110
+ # Custom methods
111
+ ########################################
112
+ def init(max)
113
+ if(max <= 0)
114
+ raise Sink.new()
115
+ end
116
+ @max_vehicles = max
117
+ GrandAgent.add_lifecycle_listener(AgentListener.new(self))
118
+ end
119
+
120
+ def post(agt_id, vcl)
121
+ @services[agt_id - 1].submit(vcl)
122
+ end
123
+
124
+ end
125
+ end
126
+ end
127
+ end
@@ -1,12 +1,13 @@
1
+ require 'baykit/bayserver/agent/grand_agent'
1
2
  require 'baykit/bayserver/tours/req_content_handler'
2
3
 
3
4
  module Baykit
4
5
  module BayServer
5
- module Docker
6
- module Warp
6
+ module Common
7
7
  class WarpData
8
8
  include Baykit::BayServer::Tours::ReqContentHandler # implements
9
9
  include Baykit::BayServer::Util
10
+ include Baykit::BayServer::Agent
10
11
 
11
12
  attr :warp_ship
12
13
  attr :warp_ship_id
@@ -26,7 +27,10 @@ module Baykit
26
27
  @ended = false
27
28
  end
28
29
 
29
- def on_read_content(tur, buf, start, len)
30
+ ################################
31
+ # Implements ReqContentHandler
32
+ ################################
33
+ def on_read_req_content(tur, buf, start, len, &lis)
30
34
  BayLog.debug("%s Read req content tur=%s len=%d", @warp_ship, tur, len);
31
35
  @warp_ship.check_ship_id(@warp_ship_id)
32
36
  max_len = @warp_ship.protocol_handler.max_req_packet_data_size()
@@ -44,34 +48,39 @@ module Baykit
44
48
  buf = buf.dup()
45
49
  end
46
50
 
47
- @warp_ship.warp_handler.post_warp_contents(
51
+ @warp_ship.warp_handler.send_res_content(
48
52
  tur,
49
53
  buf,
50
54
  start + pos,
51
55
  post_len) do
52
- tur.req.consumed(tur_id, len)
56
+ tur.req.consumed(tur_id, len, &lis)
53
57
  end
54
58
  pos += max_len
55
59
  end
56
60
  end
57
61
 
58
- def on_end_content(tur)
62
+ def on_end_req_content(tur)
59
63
  BayLog.debug("%s End req content tur=%s", @warp_ship, tur)
60
64
  @warp_ship.check_ship_id(@warp_ship_id)
61
- @warp_ship.warp_handler.post_warp_end(tur)
65
+ @warp_ship.warp_handler.send_end_tour(tur, false) do
66
+ agt = GrandAgent.get(@warp_ship.agent_id)
67
+ agt.net_multiplexer.req_read(@warp_ship.rudder)
68
+ end
62
69
  end
63
70
 
64
- def on_abort(tur)
71
+ def on_abort_req(tur)
65
72
  BayLog.debug("%s on req abort tur=%s", @warp_ship, tur)
66
73
  @warp_ship.check_ship_id(@warp_ship_id)
67
74
  @warp_ship.abort(@warp_ship_id)
68
75
  return false # not aborted immediately
69
76
  end
70
77
 
78
+ ################################
79
+ # Other methods
80
+ ################################
71
81
 
72
82
  def start
73
83
  if !@started
74
- @warp_ship.protocol_handler.command_packer.flush(@warp_ship)
75
84
  BayLog.debug("%s Start Warp tour", self)
76
85
  @warp_ship.flush()
77
86
  @started = true
@@ -86,7 +95,6 @@ module Baykit
86
95
  return tur.req.content_handler
87
96
  end
88
97
  end
89
- end
90
98
  end
91
99
  end
92
100
  end
@@ -0,0 +1,27 @@
1
+ require 'baykit/bayserver/tours/tour_handler'
2
+
3
+ module Baykit
4
+ module BayServer
5
+ module Common
6
+ module WarpHandler # interface
7
+ include Baykit::BayServer::Tours::TourHandler
8
+
9
+ def next_warp_id()
10
+ raise NotImplementedError.new
11
+ end
12
+
13
+ def new_warp_data(warp_id)
14
+ raise NotImplementedError.new
15
+ end
16
+
17
+ #
18
+ # Verify if protocol is allowed
19
+ #
20
+ def verify_protocol(protocol)
21
+ raise NotImplementedError.new
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,20 +1,20 @@
1
1
  require 'baykit/bayserver/util/counter'
2
2
  require 'baykit/bayserver/util/http_status'
3
- require 'baykit/bayserver/docker/warp/warp_ship'
3
+ require 'baykit/bayserver/common/warp_ship'
4
4
 
5
5
  module Baykit
6
6
  module BayServer
7
- module Docker
8
- module Warp
9
- class WarpShip < Baykit::BayServer::WaterCraft::Ship
7
+ module Common
8
+ class WarpShip < Baykit::BayServer::Ships::Ship
10
9
  include Baykit::BayServer::Agent
11
- include Baykit::BayServer::WaterCraft
10
+ include Baykit::BayServer::Ships
12
11
  include Baykit::BayServer::Tours
13
12
  include Baykit::BayServer::Util
14
13
 
15
14
  attr :tour_map
16
15
  attr :docker
17
16
 
17
+ attr :protocol_handler
18
18
  attr_accessor :connected
19
19
  attr :socket_timeout_sec
20
20
  attr :lock
@@ -30,17 +30,29 @@ module Baykit
30
30
  @cmd_buf = []
31
31
  end
32
32
 
33
+ def init_warp(rd, agt_id, tp, dkr, proto_hnd)
34
+ init(agt_id, rd, tp)
35
+ @docker = dkr
36
+ @socket_timeout_sec = @docker.timeout_sec >= 0 ? @docker.timeout_sec : BayServer.harbor.socket_timeout_sec
37
+ @protocol_handler = proto_hnd
38
+ @protocol_handler.init(self)
39
+ end
40
+
33
41
  def to_s()
34
- return "warp##{@ship_id}/#{@object_id}[#{protocol}]"
42
+ protocol = ""
43
+ if @protocol_handler != nil
44
+ protocol = "[#{@protocol_handler.protocol}]"
45
+ end
46
+ return "agt##{agent_id} wsip##{@ship_id}/#{@object_id}[#{protocol}]"
35
47
  end
36
48
 
37
49
  def inspect
38
50
  to_s
39
51
  end
40
52
 
41
- ######################################################
53
+ #########################################
42
54
  # Implements Reusable
43
- ######################################################
55
+ #########################################
44
56
 
45
57
  def reset()
46
58
  super
@@ -52,19 +64,89 @@ module Baykit
52
64
  @cmd_buf = []
53
65
  end
54
66
 
67
+ #########################################
68
+ # Implements Ship
69
+ #########################################
70
+ def notify_handshake_done(proto)
71
+ @protocol_handler.verify_protocol(protocol)
72
+ NextSocketAction::CONTINUE
73
+ end
55
74
 
56
- ######################################################
57
- # Other methods
58
- ######################################################
59
- def init_warp(skt, agt, tp, dkr, proto_hnd)
60
- init(skt, agt, tp)
61
- @docker = dkr
62
- @socket_timeout_sec = @docker.timeout_sec >= 0 ? @docker.timeout_sec : BayServer.harbor.socket_timeout_sec
63
- set_protocol_handler(proto_hnd)
75
+ def notify_connect()
76
+ @connected = true
77
+ @tour_map.values.each do |pair|
78
+ tur = pair[1]
79
+ tur.check_tour_id pair[0]
80
+ WarpData.get(tur).start
81
+ end
82
+ NextSocketAction::CONTINUE
64
83
  end
65
84
 
85
+ def notify_read(buf)
86
+ return @protocol_handler.bytes_received(buf)
87
+ end
88
+
89
+ def notify_eof()
90
+ BayLog.debug("%s EOF detected", self)
91
+
92
+ if @tour_map.empty?
93
+ BayLog.debug("%s No warp tours. only close", self)
94
+ return NextSocketAction::CLOSE
95
+ end
96
+
97
+ @tour_map.each do |warp_id, pair|
98
+ tur = pair[1]
99
+ tur.check_tour_id pair[0]
100
+
101
+ begin
102
+ if !tur.res.header_sent
103
+ BayLog.debug("%s Send ServiceUnavailable: tur=%s", self, tur)
104
+ tur.res.send_error(Tour::TOUR_ID_NOCHECK, HttpStatus::SERVICE_UNAVAILABLE, "Server closed on reading headers")
105
+ else
106
+ # NOT treat EOF as Error
107
+ BayLog.debug("%s EOF is not an error: tur=%s", self, tur)
108
+ tur.res.end_res_content(Tour::TOUR_ID_NOCHECK)
109
+ end
110
+ rescue IOError => e
111
+ BayLog::debug_e(e)
112
+ end
113
+ end
114
+
115
+ @tour_map.clear()
116
+ return NextSocketAction::CLOSE
117
+ end
118
+
119
+ def notify_error(e)
120
+ BayLog.error_e(e, "notify_error")
121
+ end
122
+
123
+ def notify_protocol_error(e)
124
+ BayLog.error_e(e)
125
+ notify_error_to_owner_tour(HttpStatus::SERVICE_UNAVAILABLE, e.message)
126
+ true
127
+ end
128
+
129
+ def notify_close
130
+ BayLog.debug("%s notifyClose", self)
131
+ notify_error_to_owner_tour(HttpStatus::SERVICE_UNAVAILABLE, "#{self} server closed")
132
+ end_ship()
133
+ end
134
+
135
+ def check_timeout(duration_sec)
136
+ if is_timeout(duration_sec)
137
+ notify_error_to_owner_tour(HttpStatus::GATEWAY_TIMEOUT, "#{self} server timeout")
138
+ true
139
+ else
140
+ false
141
+ end
142
+ end
143
+
144
+ ################################
145
+ # Other methods
146
+ ################################
147
+
66
148
  def warp_handler
67
- return @protocol_handler
149
+ return @protocol_handler.command_handler
68
150
  end
69
151
 
70
152
  def start_warp_tour(tur)
@@ -80,7 +162,7 @@ module Baykit
80
162
  end
81
163
 
82
164
  @tour_map[warp_id] = [tur.id(), tur]
83
- w_hnd.post_warp_headers(tur)
165
+ w_hnd.send_res_headers(tur)
84
166
 
85
167
  if @connected
86
168
  BayLog.debug("%s is already connected. Start warp tour:%s", wdat, tur);
@@ -97,7 +179,7 @@ module Baykit
97
179
  else
98
180
  @tour_map.delete wdat.warp_id
99
181
  end
100
- @docker.keep_ship(self)
182
+ @docker.keep(self)
101
183
  end
102
184
 
103
185
  def notify_service_unavailable(msg)
@@ -137,7 +219,7 @@ module Baykit
137
219
  BayLog.error_e(e)
138
220
  end
139
221
  else
140
- tur.res.end_content(Tour::TOUR_ID_NOCHECK)
222
+ tur.res.end_res_content(Tour::TOUR_ID_NOCHECK)
141
223
  end
142
224
  end
143
225
  @tour_map.clear
@@ -146,13 +228,12 @@ module Baykit
146
228
 
147
229
 
148
230
  def end_ship()
149
- @docker.return_protocol_handler(@agent, @protocol_handler)
150
- @docker.return_ship(self)
231
+ @docker.on_end_ship(self)
151
232
  end
152
233
 
153
234
  def abort(check_id)
154
235
  check_ship_id(check_id)
155
- @postman.abort
236
+ @transporter.req_close(@rudder)
156
237
  end
157
238
 
158
239
  def is_timeout(duration)
@@ -170,14 +251,14 @@ module Baykit
170
251
  return timeout
171
252
  end
172
253
 
173
- def post(cmd, listener=nil)
254
+ def post(cmd, &listener)
174
255
  if !@connected
175
256
  @cmd_buf << [cmd, listener]
176
257
  else
177
258
  if cmd == nil
178
259
  listener.call()
179
260
  else
180
- @protocol_handler.command_packer.post(self, cmd, &listener)
261
+ @protocol_handler.post(cmd, &listener)
181
262
  end
182
263
  end
183
264
  end
@@ -188,13 +269,12 @@ module Baykit
188
269
  if cmd == nil
189
270
  lis.call()
190
271
  else
191
- @protocol_handler.command_packer.post(self, cmd, &lis)
272
+ @protocol_handler.post(cmd, &lis)
192
273
  end
193
274
  end
194
275
  @cmd_buf = []
195
276
  end
196
277
  end
197
278
  end
198
- end
199
279
  end
200
280
  end
@@ -1,14 +1,13 @@
1
1
  require 'baykit/bayserver/protocol/packet_store'
2
- require 'baykit/bayserver/docker/warp/package'
2
+ require 'baykit/bayserver/common/warp_ship'
3
3
 
4
4
  module Baykit
5
5
  module BayServer
6
- module Docker
7
- module Warp
6
+ module Common
8
7
  class WarpShipStore < Baykit::BayServer::Util::ObjectStore
9
8
  include Baykit::BayServer::Protocol
10
9
  include Baykit::BayServer::Util
11
- include Baykit::BayServer::Docker::Warp
10
+ include Baykit::BayServer::Common
12
11
 
13
12
  attr :keep_list
14
13
  attr :busy_list
@@ -49,9 +48,6 @@ module Baykit
49
48
  if wsip == nil
50
49
  raise Sink.new("BUG! ship is null")
51
50
  end
52
- if wsip.postman != nil && wsip.postman.zombie?
53
- raise Sink("channel is zombie: %s", wsip)
54
- end
55
51
  @busy_list.append(wsip)
56
52
 
57
53
  BayLog.trace(" rent keepList=%s busyList=%s", @keep_list, @busy_list)
@@ -105,7 +101,6 @@ module Baykit
105
101
  super
106
102
  end
107
103
  end
108
- end
109
104
  end
110
105
  end
111
106
  end
@@ -1,6 +1,6 @@
1
1
  require 'baykit/bayserver/agent/next_socket_action'
2
2
  require 'baykit/bayserver/agent/transporter/data_listener'
3
- require 'baykit/bayserver/watercraft/ship'
3
+ require 'baykit/bayserver/ships/ship'
4
4
  require 'baykit/bayserver/tours/package'
5
5
 
6
6
  module Baykit
@@ -50,7 +50,7 @@ module Baykit
50
50
  if BayLog.debug_mode?
51
51
  BayLog.error_e(err)
52
52
  end
53
- return @ship.protocol_handler.send_req_protocol_error(err)
53
+ return @ship.protocol_handler.on_protocol_error(err)
54
54
  end
55
55
 
56
56
  def notify_close
@@ -1,13 +1,13 @@
1
1
  require 'baykit/bayserver/protocol/protocol_handler_store'
2
2
  require 'baykit/bayserver/bcf/package'
3
- require 'baykit/bayserver/agent/transporter/plain_transporter'
3
+ require 'baykit/bayserver/agent/multiplexer/plain_transporter'
4
+ require 'baykit/bayserver/rudders/io_rudder'
4
5
  require 'baykit/bayserver/util/object_store'
5
6
  require 'baykit/bayserver/util/object_factory'
6
7
 
7
8
  require 'baykit/bayserver/docker/port'
8
9
  require 'baykit/bayserver/docker/base/docker_base'
9
- require 'baykit/bayserver/docker/base/inbound_data_listener'
10
- require 'baykit/bayserver/docker/base/inbound_ship_store'
10
+ require 'baykit/bayserver/common/inbound_ship_store'
11
11
 
12
12
  module Baykit
13
13
  module BayServer
@@ -18,12 +18,14 @@ module Baykit
18
18
 
19
19
  include Baykit::BayServer::Bcf
20
20
  include Baykit::BayServer::Agent
21
- include Baykit::BayServer::Agent::Transporter
21
+ include Baykit::BayServer::Agent::Multiplexer
22
22
  include Baykit::BayServer::Docker
23
23
  include Baykit::BayServer::Docker::Base
24
24
  include Baykit::BayServer::WaterCraft
25
25
  include Baykit::BayServer::Protocol
26
+ include Baykit::BayServer::Rudders
26
27
  include Baykit::BayServer::Util
28
+ include Baykit::BayServer::Common
27
29
 
28
30
  attr :permission_list
29
31
  attr :host
@@ -48,18 +50,18 @@ module Baykit
48
50
  end
49
51
 
50
52
  def to_s()
51
- return super + "[" + @port + "]"
53
+ return super + "[#{@port}]"
52
54
  end
53
55
 
54
56
  ######################################################
55
57
  # Abstract methods
56
58
  ######################################################
57
59
  def support_anchored()
58
- raise NotImplementedError()
60
+ raise NotImplementedError.new
59
61
  end
60
62
 
61
63
  def support_unanchored()
62
- raise NotImplementedError()
64
+ raise NotImplementedError.new
63
65
  end
64
66
 
65
67
  ######################################################
@@ -178,46 +180,76 @@ module Baykit
178
180
  return @secure_docker != nil
179
181
  end
180
182
 
181
- def check_admitted(skt)
182
- @permission_list.each do |perm_dkr|
183
- perm_dkr.socket_admitted(skt)
184
- end
185
- end
186
183
 
187
184
  def find_city(name)
188
185
  return @cities.find_city(name)
189
186
  end
190
187
 
191
- def new_transporter(agt, skt)
192
- sip = PortBase.get_ship_store(agt).rent()
188
+ def on_connected(agt_id, rd)
189
+
190
+ check_admitted(rd)
191
+
192
+ sip = PortBase.get_ship_store(agt_id).rent()
193
+ agt = GrandAgent.get(agt_id)
194
+
193
195
  if secure()
194
- tp = @secure_docker.create_transporter(IOUtil.get_sock_recv_buf_size(skt))
196
+ tp = @secure_docker.new_transporter(
197
+ agt_id,
198
+ sip,
199
+ IOUtil.get_sock_recv_buf_size(rd.io))
200
+
201
+ ssl_socket = tp.new_ssl_socket(rd.io)
202
+ rd = IORudder.new(ssl_socket)
203
+ if agt.net_multiplexer.is_non_blocking
204
+ rd.set_non_blocking
205
+ end
206
+
195
207
  else
196
- tp = PlainTransporter.new(true, IOUtil.get_sock_recv_buf_size(skt))
208
+ size = IOUtil.get_sock_recv_buf_size(rd.io)
209
+
210
+ tp = PlainTransporter.new(
211
+ agt.net_multiplexer,
212
+ sip,
213
+ true,
214
+ size,
215
+ false)
197
216
  end
198
217
 
199
- proto_hnd = PortBase.get_protocol_handler_store(protocol(), agt).rent()
200
- sip.init_inbound(skt, agt, tp, self, proto_hnd)
201
- tp.init(agt.non_blocking_handler, skt, InboundDataListener.new(sip))
202
- return tp
218
+ proto_hnd = PortBase.get_protocol_handler_store(protocol(), agt_id).rent()
219
+ sip.init_inbound(rd, agt_id, tp, self, proto_hnd)
220
+
221
+ st = RudderState.new(rd, tp)
222
+ agt.net_multiplexer.add_rudder_state(rd, st)
223
+ agt.net_multiplexer.req_read(rd)
203
224
  end
204
225
 
205
- def return_protocol_handler(agt, proto_hnd)
226
+ def return_protocol_handler(agt_id, proto_hnd)
206
227
  BayLog.debug("%s Return protocol handler", proto_hnd)
207
- PortBase.get_protocol_handler_store(proto_hnd.protocol, agt).Return(proto_hnd)
228
+ PortBase.get_protocol_handler_store(proto_hnd.protocol, agt_id).Return(proto_hnd)
208
229
  end
209
230
 
210
231
  def return_ship(sip)
211
232
  BayLog.debug("%s end (return ship)", sip)
212
- PortBase.get_ship_store(sip.agent).Return(sip)
233
+ PortBase.get_ship_store(sip.agent_id).Return(sip)
234
+ end
235
+
236
+ ######################################################
237
+ # Private methods
238
+ ######################################################
239
+ private
240
+
241
+ def check_admitted(rd)
242
+ @permission_list.each do |perm_dkr|
243
+ perm_dkr.socket_admitted(rd)
244
+ end
213
245
  end
214
246
 
215
- def PortBase.get_ship_store(agt)
216
- return InboundShipStore.get_store(agt.agent_id)
247
+ def PortBase.get_ship_store(agt_id)
248
+ return InboundShipStore.get_store(agt_id)
217
249
  end
218
250
 
219
- def PortBase.get_protocol_handler_store(proto, agt)
220
- return ProtocolHandlerStore.get_store(proto, true, agt.agent_id)
251
+ def PortBase.get_protocol_handler_store(proto, agt_id)
252
+ return ProtocolHandlerStore.get_store(proto, true, agt_id)
221
253
  end
222
254
 
223
255
  end