tcp-server 1.1.3-java → 1.1.5-java

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9bcae7fb08cc3df7627fb5679ed5784a20b53205d60ead5fe401f978080e39e9
4
- data.tar.gz: 4fd6a0775dd11cc06f3ab53f4caeed3efcc85eb59902acbb0b37b7e607cfa3ae
3
+ metadata.gz: 2174a5497f0b0358242e9592b698912fd8f06943deaa8291cd24045478eac44e
4
+ data.tar.gz: c21770eddc3798b518c2685c5e93adf56d560b8380264b4673914b59a24cc26a
5
5
  SHA512:
6
- metadata.gz: 9834bab4ba9000b972100fcff462e7ce21f60b4630dfe2b488a0025ac0c0a844a5e4a585804abdf3e4fc2e1eadc2bb9d4468beff8050a2ae9e5921cb48a64dfb
7
- data.tar.gz: 0d808e91710feef4004b0b52e8139cde6c496202339de4b3ca299cc8f9616f98586e9f9348efe58e07b269caac247fc487ef1066676ccd71a2e90387b52faf34
6
+ metadata.gz: 8811e5ba0e0d1556f0b31d13b04fbaf40465031c0b568a390432330eefdc991346eb5507ee76ca72254629de2a5cbfd928870d6e20a942daf6accb9f0bc36f83
7
+ data.tar.gz: 178e6ef353f59025743761d138fc51a7c0e1c4f0b517f3b4f1ab7a50d55e2652d3094a2b817ff48497ee1522197efed04b4ea380761a29f2e53f080a7312bab8
data/README.md CHANGED
@@ -26,7 +26,7 @@ docker-compose down
26
26
  Building the image or running the container:
27
27
 
28
28
  ```sh
29
- docker build --squash --tag tcp-server-jruby .
29
+ docker build --tag tcp-server-jruby .
30
30
  docker run --detach --publish 4000:4000 --name tcp-server-jruby tcp-server-jruby
31
31
  ```
32
32
 
@@ -208,7 +208,7 @@ curl --silent --show-error --location --request POST "https://gitlab.com/api/v4/
208
208
  ```
209
209
 
210
210
  [license]: https://gitlab.com/nelsnelson/tcp-server-jruby/blob/master/LICENSE
211
- [asdf]: https://mise.jdx.dev/
211
+ [mise]: https://mise.jdx.dev/
212
212
  [colima]: https://github.com/abiosoft/colima
213
213
  [Netty project]: https://github.com/netty/netty
214
214
  [Java JDK]: https://www.java.com/en/download/
@@ -33,11 +33,11 @@ module Server
33
33
  @parser.separator 'Options:'
34
34
  end
35
35
 
36
- def validated_port(val, integer_pattern = /^\d+$/)
37
- raise OptionParser::InvalidArgument, "Invalid port: #{v}" unless \
38
- integer_pattern.match?(val.to_s) && val.positive? && val < 65_536
36
+ def validated_port(value, integer_pattern = /^\d+$/)
37
+ raise OptionParser::InvalidArgument, "Invalid port: #{value}" unless \
38
+ integer_pattern.match?(value.to_s) && value.positive? && value < 65_536
39
39
 
40
- val
40
+ value
41
41
  end
42
42
 
43
43
  def port
@@ -97,7 +97,8 @@ module Server
97
97
  def parse_arguments(arguments_parser = ::Server::ArgumentsParser.new)
98
98
  arguments_parser.parser.parse!(ARGV)
99
99
  arguments_parser.options
100
- rescue OptionParser::InvalidOption, OptionParser::AmbiguousOption => e
100
+ rescue OptionParser::InvalidArgument, OptionParser::InvalidOption,
101
+ OptionParser::AmbiguousOption => e
101
102
  abort e.message
102
103
  end
103
104
  end
data/lib/server/config.rb CHANGED
@@ -10,25 +10,43 @@
10
10
  #
11
11
  # =end
12
12
 
13
+ require 'java'
13
14
  require 'netty'
14
15
 
15
16
  require 'logger'
16
17
 
17
18
  # The Server module
18
19
  module Server
20
+ DEFAULT_LOG_LEVEL = Logger::INFO
21
+ DEFAULT_HOST = '0.0.0.0'.freeze
22
+ DEFAULT_PORT = 8080
23
+ DEFAULT_SSL_ENABLED = false
24
+ DEFAULT_IDLE_READING_SECONDS = 5 * 60 # seconds
25
+ DEFAULT_IDLE_WRITING_SECONDS = 30 # seconds
26
+ DEFAULT_KEEP_ALIVE = false
27
+ DEFAULT_MAX_QUEUED_INCOMING_CONNECTIONS = 100
28
+ DEFAULT_MAX_FRAME_LENGTH = 8192
29
+ DEFAULT_DELIMITER = Java::io.netty.handler.codec.Delimiters.lineDelimiter
30
+ DEFAULT_LOG_REQUESTS = false
31
+ DEFAULT_QUIT_COMMANDS = %i[
32
+ bye cease desist exit leave quit stop terminate
33
+ ].freeze
34
+
19
35
  # rubocop: disable Metrics/MethodLength
20
36
  def server_config
21
37
  @server_config ||= {
22
- host: '0.0.0.0',
23
- port: 8080,
24
- ssl: false,
25
- idle_reading: 5 * 60, # seconds
26
- idle_writing: 30, # seconds
27
- log_requests: false,
28
- log_level: Logger::INFO,
29
- quit_commands: %i[bye cease desist exit leave quit stop terminate],
30
- max_frame_length: 8192,
31
- delimiter: Java::io.netty.handler.codec.Delimiters.lineDelimiter
38
+ host: DEFAULT_HOST,
39
+ port: DEFAULT_PORT,
40
+ ssl: DEFAULT_SSL_ENABLED,
41
+ idle_reading: DEFAULT_IDLE_READING_SECONDS,
42
+ idle_writing: DEFAULT_IDLE_WRITING_SECONDS,
43
+ max_queued_incoming_connections: DEFAULT_MAX_QUEUED_INCOMING_CONNECTIONS,
44
+ log_requests: DEFAULT_LOG_REQUESTS,
45
+ log_level: DEFAULT_LOG_LEVEL,
46
+ quit_commands: DEFAULT_QUIT_COMMANDS,
47
+ max_frame_length: DEFAULT_MAX_FRAME_LENGTH,
48
+ keep_alive: DEFAULT_KEEP_ALIVE,
49
+ delimiter: DEFAULT_DELIMITER
32
50
  }.freeze
33
51
  end
34
52
  module_function :server_config
@@ -28,19 +28,26 @@ module Server
28
28
 
29
29
  # The InstanceMethods module
30
30
  module InstanceMethods
31
+ # rubocop: disable Metrics/AbcSize
32
+ def bootstrap
33
+ @bootstrap = ServerBootstrap.new
34
+ @bootstrap.group(boss_group, worker_group)
35
+ @bootstrap.channel(channel_type)
36
+ @bootstrap.option(ChannelOption::SO_BACKLOG, max_queued_incoming_connections)
37
+ @bootstrap.childOption(ChannelOption::SO_KEEPALIVE, keep_alive) if keep_alive
38
+ @bootstrap.handler(logging_handler) if options.fetch(:log_requests, false)
39
+ @bootstrap.childHandler(channel_initializer)
40
+ end
41
+ # rubocop: enable Metrics/AbcSize
42
+
31
43
  def configure_handlers(*handlers, &block)
32
44
  add_listener(self)
33
45
  channel_initializer << block if block_given?
34
46
  add_listener(*handlers)
35
47
  end
36
48
 
37
- def bootstrap
38
- @bootstrap = ServerBootstrap.new
39
- @bootstrap.group(boss_group, worker_group)
40
- @bootstrap.channel(Server::CHANNEL_TYPE)
41
- @bootstrap.option(ChannelOption::SO_BACKLOG, 100.to_java(java.lang.Integer))
42
- @bootstrap.handler(logging_handler) if options[:log_requests]
43
- @bootstrap.childHandler(channel_initializer)
49
+ def channel_type
50
+ @channel_type ||= Server::CHANNEL_TYPE
44
51
  end
45
52
 
46
53
  def channel_initializer
@@ -65,7 +72,7 @@ module Server
65
72
 
66
73
  # rubocop: disable Metrics/AbcSize
67
74
  # rubocop: disable Metrics/MethodLength
68
- def run(port = @options[:port])
75
+ def run(port = self.port)
69
76
  channel = bootstrap.bind(port).sync().channel()
70
77
  channel_group.add(channel)
71
78
  ::Server::ShutdownHook.new(self)
@@ -83,6 +90,14 @@ module Server
83
90
  # rubocop: enable Metrics/AbcSize
84
91
  # rubocop: enable Metrics/MethodLength
85
92
 
93
+ def port
94
+ @port ||= begin
95
+ value = @options[:port]
96
+ value = DEFAULT_PORT if value.nil?
97
+ value.to_i
98
+ end
99
+ end
100
+
86
101
  def shutdown
87
102
  channel_group.disconnect().awaitUninterruptibly()
88
103
  channel_group.close().awaitUninterruptibly()
@@ -104,6 +119,22 @@ module Server
104
119
  def replace_listeners(*listener)
105
120
  channel_initializer.replace_listeners(*listener)
106
121
  end
122
+
123
+ def keep_alive
124
+ @keep_alive ||= begin
125
+ value = @options[:keep_alive]
126
+ value = DEFAULT_KEEP_ALIVE if value.nil?
127
+ value
128
+ end
129
+ end
130
+
131
+ def max_queued_incoming_connections
132
+ @max_queued_incoming_connections ||= begin
133
+ value = @options[:max_queued_incoming_connections]
134
+ value = DEFAULT_MAX_QUEUED_INCOMING_CONNECTIONS if value.nil?
135
+ value.to_java(java.lang.Integer)
136
+ end
137
+ end
107
138
  end
108
139
  # module ServerInstanceMethods
109
140
  end
@@ -22,8 +22,6 @@ module Server
22
22
 
23
23
  def add_listener(*listener)
24
24
  listeners.addAll(listener)
25
- ensure
26
- log.trace "Listeners: #{listeners}"
27
25
  end
28
26
 
29
27
  def remove_listener(*listener)
@@ -33,6 +31,8 @@ module Server
33
31
  def replace_listeners(*listener)
34
32
  listeners.clear
35
33
  add_listener(*listener)
34
+ ensure
35
+ log.trace "Listeners after replacement: #{listeners}"
36
36
  end
37
37
 
38
38
  def notify(event, *args)
data/lib/server/server.rb CHANGED
@@ -28,13 +28,16 @@ module Server
28
28
  raise ArgumentError, 'Parameter may not be nil: options' if options.nil?
29
29
  @options = ::Server.server_config.merge(options)
30
30
  configure_handlers(*handlers, &block)
31
+ ensure
32
+ log.trace "Listeners after initialization of #{self}: #{channel_initializer.default_handler.listeners}"
31
33
  end
32
34
 
33
35
  # rubocop: disable Metrics/AbcSize
34
36
  def message_received(ctx, msg)
37
+ return if msg.nil?
38
+ msg.chomp! if msg.respond_to?(:chomp!)
39
+ return if msg.respond_to?(:empty?) && msg.empty?
35
40
  log.trace "##{__method__} channel: #{ctx.channel}, message: #{msg.inspect}"
36
- msg&.chomp!
37
- return if msg.nil? || msg.empty?
38
41
  return ctx.close() if @options[:quit_commands].include?(msg.downcase.to_sym)
39
42
  response = msg.upcase
40
43
  log.debug "Sending response: #{response.inspect}"
@@ -29,7 +29,7 @@ module Server
29
29
  $stdout.write "\r\e[0K"
30
30
  $stdout.flush
31
31
  ::Server.log.info 'Shutting down'
32
- @server.shutdown if server.respond_to?(:shutdown)
32
+ server.shutdown if server.respond_to?(:shutdown)
33
33
  end
34
34
  end
35
35
  end
@@ -12,5 +12,5 @@
12
12
 
13
13
  # The Server module
14
14
  module Server
15
- VERSION = '1.1.3'.freeze
15
+ VERSION = '1.1.5'.freeze
16
16
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tcp-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.5
5
5
  platform: java
6
6
  authors:
7
7
  - Nels Nelson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-03-23 00:00:00.000000000 Z
11
+ date: 2024-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement