tcp-server 1.1.1-java → 1.1.3-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 +4 -4
- data/README.md +23 -21
- data/exe/tcp_server +1 -1
- data/lib/client.rb +5 -13
- data/lib/demo_listener.rb +1 -1
- data/lib/{log.rb → logging.rb} +92 -83
- data/lib/server/argument_parser.rb +2 -2
- data/lib/server/channel_initializer.rb +1 -1
- data/lib/server/config.rb +1 -1
- data/lib/server/instance_methods.rb +1 -1
- data/lib/server/listenable.rb +1 -1
- data/lib/server/message_handler.rb +1 -1
- data/lib/server/modular_handler.rb +1 -1
- data/lib/server/server.rb +1 -1
- data/lib/server/shutdown_hook.rb +1 -1
- data/lib/server/version.rb +2 -2
- data/lib/server.rb +3 -3
- data/lib/tcp-server.rb +1 -1
- data/lib/tcp_server.rb +1 -1
- metadata +10 -49
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9bcae7fb08cc3df7627fb5679ed5784a20b53205d60ead5fe401f978080e39e9
|
|
4
|
+
data.tar.gz: 4fd6a0775dd11cc06f3ab53f4caeed3efcc85eb59902acbb0b37b7e607cfa3ae
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
-
###
|
|
15
|
+
### Container
|
|
16
16
|
|
|
17
|
-
You may run the websocket server in a container.
|
|
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
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
curl https://mise.jdx.dev/install.sh | sh
|
|
47
|
+
~/.local/bin/mise --version
|
|
48
|
+
mise 2024.x.x
|
|
46
49
|
```
|
|
47
50
|
|
|
48
|
-
|
|
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
|
-
|
|
54
|
-
asdf install java openjdk-17.0.2
|
|
54
|
+
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
|
|
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
|
-
|
|
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
|
-
│ ├──
|
|
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://
|
|
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
data/lib/client.rb
CHANGED
|
@@ -8,22 +8,16 @@
|
|
|
8
8
|
|
|
9
9
|
# =begin
|
|
10
10
|
#
|
|
11
|
-
# Copyright Nels Nelson 2016-
|
|
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 '
|
|
18
|
+
require 'netty'
|
|
22
19
|
|
|
23
|
-
|
|
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 #{
|
|
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(
|
|
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
data/lib/{log.rb → logging.rb}
RENAMED
|
@@ -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-
|
|
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
|
-
|
|
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:
|
|
28
|
-
name: '
|
|
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
|
-
|
|
33
|
-
rolling_log_file_name_template:
|
|
34
|
-
|
|
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
|
|
45
|
-
module
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
70
|
-
config = factory.newConfigurationBuilder()
|
|
64
|
+
config = ConfigurationBuilderFactory.newConfigurationBuilder()
|
|
71
65
|
|
|
72
|
-
if log_level.is_a?
|
|
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(
|
|
68
|
+
config.setConfigurationName('websocket')
|
|
79
69
|
|
|
80
|
-
#
|
|
81
|
-
target =
|
|
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',
|
|
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
|
-
#
|
|
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
|
-
#
|
|
84
|
+
# create a rolling file appender
|
|
94
85
|
cron = config.newComponent('CronTriggeringPolicy')
|
|
95
|
-
cron = cron.addAttribute('schedule',
|
|
86
|
+
cron = cron.addAttribute('schedule', '0 0 0 * * ?')
|
|
96
87
|
|
|
97
88
|
size = config.newComponent('SizeBasedTriggeringPolicy')
|
|
98
|
-
size = size.addAttribute('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',
|
|
106
|
-
appender = appender.addAttribute('filePattern',
|
|
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 =
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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|
|
|
129
|
+
error.backtrace.each { |trace| original_error(trace) unless trace.nil? }
|
|
148
130
|
elsif error.respond_to?(:getStackTrace)
|
|
149
|
-
error.getStackTrace().each { |trace|
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
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(
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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 -
|
|
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=(
|
|
212
|
-
Logging.config[:level] = symbolize_numeric_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 =
|
|
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-
|
|
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)
|
|
27
|
+
@flags.each { |method_name| method(method_name)&.call if respond_to?(method_name) }
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
def banner
|
data/lib/server/config.rb
CHANGED
data/lib/server/listenable.rb
CHANGED
data/lib/server/server.rb
CHANGED
data/lib/server/shutdown_hook.rb
CHANGED
data/lib/server/version.rb
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
# =begin
|
|
8
8
|
#
|
|
9
|
-
# Copyright Nels Nelson 2016-
|
|
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.
|
|
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-
|
|
11
|
+
# Copyright Nels Nelson 2016-2024 but freely usable (see license)
|
|
12
12
|
#
|
|
13
13
|
# =end
|
|
14
14
|
|
|
15
|
-
require_relative '
|
|
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(
|
|
36
|
+
Object.new.extend(Server).main if $PROGRAM_NAME == __FILE__
|
data/lib/tcp-server.rb
CHANGED
data/lib/tcp_server.rb
CHANGED
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
|
+
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:
|
|
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.
|
|
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/
|
|
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.
|
|
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.
|