tcp-server 1.0.2-java → 1.0.5-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: 9b184708a43ed78e29a2668c85b546b34120f0358f6224bc6bf8c7895dbb1eb6
4
- data.tar.gz: 176d29aab7223469f089f54d2f0d90e3dcec2bda8fd5dbe054af90783a619138
3
+ metadata.gz: 4915c8f9c555eccbae820aef2e73e1742a27da1765616019d5a48c9b62e40264
4
+ data.tar.gz: 79a2ef5e23262aea916f25b0244e4ba965d4ecdeffd609c254899ca51a5f5d06
5
5
  SHA512:
6
- metadata.gz: 417b281f16bfd53faf2be531c23c22e98c2e3ed92b64cb393f6d51d98d3d8ec2c895336aae7b87fa7fcd500fa3eaa279804e0ab1e8415aa3b547ab8fd35b6859
7
- data.tar.gz: 49855312f85969ed83a8d254b500f73b01c5448948bd75dab6e337aad0582104359cd366ad03be4d74e33faaccb26fff094e64bab81338a7ec4a4a43da7cf805
6
+ metadata.gz: d8436967a6786d2321eda7d4ffd7248d8f128d5c2d8b48dc1b3b30a064553067ce5abd5f1a09d87fb3161106614c1370465c17216c703e2d6333a5314a7a7f8e
7
+ data.tar.gz: 47989e7e6028d4f421cea50e328e7b35abcc5007c86f90864ceb1ebc72a408310ad256aea949e9e9a7b9eb1082b211797eae96097afb447b3ea479713d0e234a
data/README.md CHANGED
@@ -93,6 +93,15 @@ bundle exec rake
93
93
 
94
94
  To publish the gem after first verifying that the built gem works, execute:
95
95
 
96
+ ```sh
97
+ version=$(ruby -r lib/server/version -I . -e 'puts ::Server::VERSION')
98
+ git tag --annotate --message "Release ${version}" "${version}-release"
99
+ git push origin --tags
100
+ ```
101
+
102
+
103
+ Or manually, if necessary:
104
+
96
105
  ```sh
97
106
  bundle exec rake verify
98
107
  bundle exec rake publish
@@ -113,8 +122,8 @@ bundle exec rake clean clobber
113
122
  Here is a bird's-eye view of the project layout.
114
123
 
115
124
  ```sh
116
- # date && tree
117
- Wed May 4 22:41:11 CDT 2022
125
+ # date && tree -I "logs|vendor|tmp"
126
+ Thu Jun 16 00:03:23 CDT 2022
118
127
  .
119
128
  ├── Dockerfile
120
129
  ├── Gemfile
@@ -127,6 +136,7 @@ Wed May 4 22:41:11 CDT 2022
127
136
  │ └── tcp_server
128
137
  ├── lib
129
138
  │ ├── client.rb
139
+ │ ├── demo_listener.rb
130
140
  │ ├── log.rb
131
141
  │ ├── server
132
142
  │ │ ├── argument_parser.rb
@@ -139,17 +149,20 @@ Wed May 4 22:41:11 CDT 2022
139
149
  │ │ ├── server.rb
140
150
  │ │ ├── shutdown_hook.rb
141
151
  │ │ └── version.rb
142
- └── server.rb
143
- ├── logs
152
+ ├── server.rb
153
+ ├── tcp-server.rb
154
+ │ └── tcp_server.rb
144
155
  ├── spec
145
156
  │ ├── spec_helper.rb
146
157
  │ ├── test_spec.rb
147
158
  │ └── verify
148
159
  │ └── verify_spec.rb
160
+ ├── tcp-server-1.0.2-java.gem
149
161
  ├── tcp-server-jruby.gemspec
162
+ ├── tcp_server.png
150
163
  └── tcp_server.rb
151
164
 
152
- 6 directories, 26 files
165
+ 5 directories, 31 files
153
166
  ```
154
167
 
155
168
  ## CI linting
@@ -160,6 +173,33 @@ Use the GitLab CI Linting API to validate the syntax of a CI definition file.
160
173
  jq --null-input --arg yaml "$(<.gitlab/ci/gem.gitlab-ci.yml)" '.content=$yaml' | curl --silent --location https://gitlab.com/api/v4/ci/lint --header "PRIVATE-TOKEN: ${GITLAB_COM_API_PRIVATE_TOKEN}" --header "Content-Type: application/json" --data @- | jq --raw-output '.errors[0]'
161
174
  ```
162
175
 
176
+ ## CI configuration
177
+
178
+ Generate a deploy key.
179
+
180
+ ```sh
181
+ ssh-keygen -t ed25519 -C deploy_key
182
+ ```
183
+
184
+ Use the GitLab Project-level Variables API to add the deploy key as a ssh private key variable.
185
+
186
+ ```sh
187
+ project_path="nelsnelson/$(basename $(pwd))"
188
+
189
+ project=$(curl --silent --show-error --location "https://gitlab.com/api/v4/search?scope=projects&search=${project_path}" --header "PRIVATE-TOKEN: ${GITLAB_COM_API_PRIVATE_TOKEN}" | jq --arg project_path "${project_path}" '.[] | select(.path_with_namespace == $project_path)')
190
+
191
+ project_id=$(curl --silent --show-error --location "https://gitlab.com/api/v4/search?scope=projects&search=${project_path}" --header "PRIVATE-TOKEN: ${GITLAB_COM_API_PRIVATE_TOKEN}" | jq --arg project_path "${project_path}" '.[] | select(.path_with_namespace == $project_path) | .id')
192
+
193
+ # Add the deploy_token as a CI variable:
194
+ curl --silent --show-error --location --request POST "https://gitlab.com/api/v4/projects/${project_id}/variables" --header "PRIVATE-TOKEN: ${GITLAB_COM_API_PRIVATE_TOKEN}" --form "key=SSH_PRIVATE_KEY" --form "value=$(cat ./deploy_token)" --form "protected=true" | jq
195
+ ```
196
+
197
+ Use the Deploy keys API to add a the public deploy key as a deploy key for the project.
198
+
199
+ ```sh
200
+ curl --silent --show-error --location --request POST "https://gitlab.com/api/v4/projects/${project_id}/deploy_keys" --header "PRIVATE-TOKEN: ${GITLAB_COM_API_PRIVATE_TOKEN}" --data '{"title": "deploy_key", "key": "$(cat ./deploy_token.pub)", "can_push": "true"}' | jq
201
+ ```
202
+
163
203
  [license]: https://gitlab.com/nelsnelson/tcp-server-jruby/blob/master/LICENSE
164
204
  [asdf]: https://asdf-vm.com/
165
205
  [Netty project]: https://github.com/netty/netty
@@ -0,0 +1,31 @@
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-2022 but freely usable (see license)
10
+ #
11
+ # =end
12
+
13
+ # The Server module
14
+ module Server
15
+ # The Demo class
16
+ 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
23
+
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()
28
+ end
29
+ end
30
+ end
31
+ # module Server
@@ -30,23 +30,23 @@ module Server
30
30
 
31
31
  # The ChannelInitializer class
32
32
  class ChannelInitializer < Java::io.netty.channel.ChannelInitializer
33
- DefaultHandler = ModularHandler.new
33
+ DefaultServerHandler = ModularHandler.new
34
34
  FrameDecoderBufferBytesSize = 8192
35
35
  # The encoder and decoder are sharable. If they were not, then
36
36
  # constant definitions could not be used.
37
37
  Decoder = StringDecoder.new
38
38
  Encoder = StringEncoder.new
39
- attr_accessor :handlers
39
+ attr_accessor :user_handlers
40
40
  attr_reader :options
41
41
 
42
42
  def initialize(options = {})
43
43
  super()
44
44
  @options = options
45
- @handlers = []
45
+ @user_handlers = []
46
46
  end
47
47
 
48
48
  def <<(handler)
49
- @handlers << handler
49
+ @user_handlers << handler
50
50
  end
51
51
 
52
52
  def initChannel(channel)
@@ -58,16 +58,16 @@ module Server
58
58
  Encoder
59
59
  )
60
60
  add_user_handlers(pipeline)
61
- pipeline.addLast(DefaultHandler)
61
+ pipeline.addLast(DefaultServerHandler)
62
62
  end
63
63
 
64
64
  protected
65
65
 
66
66
  def add_user_handlers(pipeline)
67
- @handlers.each do |handler|
67
+ @user_handlers.each do |handler|
68
68
  case handler
69
69
  when Class then pipeline.addLast(handler.new)
70
- when Proc then pipeline.addLast(Server::MessageHandler.new(&handler))
70
+ when Proc then pipeline.addLast(::Server::MessageHandler.new(&handler))
71
71
  else pipeline.addLast(handler)
72
72
  end
73
73
  end
@@ -27,14 +27,14 @@ module Server
27
27
  # The InstanceMethods module
28
28
  module InstanceMethods
29
29
  def configure_handlers(&block)
30
- ::Server::ChannelInitializer::DefaultHandler.add_listener(self)
30
+ add_listener(self)
31
31
  channel_initializer << block if block_given?
32
32
  end
33
33
 
34
34
  def bootstrap
35
35
  @bootstrap = ServerBootstrap.new
36
36
  @bootstrap.group(boss_group, worker_group)
37
- @bootstrap.channel(::Server::CHANNEL_TYPE)
37
+ @bootstrap.channel(Server::CHANNEL_TYPE)
38
38
  @bootstrap.option(ChannelOption::SO_BACKLOG, 100.to_java(java.lang.Integer))
39
39
  @bootstrap.handler(logging_handler) if options[:log_requests]
40
40
  @bootstrap.childHandler(channel_initializer)
@@ -71,8 +71,7 @@ module Server
71
71
  rescue java.net.SocketException => e
72
72
  raise "Socket error: #{e.message}: #{options[:host]}:#{port}"
73
73
  ensure
74
- boss_group&.shutdownGracefully()
75
- worker_group&.shutdownGracefully()
74
+ stop
76
75
  end
77
76
  # rubocop: enable Metrics/AbcSize
78
77
  # rubocop: enable Metrics/MethodLength
@@ -82,9 +81,18 @@ module Server
82
81
  ::Server::Channels.close().awaitUninterruptibly()
83
82
  end
84
83
 
84
+ def stop
85
+ boss_group&.shutdownGracefully()
86
+ worker_group&.shutdownGracefully()
87
+ end
88
+
85
89
  def <<(handler)
86
90
  channel_initializer << handler
87
91
  end
92
+
93
+ def add_listener(listener)
94
+ ::Server::ChannelInitializer::DefaultServerHandler.add_listener(listener)
95
+ end
88
96
  end
89
97
  # module ServerInstanceMethods
90
98
  end
data/lib/server/server.rb CHANGED
@@ -18,15 +18,14 @@ require_relative 'listenable'
18
18
 
19
19
  # The Server module
20
20
  module Server
21
- CHANNEL_TYPE = Java::io.netty.channel.socket.nio.NioServerSocketChannel.java_class
22
-
23
21
  # The Server class sets up the netty server.
24
22
  class Server
23
+ CHANNEL_TYPE = Java::io.netty.channel.socket.nio.NioServerSocketChannel.java_class
25
24
  include ::Server::InstanceMethods
26
25
  attr_reader :options
27
26
 
28
27
  def initialize(params = {}, &block)
29
- @options = params.fetch(:options, {})
28
+ @options = ::Server::Config::DEFAULTS.merge(params.fetch(:options, {}))
30
29
  configure_handlers(&block)
31
30
  end
32
31
 
@@ -40,10 +39,6 @@ module Server
40
39
  log.debug "Sending response: #{response.inspect}"
41
40
  ctx.writeAndFlush("#{response}\n")
42
41
  end
43
-
44
- def add_listener(listener)
45
- ::Server::ChannelInitializer::DefaultHandler.add_listener(listener)
46
- end
47
42
  # rubocop: enable Metrics/AbcSize
48
43
  end
49
44
  # class Server
@@ -12,5 +12,5 @@
12
12
 
13
13
  # The Server module
14
14
  module Server
15
- VERSION = '1.0.2'.freeze
15
+ VERSION = '1.0.5'.freeze
16
16
  end
data/lib/server.rb CHANGED
@@ -20,22 +20,6 @@ require_relative 'server/server'
20
20
  module Server
21
21
  InterruptTemplate = "\r%<class>s".freeze
22
22
 
23
- # The Demo class
24
- class Demo
25
- def channel_active(ctx)
26
- ::Server.log.info "Channel active: #{ctx.channel}"
27
- response = 'Hello, world!'
28
- log.trace "Sending response: #{response.inspect}"
29
- ctx.channel.writeAndFlush("#{response}\n")
30
- end
31
-
32
- def exception_caught(_ctx, cause)
33
- ::Server.log.error "Exception caught: #{cause}"
34
- cause.backtrace.each { |t| ::Server.log.error t }
35
- ctx.close()
36
- end
37
- end
38
-
39
23
  # rubocop: disable Metrics/AbcSize
40
24
  # rubocop: disable Metrics/MethodLength
41
25
  def main(args = parse_arguments)
@@ -56,4 +40,6 @@ module Server
56
40
  end
57
41
  # module Server
58
42
 
43
+ require_relative 'demo_listener'
44
+
59
45
  Object.new.extend(::Server).main if $PROGRAM_NAME == __FILE__
data/lib/tcp-server.rb ADDED
@@ -0,0 +1,13 @@
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-2022 but freely usable (see license)
10
+ #
11
+ # =end
12
+
13
+ require_relative 'server'
data/lib/tcp_server.rb ADDED
@@ -0,0 +1,13 @@
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-2022 but freely usable (see license)
10
+ #
11
+ # =end
12
+
13
+ require_relative 'server'
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.0.2
4
+ version: 1.0.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: 2022-05-22 00:00:00.000000000 Z
11
+ date: 2022-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -107,6 +107,7 @@ files:
107
107
  - Rakefile
108
108
  - exe/tcp_server
109
109
  - lib/client.rb
110
+ - lib/demo_listener.rb
110
111
  - lib/log.rb
111
112
  - lib/server.rb
112
113
  - lib/server/argument_parser.rb
@@ -119,6 +120,8 @@ files:
119
120
  - lib/server/server.rb
120
121
  - lib/server/shutdown_hook.rb
121
122
  - lib/server/version.rb
123
+ - lib/tcp-server.rb
124
+ - lib/tcp_server.rb
122
125
  homepage: https://rubygems.org/gems/tcp-server-jruby
123
126
  licenses:
124
127
  - MIT
@@ -144,5 +147,5 @@ requirements: []
144
147
  rubygems_version: 3.2.29
145
148
  signing_key:
146
149
  specification_version: 4
147
- summary: Server for JRuby packaged as a gem.
150
+ summary: TCP Server for JRuby packaged as a gem.
148
151
  test_files: []