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.
- checksums.yaml +4 -4
- data/lib/baykit/bayserver/agent/accept_handler.rb +0 -26
- data/lib/baykit/bayserver/agent/channel_listener.rb +6 -6
- data/lib/baykit/bayserver/agent/command_receiver.rb +97 -38
- data/lib/baykit/bayserver/agent/grand_agent.rb +444 -134
- data/lib/baykit/bayserver/agent/letter.rb +30 -0
- data/lib/baykit/bayserver/agent/lifecycle_listener.rb +9 -7
- data/lib/baykit/bayserver/agent/monitor/grand_agent_monitor.rb +298 -0
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer.rb +257 -0
- data/lib/baykit/bayserver/agent/multiplexer/job_multiplexer_base.rb +52 -0
- data/lib/baykit/bayserver/agent/multiplexer/multiplexer_base.rb +150 -0
- data/lib/baykit/bayserver/agent/multiplexer/plain_transporter.rb +129 -0
- data/lib/baykit/bayserver/agent/multiplexer/rudder_state.rb +81 -0
- data/lib/baykit/bayserver/agent/multiplexer/secure_transporter.rb +50 -0
- data/lib/baykit/bayserver/agent/multiplexer/spider_multiplexer.rb +561 -0
- data/lib/baykit/bayserver/agent/multiplexer/spin_multiplexer.rb +311 -0
- data/lib/baykit/bayserver/agent/multiplexer/taxi_multiplexer.rb +194 -0
- data/lib/baykit/bayserver/agent/multiplexer/transporter.rb +61 -0
- data/lib/baykit/bayserver/agent/multiplexer/write_unit.rb +30 -0
- data/lib/baykit/bayserver/agent/non_blocking_handler.rb +0 -319
- data/lib/baykit/bayserver/agent/signal/signal_agent.rb +2 -1
- data/lib/baykit/bayserver/agent/timer_handler.rb +1 -1
- data/lib/baykit/bayserver/agent/transporter/data_listener.rb +7 -7
- data/lib/baykit/bayserver/agent/transporter/package.rb +0 -3
- data/lib/baykit/bayserver/agent/transporter/transporter.rb +5 -139
- data/lib/baykit/bayserver/bay_log.rb +1 -0
- data/lib/baykit/bayserver/bayserver.rb +32 -28
- data/lib/baykit/bayserver/{util → common}/groups.rb +1 -1
- data/lib/baykit/bayserver/common/inbound_handler.rb +12 -0
- data/lib/baykit/bayserver/{docker/base → common}/inbound_ship.rb +94 -19
- data/lib/baykit/bayserver/{docker/base → common}/inbound_ship_store.rb +7 -9
- data/lib/baykit/bayserver/common/multiplexer.rb +98 -0
- data/lib/baykit/bayserver/common/postpone.rb +15 -0
- data/lib/baykit/bayserver/common/read_only_ship.rb +42 -0
- data/lib/baykit/bayserver/common/recipient.rb +24 -0
- data/lib/baykit/bayserver/common/vehicle.rb +24 -0
- data/lib/baykit/bayserver/common/vehicle_runner.rb +127 -0
- data/lib/baykit/bayserver/{docker/warp → common}/warp_data.rb +18 -10
- data/lib/baykit/bayserver/common/warp_handler.rb +27 -0
- data/lib/baykit/bayserver/{docker/warp → common}/warp_ship.rb +107 -27
- data/lib/baykit/bayserver/{docker/warp → common}/warp_ship_store.rb +3 -8
- data/lib/baykit/bayserver/docker/base/inbound_data_listener.rb +2 -2
- data/lib/baykit/bayserver/docker/base/port_base.rb +59 -27
- data/lib/baykit/bayserver/docker/{warp/warp_docker.rb → base/warp_base.rb} +43 -50
- data/lib/baykit/bayserver/docker/built_in/built_in_harbor_docker.rb +118 -31
- data/lib/baykit/bayserver/docker/built_in/built_in_log_docker.rb +60 -63
- data/lib/baykit/bayserver/docker/built_in/built_in_permission_docker.rb +11 -10
- data/lib/baykit/bayserver/docker/built_in/built_in_secure_docker.rb +13 -4
- data/lib/baykit/bayserver/docker/city.rb +27 -13
- data/lib/baykit/bayserver/docker/club.rb +8 -8
- data/lib/baykit/bayserver/docker/docker.rb +9 -1
- data/lib/baykit/bayserver/docker/harbor.rb +184 -22
- data/lib/baykit/bayserver/docker/permission.rb +7 -6
- data/lib/baykit/bayserver/docker/port.rb +39 -11
- data/lib/baykit/bayserver/docker/secure.rb +11 -9
- data/lib/baykit/bayserver/docker/send_file/file_content_handler.rb +99 -4
- data/lib/baykit/bayserver/docker/send_file/send_file_docker.rb +6 -2
- data/lib/baykit/bayserver/docker/send_file/send_file_ship.rb +92 -0
- data/lib/baykit/bayserver/docker/town.rb +31 -15
- data/lib/baykit/bayserver/docker/trouble.rb +17 -5
- data/lib/baykit/bayserver/docker/warp.rb +34 -0
- data/lib/baykit/bayserver/mem_usage.rb +9 -9
- data/lib/baykit/bayserver/protocol/command_packer.rb +1 -8
- data/lib/baykit/bayserver/protocol/packet_packer.rb +7 -11
- data/lib/baykit/bayserver/protocol/packet_store.rb +4 -4
- data/lib/baykit/bayserver/protocol/protocol_handler.rb +26 -8
- data/lib/baykit/bayserver/protocol/protocol_handler_store.rb +5 -5
- data/lib/baykit/bayserver/rudders/io_rudder.rb +62 -0
- data/lib/baykit/bayserver/rudders/rudder.rb +29 -0
- data/lib/baykit/bayserver/{watercraft → ships}/ship.rb +65 -41
- data/lib/baykit/bayserver/taxi/taxi.rb +15 -10
- data/lib/baykit/bayserver/taxi/taxi_runner.rb +9 -94
- data/lib/baykit/bayserver/tours/read_file_taxi.rb +2 -2
- data/lib/baykit/bayserver/tours/req_content_handler.rb +16 -13
- data/lib/baykit/bayserver/tours/tour.rb +2 -2
- data/lib/baykit/bayserver/tours/tour_handler.rb +36 -0
- data/lib/baykit/bayserver/tours/tour_req.rb +14 -24
- data/lib/baykit/bayserver/tours/tour_res.rb +5 -89
- data/lib/baykit/bayserver/tours/tour_store.rb +5 -5
- data/lib/baykit/bayserver/train/train_runner.rb +17 -13
- data/lib/baykit/bayserver/util/data_consume_listener.rb +1 -1
- data/lib/baykit/bayserver/util/executor_service.rb +11 -7
- data/lib/baykit/bayserver/util/ip_matcher.rb +9 -39
- data/lib/baykit/bayserver/util/locale.rb +1 -1
- data/lib/baykit/bayserver/util/selector.rb +24 -5
- data/lib/baykit/bayserver/util/sys_util.rb +6 -6
- data/lib/baykit/bayserver/version.rb +1 -1
- metadata +37 -18
- data/lib/baykit/bayserver/agent/grand_agent_monitor.rb +0 -231
- data/lib/baykit/bayserver/agent/transporter/plain_transporter.rb +0 -55
- data/lib/baykit/bayserver/agent/transporter/secure_transporter.rb +0 -81
- data/lib/baykit/bayserver/docker/base/inbound_handler.rb +0 -42
- data/lib/baykit/bayserver/docker/warp/package.rb +0 -4
- data/lib/baykit/bayserver/docker/warp/warp_data_listener.rb +0 -112
- data/lib/baykit/bayserver/docker/warp/warp_handler.rb +0 -38
- /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
|
|
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
|
-
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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/
|
|
3
|
+
require 'baykit/bayserver/common/warp_ship'
|
|
4
4
|
|
|
5
5
|
module Baykit
|
|
6
6
|
module BayServer
|
|
7
|
-
|
|
8
|
-
|
|
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::
|
|
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
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
@
|
|
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
|
|
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.
|
|
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.
|
|
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/
|
|
2
|
+
require 'baykit/bayserver/common/warp_ship'
|
|
3
3
|
|
|
4
4
|
module Baykit
|
|
5
5
|
module BayServer
|
|
6
|
-
module
|
|
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::
|
|
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/
|
|
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.
|
|
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/
|
|
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/
|
|
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::
|
|
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 + "[
|
|
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
|
|
192
|
-
|
|
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.
|
|
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
|
-
|
|
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(),
|
|
200
|
-
sip.init_inbound(
|
|
201
|
-
|
|
202
|
-
|
|
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(
|
|
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,
|
|
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.
|
|
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(
|
|
216
|
-
return InboundShipStore.get_store(
|
|
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,
|
|
220
|
-
return ProtocolHandlerStore.get_store(proto, true,
|
|
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
|