tcp-server 1.1.1-java → 1.1.3-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: b8e39e969dfb70787eda43f7ba6a8f4f15c14710cad318aed3dd9f1aa86c7f4d
4
- data.tar.gz: ae768332a03daf626edbafb881ba89e60e38ee487774caa37c7729f1cf6e849e
3
+ metadata.gz: 9bcae7fb08cc3df7627fb5679ed5784a20b53205d60ead5fe401f978080e39e9
4
+ data.tar.gz: 4fd6a0775dd11cc06f3ab53f4caeed3efcc85eb59902acbb0b37b7e607cfa3ae
5
5
  SHA512:
6
- metadata.gz: 8f3daa2d01ad10b15a3ac8fb9b09d97dd4998e95ff7643c1d7413a08357501f8d9f0d12dab4d2e364bf5ea2dc09c9eab13477f3addc8382c78eedadfbad19793
7
- data.tar.gz: 3e2b11b753ac6ac11d3e726d65197b0bb2befff8e925f48b79755027ad08d14ebedc53fc38ce89a9202bfeb7ef67b0089e9d675c3f93d82177a40ab4df4d1d97
6
+ metadata.gz: 9834bab4ba9000b972100fcff462e7ce21f60b4630dfe2b488a0025ac0c0a844a5e4a585804abdf3e4fc2e1eadc2bb9d4468beff8050a2ae9e5921cb48a64dfb
7
+ data.tar.gz: 0d808e91710feef4004b0b52e8139cde6c496202339de4b3ca299cc8f9616f98586e9f9348efe58e07b269caac247fc487ef1066676ccd71a2e90387b52faf34
data/README.md CHANGED
@@ -12,9 +12,9 @@ It is based on the [Netty project]. Netty is written in java, but I wanted to w
12
12
  Follow these instructions to get a tcp server echo program running.
13
13
 
14
14
 
15
- ### Docker
15
+ ### Container
16
16
 
17
- You may run the websocket server in a container. The [`colima`](https://github.com/abiosoft/colima) for a container runtime is recommended.
17
+ You may run the websocket server in a container. Using `[colima]` for a container runtime is recommended.
18
18
 
19
19
  ```sh
20
20
  colima start
@@ -26,7 +26,7 @@ docker-compose down
26
26
  Building the image or running the container:
27
27
 
28
28
  ```sh
29
- docker build --tag tcp-server-jruby .
29
+ docker build --squash --tag tcp-server-jruby .
30
30
  docker run --detach --publish 4000:4000 --name tcp-server-jruby tcp-server-jruby
31
31
  ```
32
32
 
@@ -35,39 +35,40 @@ docker run --detach --publish 4000:4000 --name tcp-server-jruby tcp-server-jruby
35
35
 
36
36
  If one insists, one may run everything directly with the required dependencies installed.
37
37
 
38
- ### Install asdf
39
38
 
40
- The [asdf] CLI tool used to manage multiple runtime versions.
39
+ ## Install mise-en-place
40
+
41
+ The [mise] CLI tool used to manage multiple runtime versions.
42
+
43
+ See: https://mise.jdx.dev/getting-started.html
41
44
 
42
45
  ```sh
43
- git clone https://github.com/asdf-vm/asdf.git "${HOME}/.asdf" --branch release-v0.10.0
44
- pushd "${HOME}/.asdf"; git fetch origin; popd
45
- source "${HOME}/.asdf/asdf.sh"; source "${HOME}/.asdf/completions/asdf.bash"
46
+ curl https://mise.jdx.dev/install.sh | sh
47
+ ~/.local/bin/mise --version
48
+ mise 2024.x.x
46
49
  ```
47
50
 
48
- ### Install required runtime software
49
-
50
- Download and install the latest version of the [Java JDK].
51
+ Enable mise activation in future zsh sessions.
51
52
 
52
53
  ```sh
53
- asdf plugin add java
54
- asdf install java openjdk-17.0.2
54
+ echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
55
55
  ```
56
56
 
57
57
 
58
- Download and install the latest version of [JRuby].
58
+ ## Install required runtime software
59
+
60
+ Use mise to install the runtime software defined as requirements
61
+ in the .tool-versions file.
59
62
 
60
63
  ```sh
61
- asdf plugin add ruby
62
- asdf plugin update --all
63
- asdf list all ruby
64
- asdf install ruby jruby-9.3.4.0
64
+ mise install
65
65
  ```
66
66
 
67
67
 
68
68
  Install the project dependencies.
69
69
 
70
70
  ```sh
71
+ gem install bundler
71
72
  bundle install
72
73
  ```
73
74
 
@@ -123,7 +124,7 @@ bundle exec rake clean clobber
123
124
  Here is a bird's-eye view of the project layout.
124
125
 
125
126
  ```sh
126
- # date && tree -A -I "logs|vendor|tmp"
127
+ # date && tree -A -I "logs|vendor|tmp|Gemfile.lock"
127
128
  Sat Jul 23 22:12:37 CDT 2022
128
129
  .
129
130
  ├── Dockerfile
@@ -138,7 +139,7 @@ Sat Jul 23 22:12:37 CDT 2022
138
139
  ├── lib
139
140
  │ ├── client.rb
140
141
  │ ├── demo_listener.rb
141
- │ ├── log.rb
142
+ │ ├── logging.rb
142
143
  │ ├── server
143
144
  │ │ ├── argument_parser.rb
144
145
  │ │ ├── channel_initializer.rb
@@ -207,7 +208,8 @@ curl --silent --show-error --location --request POST "https://gitlab.com/api/v4/
207
208
  ```
208
209
 
209
210
  [license]: https://gitlab.com/nelsnelson/tcp-server-jruby/blob/master/LICENSE
210
- [asdf]: https://asdf-vm.com/
211
+ [asdf]: https://mise.jdx.dev/
212
+ [colima]: https://github.com/abiosoft/colima
211
213
  [Netty project]: https://github.com/netty/netty
212
214
  [Java JDK]: https://www.java.com/en/download/
213
215
  [JRuby]: https://jruby.org/download
data/exe/tcp_server CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  # =begin
10
10
 
11
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
11
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
12
12
 
13
13
  # =end
14
14
 
data/lib/client.rb CHANGED
@@ -8,22 +8,16 @@
8
8
 
9
9
  # =begin
10
10
  #
11
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
11
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
12
12
  #
13
13
  # =end
14
14
 
15
15
  require 'java'
16
- require 'netty'
17
-
18
- require 'logger'
19
16
  require 'optparse'
20
17
 
21
- require 'log'
18
+ require 'netty'
22
19
 
23
- # The Client module
24
- module Client
25
- VERSION = '1.0.1'.freeze unless defined?(VERSION)
26
- end
20
+ require_relative 'logging'
27
21
 
28
22
  # The Client module
29
23
  module Client
@@ -521,7 +515,7 @@ module Client
521
515
 
522
516
  def version
523
517
  @parser.on_tail('--version', 'Show version') do
524
- puts "#{$PROGRAM_NAME} version #{Version}"
518
+ puts "#{File.basename($PROGRAM_NAME)} version #{::Server::VERSION}"
525
519
  exit
526
520
  end
527
521
  end
@@ -580,15 +574,13 @@ end
580
574
 
581
575
  # The Client module
582
576
  module Client
583
- InterruptTemplate = "\r%<class>s".freeze
584
-
585
577
  # rubocop: disable Metrics/AbcSize
586
578
  # rubocop: disable Metrics/MethodLength
587
579
  def main(args = parse_arguments)
588
580
  Logging.log_level = args[:log_level]
589
581
  ::TCP::Client.new(args, ::Client::Console.new, ::Client::Monitor.new)
590
582
  rescue Interrupt => e
591
- warn format(InterruptTemplate, class: e.class)
583
+ warn format("\r%<class>s", class: e.class)
592
584
  exit
593
585
  rescue RuntimeError => e
594
586
  ::Client.log.fatal e.message
data/lib/demo_listener.rb CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
@@ -1,18 +1,20 @@
1
1
  # encoding: utf-8
2
2
  # frozen_string_literal: false
3
3
 
4
+ # -*- mode: ruby -*-
5
+ # vi: set ft=ruby :
6
+
4
7
  # =begin
5
8
 
6
- # Copyright Nels Nelson 2016-2019 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
7
10
 
8
11
  # =end
9
12
 
10
13
  require 'java'
14
+ require 'fileutils'
11
15
  require 'logger'
12
16
 
13
- require 'log4j-2'
14
-
15
- require 'fileutils'
17
+ require 'apache-log4j-2'
16
18
 
17
19
  # The Logging module
18
20
  module Logging
@@ -22,16 +24,22 @@ module Logging
22
24
  lib_dir_path = File.expand_path(__dir__)
23
25
  project_dir_path = File.expand_path(File.dirname(lib_dir_path))
24
26
  logs_dir_path = File.expand_path(File.join(project_dir_path, 'logs'))
25
- server_log_file = File.expand_path(File.join(logs_dir_path, 'server.log'))
27
+ FileUtils.mkdir_p(logs_dir_path)
28
+ log_file_path = File.expand_path(File.join(logs_dir_path, 'server.log'))
29
+ FileUtils.touch(log_file_path)
26
30
  {
27
- level: :info,
28
- name: 'tcp-server',
31
+ level: Logger::INFO,
32
+ name: 'websocket',
29
33
  lib_dir_path: lib_dir_path,
30
34
  project_dir_path: project_dir_path,
31
35
  logs_dir_path: logs_dir_path,
32
- server_log_file: server_log_file,
33
- rolling_log_file_name_template: 'server-%d{yyyy-MM-dd}.log.gz',
34
- logger_pattern_template: '%d{ABSOLUTE} %-5p [%c{1}] %m%n',
36
+ log_file_path: log_file_path,
37
+ rolling_log_file_name_template: File.expand_path(
38
+ File.join(logs_dir_path, 'server-%d{yyyy-MM-dd}.log.gz')),
39
+ logging_pattern_template: {
40
+ java: '%d{ABSOLUTE} %-5p [%c{1}] %m%n',
41
+ ruby: "%<timestamp>s %-5<severity>s [%<progname>s] %<msg>s\n"
42
+ },
35
43
  schedule: '0 0 0 * * ?',
36
44
  size: '100M'
37
45
  }
@@ -41,69 +49,52 @@ module Logging
41
49
  # rubocop: enable Metrics/MethodLength
42
50
  end
43
51
 
44
- # The LogInitialization module
45
- module LogInitialization
46
- def init
47
- init_log_file
48
- init_log4j if defined? Java
49
- end
50
- module_function :init
51
-
52
- def init_log_file
53
- FileUtils.mkdir_p(Logging.config[:logs_dir_path])
54
- return if File.file?(Logging.config[:server_log_file])
55
-
56
- File.write(Logging.config[:server_log_file], '')
52
+ # The Logging module
53
+ module Logging
54
+ if defined?(Java)
55
+ java_import Java::org.apache.logging.log4j.core.appender::ConsoleAppender
56
+ java_import Java::org.apache.logging.log4j.core.config::Configurator
57
+ java_import Java::org.apache.logging.log4j.core.config.builder.api::ConfigurationBuilderFactory
57
58
  end
58
- module_function :init_log_file
59
59
 
60
60
  # rubocop: disable Metrics/AbcSize
61
61
  # rubocop: disable Metrics/MethodLength
62
62
  def init_log4j(log_level = org.apache.logging.log4j.Level::INFO)
63
- server_log_file = Logging.config[:server_log_file]
64
- logs_dir_path = Logging.config[:logs_dir_path]
65
- rolling_log_file_name_template = Logging.config[:rolling_log_file_name_template]
66
- rolling_log_file_path = File.join(logs_dir_path, rolling_log_file_name_template)
67
-
68
63
  java.lang::System.setProperty('log4j.shutdownHookEnabled', java.lang::Boolean.toString(false))
69
- factory = org.apache.logging.log4j.core.config.builder.api::ConfigurationBuilderFactory
70
- config = factory.newConfigurationBuilder()
64
+ config = ConfigurationBuilderFactory.newConfigurationBuilder()
71
65
 
72
- if log_level.is_a?(Symbol)
73
- log_level = org.apache.logging.log4j.Level.to_level(
74
- log_level.to_s.upcase
75
- )
76
- end
66
+ log_level = org.apache.logging.log4j::Level.to_level(log_level.to_s.upcase) if log_level.is_a? Symbol
77
67
  config.setStatusLevel(log_level)
78
- config.setConfigurationName(Logging.config['name'])
68
+ config.setConfigurationName('websocket')
79
69
 
80
- # Create a console appender
81
- target = org.apache.logging.log4j.core.appender::ConsoleAppender::Target::SYSTEM_OUT
70
+ # create a console appender
71
+ target = ConsoleAppender::Target::SYSTEM_OUT
72
+ pattern = Logging.config[:logging_pattern_template][:java]
82
73
  layout = config.newLayout('PatternLayout')
83
- layout = layout.addAttribute('pattern', Logging.config[:logger_pattern_template])
74
+ layout = layout.addAttribute('pattern', pattern)
84
75
  appender = config.newAppender('stdout', 'CONSOLE')
85
76
  appender = appender.addAttribute('target', target)
86
77
  appender = appender.add(layout)
87
78
  config.add(appender)
88
79
 
89
- # Create a root logger
80
+ # create a root logger
90
81
  root_logger = config.newRootLogger(log_level)
91
82
  root_logger = root_logger.add(config.newAppenderRef('stdout'))
92
83
 
93
- # Create a rolling file appender
84
+ # create a rolling file appender
94
85
  cron = config.newComponent('CronTriggeringPolicy')
95
- cron = cron.addAttribute('schedule', Logging.config[:schedule])
86
+ cron = cron.addAttribute('schedule', '0 0 0 * * ?')
96
87
 
97
88
  size = config.newComponent('SizeBasedTriggeringPolicy')
98
- size = size.addAttribute('size', Logging.config[:size])
89
+ size = size.addAttribute('size', '100M')
99
90
 
100
91
  policies = config.newComponent('Policies')
101
92
  policies = policies.addComponent(cron)
102
93
  policies = policies.addComponent(size)
103
94
 
104
95
  appender = config.newAppender('rolling_file', 'RollingFile')
105
- appender = appender.addAttribute('fileName', server_log_file)
106
- appender = appender.addAttribute('filePattern', rolling_log_file_path)
96
+ appender = appender.addAttribute('fileName', Logging.config[:log_file_path])
97
+ appender = appender.addAttribute('filePattern', Logging.config[:rolling_log_file_name_template])
107
98
  appender = appender.add(layout)
108
99
  appender = appender.addComponent(policies)
109
100
  config.add(appender)
@@ -113,28 +104,20 @@ module LogInitialization
113
104
  config.add(root_logger)
114
105
 
115
106
  logging_configuration = config.build()
116
- ctx = org.apache.logging.log4j.core.config::Configurator.initialize(logging_configuration)
107
+ ctx = Configurator.initialize(logging_configuration)
117
108
  ctx.updateLoggers()
118
109
  end
110
+ module_function :init_log4j
119
111
  # rubocop: enable Metrics/AbcSize
120
112
  # rubocop: enable Metrics/MethodLength
121
113
  # def init_log4j
122
- module_function :init_log4j
123
- end
124
- # module LogInitialization
125
-
126
- ::LogInitialization.init
127
114
 
128
- # The Apache log4j Logger class
129
- # rubocop: disable Style/ClassAndModuleChildren
130
- class org.apache.logging.log4j.core::Logger
131
- alias log4j_error error
132
- def error(error_or_message, error = nil)
133
- return extract_backtrace(error_or_message) if error.nil?
134
- log4j_error(generate_message(error_or_message, error))
135
- extract_backtrace(error)
136
- end
115
+ init_log4j if defined?(Java)
116
+ end
117
+ # module Logging
137
118
 
119
+ # Namespace for methods to help with implicit backtrace printing
120
+ module LoggerHelpers
138
121
  def generate_message(error_or_message, error)
139
122
  error_message = "#{error_or_message}: #{error.class.name}"
140
123
  error_message << ": #{error.message}" if error.respond_to?(:message)
@@ -142,40 +125,67 @@ class org.apache.logging.log4j.core::Logger
142
125
  end
143
126
 
144
127
  def extract_backtrace(error, default_result = nil)
145
- log4j_error(error)
146
128
  if error.respond_to?(:backtrace)
147
- error.backtrace.each { |trace| log4j_error(trace) unless trace.nil? }
129
+ error.backtrace.each { |trace| original_error(trace) unless trace.nil? }
148
130
  elsif error.respond_to?(:getStackTrace)
149
- error.getStackTrace().each { |trace| log4j_error(trace) unless trace.nil? }
131
+ error.getStackTrace().each { |trace| original_error(trace) unless trace.nil? }
150
132
  else
151
133
  default_result
152
134
  end
153
135
  end
154
136
  end
155
- # rubocop: enable Style/ClassAndModuleChildren
137
+
138
+ # Monkey-patch the built-in Ruby Logger class to support
139
+ # implicit backtrace printing
140
+ # TODO: Figure out if this is actually useful.
141
+ class Logger
142
+ include LoggerHelpers
143
+
144
+ alias original_error error
145
+ def error(error_or_message, error = nil)
146
+ return extract_backtrace(error_or_message) if error.nil?
147
+ original_error(generate_message(error_or_message, error))
148
+ extract_backtrace(original_error(error))
149
+ end
150
+ end
156
151
 
157
152
  # The Logging module
158
153
  module Logging
159
- def init_logger(level = :all, logger_name = nil)
154
+ if defined?(Java)
155
+ java_import Java::org.apache.logging.log4j.Level
156
+ java_import Java::org.apache.logging.log4j.LogManager
157
+ end
158
+
159
+ FORWARD_SLASH_PATTERN = %r{/} unless defined?(FORWARD_SLASH_PATTERN)
160
+
161
+ def init_logger(level = :info, logger_name = nil)
160
162
  return init_java_logger(level, logger_name, caller[2]) if defined?(Java)
161
- init_ruby_logger(level)
163
+ init_ruby_logger(level, logger_name, caller[2])
162
164
  end
163
165
 
164
- def init_ruby_logger(level)
165
- logger_instance = Logger.new
166
- logger_instance.level = Logging::Level.to_level(level.to_s.upcase)
167
- logger_instance
166
+ def ruby_log_formatter(severity_level, datetime, program_name, message)
167
+ format(
168
+ Logging.config[:logging_pattern_template][:ruby],
169
+ timestamp: datetime.strftime(Logging.config[:logging_timestamp_format]),
170
+ progname: program_name, severity: severity_level, msg: message)
168
171
  end
169
172
 
170
- # rubocop: disable Metrics/AbcSize
171
- def init_java_logger(level, logger_name = nil, source_location = nil)
173
+ def init_ruby_logger(level = nil, logger_name = nil, source_location = nil)
172
174
  logger_name = get_formatted_logger_name(logger_name)
173
- logger_name = source_location.split(/\//).last if logger_name.empty?
174
- logger_instance = org.apache.logging.log4j.LogManager.getLogger(logger_name)
175
- logger_instance.level = org.apache.logging.log4j.Level.to_level(level.to_s.upcase)
176
- logger_instance
175
+ logger_name = source_location.split(FORWARD_SLASH_PATTERN).last if logger_name.empty?
176
+ log = Logger.new($stdout, progname: logger_name)
177
+ log.level = level.to_s unless level.nil?
178
+ log.formatter = method(:ruby_log_formatter)
179
+ log
180
+ end
181
+
182
+ def init_java_logger(level = nil, logger_name = nil, source_location = nil)
183
+ logger_name = get_formatted_logger_name(logger_name)
184
+ logger_name = source_location.split(FORWARD_SLASH_PATTERN).last if logger_name.empty?
185
+ log = LogManager.getLogger(logger_name)
186
+ log.level = Level.to_level(level.to_s.upcase) unless level.nil?
187
+ log
177
188
  end
178
- # rubocop: enable Metrics/AbcSize
179
189
 
180
190
  def get_formatted_logger_name(logger_name = nil)
181
191
  return logger_name.to_s[/\w+$/] unless logger_name.nil?
@@ -202,14 +212,13 @@ module Logging
202
212
  when 1 then :info
203
213
  when 0 then :debug
204
214
  when -1 then :trace
205
- when -2..-Float::INFINITY then :all
215
+ when -Float::INFINITY..-2 then :all
206
216
  end
207
217
  end
208
218
  # rubocop: enable Metrics/CyclomaticComplexity
209
- module_function :symbolize_numeric_log_level
210
219
 
211
- def log_level=(log_level)
212
- Logging.config[:level] = symbolize_numeric_log_level(log_level)
220
+ def log_level=(level)
221
+ Logging.config[:level] = symbolize_numeric_log_level(level)
213
222
  end
214
223
  module_function :log_level=
215
224
 
@@ -218,7 +227,7 @@ module Logging
218
227
  end
219
228
  module_function :log_level
220
229
 
221
- def log(level = Logging.log_level, log_name = nil)
230
+ def log(level = Logging.log_level, log_name = Logging.config[:app_name])
222
231
  @log ||= init_logger(level, log_name)
223
232
  end
224
233
  alias logger log
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
@@ -24,7 +24,7 @@ module Server
24
24
  @parser = option_parser
25
25
  @options = ::Server.server_config.dup
26
26
  @flags = %i[banner port ssl idle_reading idle_writing log_requests log_level help version]
27
- @flags.each { |method_name| method(method_name).call }
27
+ @flags.each { |method_name| method(method_name)&.call if respond_to?(method_name) }
28
28
  end
29
29
 
30
30
  def banner
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
data/lib/server/config.rb CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
data/lib/server/server.rb CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
@@ -6,11 +6,11 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
13
13
  # The Server module
14
14
  module Server
15
- VERSION = '1.1.1'.freeze
15
+ VERSION = '1.1.3'.freeze
16
16
  end
data/lib/server.rb CHANGED
@@ -8,11 +8,11 @@
8
8
 
9
9
  # =begin
10
10
  #
11
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
11
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
12
12
  #
13
13
  # =end
14
14
 
15
- require_relative 'log'
15
+ require_relative 'logging'
16
16
  require_relative 'server/argument_parser'
17
17
  require_relative 'server/server'
18
18
 
@@ -33,4 +33,4 @@ end
33
33
 
34
34
  require_relative 'demo_listener'
35
35
 
36
- Object.new.extend(::Server).main if $PROGRAM_NAME == __FILE__
36
+ Object.new.extend(Server).main if $PROGRAM_NAME == __FILE__
data/lib/tcp-server.rb CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
data/lib/tcp_server.rb CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  # =begin
8
8
  #
9
- # Copyright Nels Nelson 2016-2022 but freely usable (see license)
9
+ # Copyright Nels Nelson 2016-2024 but freely usable (see license)
10
10
  #
11
11
  # =end
12
12
 
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.1
4
+ version: 1.1.3
5
5
  platform: java
6
6
  authors:
7
7
  - Nels Nelson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-07-24 00:00:00.000000000 Z
11
+ date: 2024-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -17,13 +17,14 @@ dependencies:
17
17
  - !ruby/object:Gem::Version
18
18
  version: 2.17.1
19
19
  name: apache-log4j-2
20
- prerelease: false
21
20
  type: :runtime
21
+ prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.17.1
27
+ force_ruby_platform: false
27
28
  - !ruby/object:Gem::Dependency
28
29
  requirement: !ruby/object:Gem::Requirement
29
30
  requirements:
@@ -31,13 +32,14 @@ dependencies:
31
32
  - !ruby/object:Gem::Version
32
33
  version: 1.70.1
33
34
  name: bouncycastle
34
- prerelease: false
35
35
  type: :runtime
36
+ prerelease: false
36
37
  version_requirements: !ruby/object:Gem::Requirement
37
38
  requirements:
38
39
  - - "~>"
39
40
  - !ruby/object:Gem::Version
40
41
  version: 1.70.1
42
+ force_ruby_platform: false
41
43
  - !ruby/object:Gem::Dependency
42
44
  requirement: !ruby/object:Gem::Requirement
43
45
  requirements:
@@ -45,55 +47,14 @@ dependencies:
45
47
  - !ruby/object:Gem::Version
46
48
  version: 4.1.74
47
49
  name: netty-io
48
- prerelease: false
49
50
  type: :runtime
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: 4.1.74
55
- - !ruby/object:Gem::Dependency
56
- requirement: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: 12.3.0
61
- name: rake
62
- prerelease: false
63
- type: :development
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: 12.3.0
69
- - !ruby/object:Gem::Dependency
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: 3.11.0
75
- name: rspec
76
- prerelease: false
77
- type: :development
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 3.11.0
83
- - !ruby/object:Gem::Dependency
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: 1.25.0
89
- name: rubocop
90
51
  prerelease: false
91
- type: :development
92
52
  version_requirements: !ruby/object:Gem::Requirement
93
53
  requirements:
94
54
  - - "~>"
95
55
  - !ruby/object:Gem::Version
96
- version: 1.25.0
56
+ version: 4.1.74
57
+ force_ruby_platform: false
97
58
  description: TCP Server for JRuby is a tcp server which supports a demo echo server
98
59
  application.
99
60
  email: nels@nelsnelson.org
@@ -108,7 +69,7 @@ files:
108
69
  - exe/tcp_server
109
70
  - lib/client.rb
110
71
  - lib/demo_listener.rb
111
- - lib/log.rb
72
+ - lib/logging.rb
112
73
  - lib/server.rb
113
74
  - lib/server/argument_parser.rb
114
75
  - lib/server/channel_initializer.rb
@@ -144,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
105
  - !ruby/object:Gem::Version
145
106
  version: '0'
146
107
  requirements: []
147
- rubygems_version: 3.2.29
108
+ rubygems_version: 3.3.26
148
109
  signing_key:
149
110
  specification_version: 4
150
111
  summary: TCP Server for JRuby packaged as a gem.