tiny_work_service 1.0.0

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/tiny_work_service.rb +52 -0
  3. metadata +57 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: af9afaca880e9be9ef717b24166a7c3670119bdd35cc58084edad8271da94e80
4
+ data.tar.gz: 60a483d580dd54c88a584109620b40e1d728225b2229c5dfaa84806da8eb1e36
5
+ SHA512:
6
+ metadata.gz: 1658d413a33e68eda21894c65e834d51352a2ca012183b6f1646f6b322d4f6c5c592f8b06f28ab4f9d89171088b60ba1592ede2d74e8eb5bbe50dd56e75bf0d5
7
+ data.tar.gz: 5cf7b2dd07e0ebdf0f96252cdef13215faaf28e6c07167dfad03b7231487d4e956704c01c468391472b8b69df5fe786da4665035a492e698c1afe5d3fe376d24
@@ -0,0 +1,52 @@
1
+ require 'tiny_tcp_service'
2
+
3
+ # usage:
4
+ # s = TinyWorkService.new(1234)
5
+ # s.stop!
6
+ class TinyWorkService
7
+ def initialize(port)
8
+ @service = TinyTCPService.new(port)
9
+ @service.msg_handler = self
10
+ @jobs = Queue.new
11
+
12
+ Thread.new do
13
+ loop do
14
+ break unless @service.running?
15
+
16
+ print "\rTinyWorkService #{@jobs.length.to_s.rjust(6)} jobs #{@service.num_clients.to_s.rjust(4)} workers\e[K"
17
+ sleep 0.5
18
+ end
19
+ end
20
+ end
21
+
22
+ # interface for TinyTCPService
23
+ def call(m)
24
+ raise TinyTCPService::BadClient.new("nil message") if m.nil?
25
+
26
+ case
27
+ when m[0] == '+' # add a job to the queue
28
+ self << m[1..]
29
+ 'ok' # ok, job received
30
+ when m[0] == '-' # take a job from the queue
31
+ shift || ''
32
+ else
33
+ raise TinyTCPService::BadClient.new("Client sent invalid message: `#{m[..50]}'")
34
+ end
35
+ end
36
+
37
+ # enqueue a job
38
+ def <<(j)
39
+ @jobs << j
40
+ end
41
+
42
+ # return the first job in the work queue, if there is one present
43
+ # otherwise, return nil
44
+ def shift
45
+ return nil if @jobs.empty?
46
+ @jobs.shift
47
+ end
48
+
49
+ def stop!
50
+ @service.stop!
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tiny_work_service
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jeff Lunt
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-11-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tiny_tcp_service
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: uses the tiny_tcp_service gem to implement a job queue
28
+ email: jefflunt@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - lib/tiny_work_service.rb
34
+ homepage: https://github.com/jefflunt/tiny_work_service
35
+ licenses:
36
+ - MIT
37
+ metadata: {}
38
+ post_install_message:
39
+ rdoc_options: []
40
+ require_paths:
41
+ - lib
42
+ required_ruby_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ requirements: []
53
+ rubygems_version: 3.3.7
54
+ signing_key:
55
+ specification_version: 4
56
+ summary: uses the tiny_tcp_service gem to implement a job queue
57
+ test_files: []