tcp-server 1.1.4-java → 1.2.0-java

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 33f9e64d109b0bdcc53bfe8cda1c4d113106cc7a9d1f6e423cfb4fd6a9fcff52
4
- data.tar.gz: 9663b9e88b11d643b51292a705fbbb0ea8509fc288b175404a76b021c8edc945
3
+ metadata.gz: e929584365fe9f6f2f5acd5730590308d9ccf84b7cafc7cb611fe80290014891
4
+ data.tar.gz: bd0148f3ebe104cc69dd4ed9f37dd68733c3a9e9dcca711184a5dc5e940005b8
5
5
  SHA512:
6
- metadata.gz: dadc64a13e62cf4981b28d1d1b1d8c90748c30ff9164a646ac5cea2a294efca2916389e608b8510733333a1f66add302e43d3a537eab7f665eba2acac45ccf96
7
- data.tar.gz: 72ff75a438437b1005f8d6bc8d8d3b00e3dcc96b3f4d2f17c86db1800e0e22b4ee46a9ac5621e36998741d181c81b01f6b4e1f12beea52c7237da546061bcefa
6
+ metadata.gz: 6260d608a17649fe1114e0e9382398e56297a9430ac9755c516578317d2e691fde6063e096847fc9f24e5d9ce8d34b940bf1a798433e19cb736be8ad1d956ca1
7
+ data.tar.gz: 28e72cd37f04f4a958c638841a8742e13f991c89e91977c9298978695c8801eb29d1ca6c8a71e28ac7e6d3aea37c4022c4998e8a1fe1d308111bf0f0b7162e49
data/lib/demo_listener.rb CHANGED
@@ -10,21 +10,16 @@
10
10
  #
11
11
  # =end
12
12
 
13
+ require_relative 'server/default_handler'
14
+
13
15
  # The Server module
14
16
  module Server
15
17
  # The Demo class
16
18
  class Demo
17
- def channel_active(ctx)
18
- ::Server.log.info "Channel active: #{ctx.channel}"
19
- response = 'Hello, world!'
20
- log.trace "Sending response: #{response.inspect}"
21
- ctx.channel.writeAndFlush("#{response}\n")
22
- end
19
+ include Server::DefaultHandler
23
20
 
24
- def exception_caught(_ctx, cause)
25
- ::Server.log.error "Exception caught: #{cause}"
26
- cause.backtrace.each { |t| ::Server.log.error t }
27
- ctx.close()
21
+ def initialize(options = {})
22
+ @options = options
28
23
  end
29
24
  end
30
25
  end
data/lib/server/config.rb CHANGED
@@ -17,21 +17,36 @@ require 'logger'
17
17
 
18
18
  # The Server module
19
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
+
20
35
  # rubocop: disable Metrics/MethodLength
21
36
  def server_config
22
37
  @server_config ||= {
23
- host: '0.0.0.0',
24
- port: Server::DEFAULT_PORT,
25
- ssl: false,
26
- idle_reading: 5 * 60, # seconds
27
- idle_writing: 30, # seconds
28
- max_queued_incoming_connections: Server::DEFAULT_MAX_QUEUED_INCOMING_CONNECTIONS,
29
- log_requests: false,
30
- log_level: Logger::INFO,
31
- quit_commands: %i[bye cease desist exit leave quit stop terminate],
32
- max_frame_length: 8192,
33
- keep_alive: Server::DEFAULT_KEEP_ALIVE,
34
- 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
+ max_frame_length: DEFAULT_MAX_FRAME_LENGTH,
47
+ keep_alive: DEFAULT_KEEP_ALIVE,
48
+ delimiter: DEFAULT_DELIMITER,
49
+ quit_commands: DEFAULT_QUIT_COMMANDS
35
50
  }.freeze
36
51
  end
37
52
  module_function :server_config
@@ -0,0 +1,43 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: false
3
+
4
+ # -*- mode: ruby -*-
5
+ # vi: set ft=ruby :
6
+
7
+ # =begin
8
+ #
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
+ #
11
+ # =end
12
+
13
+ # The Server module
14
+ module Server
15
+ # The DefaultHandler module
16
+ module DefaultHandler
17
+ def channel_active(ctx)
18
+ ::Server.log.info "Channel active: #{ctx.channel}"
19
+ response = 'Hello, world!'
20
+ log.trace "Sending response: #{response.inspect}"
21
+ ctx.channel.writeAndFlush("#{response}\n")
22
+ end
23
+
24
+ # rubocop: disable Metrics/AbcSize
25
+ def message_received(ctx, msg)
26
+ return if msg.nil?
27
+ msg.chomp! if msg.respond_to?(:chomp!)
28
+ return if msg.respond_to?(:empty?) && msg.empty?
29
+ log.trace "##{__method__} channel: #{ctx.channel}, message: #{msg.inspect}"
30
+ return ctx.close() if @options[:quit_commands].include?(msg.downcase.to_sym)
31
+ response = msg.upcase
32
+ log.debug "Sending response: #{response.inspect}"
33
+ ctx.writeAndFlush("#{response}\n")
34
+ end
35
+ # rubocop: enable Metrics/AbcSize
36
+
37
+ def exception_caught(_ctx, cause)
38
+ ::Server.log.error "Exception caught: #{cause}"
39
+ cause.backtrace.each { |t| ::Server.log.error t }
40
+ ctx.close()
41
+ end
42
+ end
43
+ end
@@ -14,6 +14,7 @@ require 'java'
14
14
  require 'netty'
15
15
 
16
16
  require_relative 'channel_initializer'
17
+ require_relative 'default_handler'
17
18
  require_relative 'shutdown_hook'
18
19
 
19
20
  # The Server module
@@ -28,6 +29,8 @@ module Server
28
29
 
29
30
  # The InstanceMethods module
30
31
  module InstanceMethods
32
+ include ::Server::DefaultHandler
33
+
31
34
  # rubocop: disable Metrics/AbcSize
32
35
  def bootstrap
33
36
  @bootstrap = ServerBootstrap.new
@@ -41,7 +44,6 @@ module Server
41
44
  # rubocop: enable Metrics/AbcSize
42
45
 
43
46
  def configure_handlers(*handlers, &block)
44
- add_listener(self)
45
47
  channel_initializer << block if block_given?
46
48
  add_listener(*handlers)
47
49
  end
@@ -91,11 +93,7 @@ module Server
91
93
  # rubocop: enable Metrics/MethodLength
92
94
 
93
95
  def port
94
- @port ||= begin
95
- value = @options[:port]
96
- value = DEFAULT_PORT if value.nil?
97
- value.to_i
98
- end
96
+ @port ||= (@options[:port] || DEFAULT_PORT).to_i
99
97
  end
100
98
 
101
99
  def shutdown
@@ -123,8 +121,7 @@ module Server
123
121
  def keep_alive
124
122
  @keep_alive ||= begin
125
123
  value = @options[:keep_alive]
126
- value = DEFAULT_KEEP_ALIVE if value.nil?
127
- value
124
+ value || DEFAULT_KEEP_ALIVE
128
125
  end
129
126
  end
130
127
 
@@ -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
@@ -21,30 +21,18 @@ module Server
21
21
  # The Server class sets up the netty server.
22
22
  class Server
23
23
  CHANNEL_TYPE = Java::io.netty.channel.socket.nio.NioServerSocketChannel.java_class
24
- DEFAULT_MAX_QUEUED_INCOMING_CONNECTIONS = 100
25
- DEFAULT_KEEP_ALIVE = false
26
- DEFAULT_PORT = 8080
27
24
  include ::Server::InstanceMethods
28
25
  attr_reader :options
29
26
 
30
27
  def initialize(options = {}, *handlers, &block)
31
28
  raise ArgumentError, 'Parameter may not be nil: options' if options.nil?
32
29
  @options = ::Server.server_config.merge(options)
33
- configure_handlers(*handlers, &block)
30
+ log.trace "##{__method__} handlers: #{handlers}"
31
+ configure_handlers(*(handlers.empty? ? [self] : handlers), &block)
32
+ ensure
33
+ listeners = channel_initializer.default_handler.listeners
34
+ log.trace "##{__method__} listeners: #{listeners}"
34
35
  end
35
-
36
- # rubocop: disable Metrics/AbcSize
37
- def message_received(ctx, msg)
38
- return if msg.nil?
39
- msg.chomp! if msg.respond_to?(:chomp!)
40
- return if msg.respond_to?(:empty?) && msg.empty?
41
- log.trace "##{__method__} channel: #{ctx.channel}, message: #{msg.inspect}"
42
- return ctx.close() if @options[:quit_commands].include?(msg.downcase.to_sym)
43
- response = msg.upcase
44
- log.debug "Sending response: #{response.inspect}"
45
- ctx.writeAndFlush("#{response}\n")
46
- end
47
- # rubocop: enable Metrics/AbcSize
48
36
  end
49
37
  # class Server
50
38
  end
@@ -12,5 +12,5 @@
12
12
 
13
13
  # The Server module
14
14
  module Server
15
- VERSION = '1.1.4'.freeze
15
+ VERSION = '1.2.0'.freeze
16
16
  end
data/lib/server.rb CHANGED
@@ -12,6 +12,7 @@
12
12
  #
13
13
  # =end
14
14
 
15
+ require_relative 'demo_listener'
15
16
  require_relative 'logging'
16
17
  require_relative 'server/argument_parser'
17
18
  require_relative 'server/server'
@@ -20,7 +21,8 @@ require_relative 'server/server'
20
21
  module Server
21
22
  def main(args = parse_arguments)
22
23
  Logging.log_level = args[:log_level]
23
- ::Server::Server.new(args, ::Server::Demo.new).run
24
+ demo_handler = ::Server::Demo.new(args)
25
+ ::Server::Server.new(args, demo_handler).run
24
26
  rescue Interrupt => e
25
27
  warn format("\r%<class>s", class: e.class)
26
28
  exit
@@ -31,6 +33,4 @@ module Server
31
33
  end
32
34
  end
33
35
 
34
- require_relative 'demo_listener'
35
-
36
36
  Object.new.extend(Server).main if $PROGRAM_NAME == __FILE__
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.4
4
+ version: 1.2.0
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-04-12 00:00:00.000000000 Z
11
+ date: 2024-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -74,6 +74,7 @@ files:
74
74
  - lib/server/argument_parser.rb
75
75
  - lib/server/channel_initializer.rb
76
76
  - lib/server/config.rb
77
+ - lib/server/default_handler.rb
77
78
  - lib/server/instance_methods.rb
78
79
  - lib/server/listenable.rb
79
80
  - lib/server/message_handler.rb