bayserver-core 2.3.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,92 @@
1
+ require 'baykit/bayserver/common/read_only_ship'
2
+
3
+ module Baykit
4
+ module BayServer
5
+ module Docker
6
+ module SendFile
7
+ class SendFileShip < Baykit::BayServer::Common::ReadOnlyShip
8
+ include Baykit::BayServer::Tours::ReqContentHandler # implements
9
+
10
+ attr :file_wrote_len
11
+ attr :tour
12
+ attr :tour_id
13
+
14
+ include Baykit::BayServer::Agent
15
+ include Baykit::BayServer::Agent::Multiplexer
16
+ include Baykit::BayServer::Tours
17
+ include Baykit::BayServer::Rudders
18
+
19
+ attr :path
20
+ attr :abortable
21
+
22
+ def init(rd, tp, tur)
23
+ super(tur.ship.agent_id, rd, tp)
24
+ @file_wrote_len = 0
25
+ @tour = tur
26
+ @tour_id = tur.tour_id
27
+ end
28
+
29
+ ######################################################
30
+ # Implements Reusable
31
+ ######################################################
32
+
33
+ def reset
34
+ super
35
+ @file_wrote_len = 0
36
+ @tour_id = 0
37
+ @tour = nil
38
+ end
39
+
40
+ ######################################################
41
+ # Implements ReqContentHandler
42
+ ######################################################
43
+
44
+ def notify_read(buf)
45
+ @file_wrote_len += buf.length
46
+ BayLog.debug("%s read file %d bytes: total=%d", self, buf.length, @file_wrote_len)
47
+
48
+ begin
49
+ available = @tour.res.send_res_content(@tour_id, buf, 0, buf.length)
50
+
51
+ if available
52
+ return NextSocketAction::CONTINUE
53
+ else
54
+ return NextSocketAction::SUSPEND
55
+ end
56
+ rescue IOError => e
57
+ notify_error(e)
58
+ return NextSocketAction::CLOSE
59
+ end
60
+ end
61
+
62
+ def notify_error(e)
63
+ BayLog.debug_e(e, "%s Error notified", self)
64
+ begin
65
+ @tour.res.send_error(@tour_id, HttpStatus::INTERNAL_SERVER_ERROR, nil, e)
66
+ rescue IOError => ex
67
+ BayLog.debug_e(ex)
68
+ end
69
+ end
70
+
71
+ def notify_eof
72
+ BayLog.debug("%s EOF", self)
73
+ begin
74
+ @tour.res.end_res_content(@tour_id)
75
+ rescue IOError => e
76
+ BayLog.debug_e(ex)
77
+ end
78
+ return NextSocketAction::CLOSE
79
+ end
80
+
81
+ def notify_close
82
+ BayLog.debug("%s Close", self)
83
+ end
84
+
85
+ def check_timeout(duration_sec)
86
+ return false
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -9,21 +9,37 @@ module Baykit
9
9
  MATCH_TYPE_NOT_MATCHED = 2
10
10
  MATCH_TYPE_CLOSE = 3
11
11
 
12
- #
13
- # interface
14
- #
15
- # String name();
16
- # City city();
17
- # String location();
18
- # String welcomeFile();
19
- # ArrayList<Club> clubs();
20
- # String reroute(String uri);
21
- # MatchType matches(String uri);
22
- # void checkAdmitted(Tour tour) throws HttpException;
23
- # String reroute(String uri);
24
- # MatchType matches(String uri);
25
- # void checkAdmitted(Tour tour) throws HttpException;
26
- #
12
+ def name
13
+ raise NotImplementedError.new
14
+ end
15
+
16
+ def city
17
+ raise NotImplementedError.new
18
+ end
19
+
20
+ def location
21
+ raise NotImplementedError.new
22
+ end
23
+
24
+ def welcome_file
25
+ raise NotImplementedError.new
26
+ end
27
+
28
+ def clubs
29
+ raise NotImplementedError.new
30
+ end
31
+
32
+ def reroute(uri)
33
+ raise NotImplementedError.new
34
+ end
35
+
36
+ def matches(uri)
37
+ raise NotImplementedError.new
38
+ end
39
+
40
+ def check_admitted(tur)
41
+ raise NotImplementedError.new
42
+ end
27
43
  end
28
44
  end
29
45
  end
@@ -6,11 +6,23 @@ module Baykit
6
6
  module Trouble
7
7
  include Docker # implements
8
8
 
9
- #
10
- # interface
11
- #
12
- # find(status)
13
- #
9
+ TROUBLE_METHOD_GUIDE = 1
10
+ TROUBLE_METHOD_TEXT = 2
11
+ TROUBLE_METHOD_REROUTE = 3
12
+
13
+ class Command
14
+ attr :method
15
+ attr :target
16
+
17
+ def initialize(method, target)
18
+ @method = method
19
+ @target = target
20
+ end
21
+ end
22
+
23
+ def find(status) Command
24
+ raise NotImplementedError.new
25
+ end
14
26
  end
15
27
  end
16
28
  end
@@ -0,0 +1,34 @@
1
+ require 'baykit/bayserver/docker/docker'
2
+
3
+ module Baykit
4
+ module BayServer
5
+ module Docker
6
+ module Warp # interface
7
+ include Docker # implements
8
+
9
+ def host
10
+ raise NotImplementedError.new
11
+ end
12
+
13
+ def port
14
+ raise NotImplementedError.new
15
+ end
16
+ def warp_base
17
+ raise NotImplementedError.new
18
+ end
19
+
20
+ def timeout_sec
21
+ raise NotImplementedError.new
22
+ end
23
+
24
+ def keep(warp_ship)
25
+ raise NotImplementedError.new
26
+ end
27
+
28
+ def on_end_ship(warp_ship)
29
+ raise NotImplementedError.new
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -4,8 +4,8 @@ require 'baykit/bayserver/agent/lifecycle_listener'
4
4
  require 'baykit/bayserver/protocol/protocol_handler_store'
5
5
  require 'baykit/bayserver/protocol/packet_store'
6
6
  require 'baykit/bayserver/tours/tour_store'
7
- require 'baykit/bayserver/docker/base/inbound_ship_store'
8
- require 'baykit/bayserver/docker/warp/warp_docker'
7
+ require 'baykit/bayserver/common/inbound_ship_store'
8
+ require 'baykit/bayserver/docker/base/warp_base'
9
9
 
10
10
  require 'baykit/bayserver/util/string_util'
11
11
 
@@ -16,19 +16,19 @@ module Baykit
16
16
  include Baykit::BayServer::Agent
17
17
  include Baykit::BayServer::Protocol
18
18
  include Baykit::BayServer::Tours
19
- include Baykit::BayServer::Docker::Warp
19
+ include Baykit::BayServer::Common
20
20
  include Baykit::BayServer::Docker::Base
21
21
  include Baykit::BayServer::Util
22
22
 
23
23
  class AgentListener
24
24
  include Baykit::BayServer::Agent::LifecycleListener
25
25
 
26
- def add(agt)
27
- MemUsage.mem_usages[agt.agent_id] = MemUsage.new(agt.agent_id);
26
+ def add(agt_id)
27
+ MemUsage.mem_usages[agt_id] = MemUsage.new(agt_id);
28
28
  end
29
29
 
30
- def remove(agt)
31
- MemUsage.mem_usages.delete(agt.agent_id)
30
+ def remove(agt_id)
31
+ MemUsage.mem_usages.delete(agt_id)
32
32
  end
33
33
  end
34
34
 
@@ -73,14 +73,14 @@ module Baykit
73
73
  end
74
74
 
75
75
  city.clubs().each do |club|
76
- if club.kind_of?(WarpDocker)
76
+ if club.kind_of?(WarpBase)
77
77
  BayLog.info("%sClub(%s%s) Usage:", StringUtil.indent(indent), club, pname);
78
78
  club.get_ship_store(@agent_id).print_usage(indent+1)
79
79
  end
80
80
  end
81
81
  city.towns().each do |town|
82
82
  town.clubs().each do |club|
83
- if club.kind_of?(WarpDocker)
83
+ if club.kind_of?(WarpBase)
84
84
  BayLog.info("%sClub(%s%s) Usage:", StringUtil.indent(indent), club, pname);
85
85
  club.get_ship_store(@agent_id).print_usage(indent+1)
86
86
  end
@@ -24,7 +24,7 @@ module Baykit
24
24
  pkt = @pkt_store.rent(cmd.type)
25
25
  begin
26
26
  cmd.pack(pkt)
27
- @pkt_packer.post(sip.postman, pkt) do
27
+ @pkt_packer.post(sip, pkt) do
28
28
  @pkt_store.Return(pkt)
29
29
  if lisnr != nil
30
30
  lisnr.call()
@@ -36,13 +36,6 @@ module Baykit
36
36
  end
37
37
  end
38
38
 
39
- def flush(sip)
40
- @pkt_packer.flush(sip.postman)
41
- end
42
-
43
- def end(sip)
44
- @pkt_packer.end(sip.postman)
45
- end
46
39
  end
47
40
  end
48
41
  end
@@ -7,23 +7,19 @@ module Baykit
7
7
  def reset()
8
8
  end
9
9
 
10
- def post(postman, pkt, &lisnr)
11
- if postman == nil || pkt == nil || lisnr == nil
10
+ def post(sip, pkt, &lisnr)
11
+ if sip == nil || pkt == nil || lisnr == nil
12
12
  raise Sink.new()
13
13
  end
14
- postman.post(pkt.buf[0, pkt.buf_len], nil, pkt) do
14
+ sip.transporter.req_write(
15
+ sip.rudder,
16
+ pkt.buf[0, pkt.buf_len],
17
+ nil,
18
+ pkt) do
15
19
  lisnr.call()
16
20
  end
17
21
  end
18
22
 
19
- def flush(postman)
20
- postman.flush()
21
- end
22
-
23
- def end(postman)
24
- postman.post_end()
25
- end
26
-
27
23
  end
28
24
  end
29
25
  end
@@ -15,15 +15,15 @@ module Baykit
15
15
  class AgentListener
16
16
  include Baykit::BayServer::Agent::LifecycleListener # implements
17
17
 
18
- def add(agt)
18
+ def add(agt_id)
19
19
  PacketStore.proto_map.values().each do |ifo|
20
- ifo.add_agent(agt.agent_id);
20
+ ifo.add_agent(agt_id);
21
21
  end
22
22
  end
23
23
 
24
- def remove(agt)
24
+ def remove(agt_id)
25
25
  PacketStore.proto_map.values().each do |ifo|
26
- ifo.remove_agent(agt.agent_id);
26
+ ifo.remove_agent(agt_id);
27
27
  end
28
28
  end
29
29
  end
@@ -12,22 +12,36 @@ module Baykit
12
12
  attr :packet_packer
13
13
  attr :command_unpacker
14
14
  attr :command_packer
15
- attr :packet_store
15
+ attr :command_handler
16
16
  attr :server_mode
17
17
  attr_accessor :ship
18
18
 
19
+ def initialize(pkt_unpacker, pkt_packer, cmd_unpacker, cmd_packer, cmd_handler, svr_mode)
20
+ @packet_unpacker = pkt_unpacker
21
+ @packet_packer = pkt_packer
22
+ @command_unpacker = cmd_unpacker
23
+ @command_packer = cmd_packer
24
+ @command_handler = cmd_handler
25
+ @server_mode = svr_mode
26
+ end
19
27
  def to_s()
20
28
  return ClassUtil.get_local_name(self.class) + " ship=" + ship.to_s
21
29
  end
22
30
 
31
+ def init(sip)
32
+ @ship = sip
33
+ end
34
+
23
35
  ##################################################
24
36
  # Implements Reusable
25
37
  ##################################################
26
38
  def reset()
27
- @command_unpacker.reset()
28
- @command_packer.reset()
29
- @packet_unpacker.reset()
30
- @packet_packer.reset()
39
+ @command_unpacker.reset
40
+ @command_packer.reset
41
+ @packet_unpacker.reset
42
+ @packet_packer.reset
43
+ @command_handler.reset
44
+ @ship = nil
31
45
  end
32
46
 
33
47
  ##################################################
@@ -35,21 +49,21 @@ module Baykit
35
49
  ##################################################
36
50
 
37
51
  def protocol()
38
- raise NotImplementedError()
52
+ raise NotImplementedError.new
39
53
  end
40
54
 
41
55
  #
42
56
  # Get max of request data size (maybe not packet size)
43
57
  #
44
58
  def max_req_packet_data_size()
45
- raise NotImplementedError()
59
+ raise NotImplementedError.new
46
60
  end
47
61
 
48
62
  #
49
63
  # Get max of response data size (maybe not packet size)
50
64
  #
51
65
  def max_res_packet_data_size()
52
- raise NotImplementedError()
66
+ raise NotImplementedError.new
53
67
  end
54
68
 
55
69
  ##################################################
@@ -58,6 +72,10 @@ module Baykit
58
72
  def bytes_received(buf)
59
73
  return @packet_unpacker.bytes_received(buf)
60
74
  end
75
+
76
+ def post(cmd, &lis)
77
+ @command_packer.post(@ship, cmd, &lis)
78
+ end
61
79
  end
62
80
  end
63
81
  end
@@ -38,13 +38,13 @@ module Baykit
38
38
  @stores = {}
39
39
  end
40
40
 
41
- def add_agent(agt)
42
- store = PacketStore.get_store(@protocol, agt.agent_id);
43
- @stores[agt.agent_id] = ProtocolHandlerStore.new(@protocol, @server_mode, @protocol_handler_factory, store);
41
+ def add_agent(agt_id)
42
+ store = PacketStore.get_store(@protocol, agt_id);
43
+ @stores[agt_id] = ProtocolHandlerStore.new(@protocol, @server_mode, @protocol_handler_factory, store);
44
44
  end
45
45
 
46
- def remove_agent(agt)
47
- @stores.delete(agt.agent_id);
46
+ def remove_agent(agt_id)
47
+ @stores.delete(agt_id);
48
48
  end
49
49
 
50
50
  end
@@ -0,0 +1,62 @@
1
+ require 'baykit/bayserver/rudders/rudder'
2
+
3
+ module Baykit
4
+ module BayServer
5
+ module Rudders
6
+ class IORudder
7
+ include Rudder
8
+
9
+ attr :io
10
+ attr :non_blocking
11
+
12
+ def initialize(io)
13
+ @io = io
14
+ end
15
+
16
+ def to_s
17
+ return "IORudder:" + @io.to_s
18
+ end
19
+ def key
20
+ return @io
21
+ end
22
+
23
+ def set_non_blocking()
24
+ @non_blocking = true
25
+ end
26
+
27
+ def read(buf, len)
28
+ begin
29
+ if @non_blocking
30
+ buf = @io.read_nonblock(len, buf)
31
+ else
32
+ buf = @io.readpartial(len, buf)
33
+ end
34
+ if buf == nil
35
+ return 0
36
+ else
37
+ return buf.length
38
+ end
39
+ rescue EOFError => e
40
+ return 0
41
+ end
42
+ end
43
+
44
+ def write(buf)
45
+ if @non_blocking
46
+ return @io.write_nonblock(buf)
47
+ else
48
+ return @io.write(buf)
49
+ end
50
+ end
51
+
52
+ def close
53
+ @io.close()
54
+ end
55
+
56
+ def io
57
+ return @io
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,29 @@
1
+
2
+ module Baykit
3
+ module BayServer
4
+ module Rudders
5
+ module Rudder # interface
6
+
7
+ def key
8
+ raise NotImplementedError.new
9
+ end
10
+
11
+ def set_non_blocking
12
+ raise NotImplementedError.new
13
+ end
14
+
15
+ def read(buf, len)
16
+ raise NotImplementedError.new
17
+ end
18
+
19
+ def write(buf)
20
+ raise NotImplementedError.new
21
+ end
22
+
23
+ def close
24
+ raise NotImplementedError.new
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -3,7 +3,7 @@ require 'baykit/bayserver/util/counter'
3
3
 
4
4
  module Baykit
5
5
  module BayServer
6
- module WaterCraft
6
+ module Ships
7
7
  class Ship
8
8
  include Baykit::BayServer::Util::Reusable # implements
9
9
 
@@ -23,11 +23,10 @@ module Baykit
23
23
 
24
24
  attr :object_id
25
25
  attr :ship_id
26
- attr :agent
27
- attr :postman
28
- attr :socket
26
+ attr :agent_id
27
+ attr :rudder
28
+ attr :transporter
29
29
  attr :initialized
30
- attr_accessor :protocol_handler
31
30
  attr_accessor :keeping
32
31
 
33
32
  def initialize()
@@ -35,67 +34,92 @@ module Baykit
35
34
  @ship_id = INVALID_SHIP_ID
36
35
  end
37
36
 
38
- ######################################################
37
+ def init(agt_id, rd, tp)
38
+ if @initialized
39
+ raise Sink.new("Ship already initialized")
40
+ end
41
+ @ship_id = Ship.ship_id_counter.next
42
+ @agent_id = agt_id
43
+ @rudder = rd
44
+ @transporter = tp
45
+ @initialized = true
46
+ BayLog.debug("%s initialized", self)
47
+ end
48
+
49
+ #########################################
39
50
  # implements Reusable
40
- ######################################################
51
+ #########################################
41
52
  def reset()
42
53
  BayLog.debug("%s reset", self)
43
54
 
44
55
  @initialized = false
45
- @postman.reset()
46
- @postman = nil # for reloading certification
47
- @agent = nil
56
+ @transporter = nil
57
+ @rudder = nil
58
+ @agent_id = -1
48
59
  @ship_id = INVALID_SHIP_ID
49
- @socket = nil
50
- @protocol_handler = nil
51
60
  @keeping = false
52
61
  end
53
62
 
54
63
 
55
- ######################################################
64
+ #########################################
56
65
  # Other methods
57
- ######################################################
66
+ #########################################
58
67
 
59
- def init(skt, agt, postman)
60
- if @initialized
61
- raise Sink.new("Ship already initialized")
68
+ def id()
69
+ @ship_id
70
+ end
71
+
72
+ def check_ship_id(check_id)
73
+ if !@initialized
74
+ raise Sink.new("#{self} ship not initialized (might be returned ship): #{check_id}")
75
+ end
76
+ if check_id != SHIP_ID_NOCHECK && check_id != @ship_id
77
+ raise Sink.new("#{self} Invalid ship id (might be returned ship): #{check_id}")
62
78
  end
63
- @ship_id = Ship.ship_id_counter.next
64
- @agent = agt
65
- @postman = postman
66
- @socket = skt
67
- @initialized = true
68
- BayLog.debug("%s initialized", self)
69
79
  end
70
80
 
71
- def set_protocol_handler(proto_hnd)
72
- @protocol_handler = proto_hnd
73
- proto_hnd.ship = self
74
- #BayLog.debug("%s protocol handler is set", self)
81
+ def resume_read(check_id)
82
+ check_ship_id(check_id);
83
+ @transporter.req_read(@rudder)
75
84
  end
76
85
 
77
- def id()
78
- @ship_id
86
+ def post_close
87
+ @transporter.req_close(@rudder)
79
88
  end
80
89
 
81
- def protocol()
82
- return @protocol_handler == nil ? "unknown" : @protocol_handler.protocol
90
+ #########################################
91
+ # Abstract methods
92
+ #########################################
93
+ def notify_handshake_done(proto)
94
+ raise NotImplementedError.new
83
95
  end
84
96
 
97
+ def notify_connect()
98
+ raise NotImplementedError.new
99
+ end
85
100
 
101
+ def notify_read(buf)
102
+ raise NotImplementedError.new
103
+ end
86
104
 
87
- def resume(check_id)
88
- check_ship_id(check_id);
89
- @postman.open_valve();
105
+ def notify_eof()
106
+ raise NotImplementedError.new
90
107
  end
91
108
 
92
- def check_ship_id(check_id)
93
- if !@initialized
94
- raise Sink.new("#{self} ship not initialized (might be returned ship): #{check_id}")
95
- end
96
- if check_id != SHIP_ID_NOCHECK && check_id != @ship_id
97
- raise Sink.new("#{self} Invalid ship id (might be returned ship): #{check_id}")
98
- end
109
+ def notify_error(e)
110
+ raise NotImplementedError.new
111
+ end
112
+
113
+ def notify_protocol_error(e)
114
+ raise NotImplementedError.new
115
+ end
116
+
117
+ def notify_close
118
+ raise NotImplementedError.new
119
+ end
120
+
121
+ def check_timeout(duration_sec)
122
+ raise NotImplementedError.new
99
123
  end
100
124
  end
101
125
  end