plux 0.1.5 → 0.1.6

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: 56011d823e56b1bd06759d5546edc8519338a99392ce980ebc6033b7f458cd0f
4
- data.tar.gz: 7b3353cbbb07daa6394aceb3fefa830c438c797a455352d6283c6a71942cdb59
3
+ metadata.gz: 8c413ca368b438a31cc35c74e711937a80ccabad0c55520c73fdc41dd02f4db0
4
+ data.tar.gz: 20093ac7f6e387e77142896c28888dffcc947af9e9cc827117b0c015ad0d2b2d
5
5
  SHA512:
6
- metadata.gz: f2c201408eb9e5d0d2b19d1eabf0908324645ef2b95b922bda8e1ec3f2b39d988b58ebfb50c1fc17ec2e0522900122956b65fd2bdda4285785e42f4b28ff0838
7
- data.tar.gz: 4ac2ab94501c97a09d3416d3dcf0837a04ecafc12050b0f8346f30a541e088059761ede6b7c674c9c1e720380a95b7bf1adc46d9c0df52c2dfa70a53132bcfb0
6
+ metadata.gz: 1684f9c33a9fab2dc02e2b957448e99d310c0ecf6e71f9e49a605d303b54bd12980654ca5f5c1e9566edf49b09fc5dcb7ead06b1ed5547e94f9fe9572b0308c1
7
+ data.tar.gz: 61ace71f940f837f41454a10262849cb090144c8402f29e79176fdd22917df41d8f87a6337aec8dcfe4fc876019363d7ad6078239271e20a5214e0c46e0f352d
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- plux (0.1.5)
4
+ plux (0.1.6)
5
5
  nio4r (~> 2.0)
6
6
 
7
7
  GEM
@@ -10,7 +10,7 @@ GEM
10
10
  coderay (1.1.2)
11
11
  method_source (0.9.2)
12
12
  minitest (5.14.1)
13
- nio4r (2.5.3)
13
+ nio4r (2.5.4)
14
14
  pry (0.12.2)
15
15
  coderay (~> 1.1.0)
16
16
  method_source (~> 0.9.0)
data/README.md CHANGED
@@ -47,6 +47,31 @@ end
47
47
  end
48
48
  ```
49
49
 
50
+ Also, you can boot multiple servers(processes) with same logic:
51
+
52
+ ```ruby
53
+ class AwesomeServer < Plux::Engine
54
+ # prepare thread-safe resources like mq/db, to handle requests
55
+ def prepare
56
+ # @db = ...
57
+ end
58
+
59
+ # threads call this method to deal with clients' message
60
+ def process(msg)
61
+ # @db << parse(msg)
62
+ end
63
+ end
64
+
65
+ a = AwesomeServer.new(:a)
66
+ b = AwesomeServer.new(:b)
67
+ c = AwesomeServer.new(:c, thread: 4)
68
+
69
+ a_client = a.connect
70
+ b_client = b.connect
71
+ c_client = c.connect
72
+ c_client_2 = c.connect
73
+ ```
74
+
50
75
  ## Development
51
76
 
52
77
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -4,6 +4,7 @@ require "plux/version"
4
4
  require "plux/server"
5
5
  require "plux/client"
6
6
  require "plux/parser"
7
+ require "plux/engine"
7
8
 
8
9
 
9
10
  module Plux
@@ -38,4 +39,5 @@ module Plux
38
39
  end
39
40
 
40
41
  FileUtils.mkdir_p(self.dir)
42
+
41
43
  end
@@ -0,0 +1,31 @@
1
+ module Plux
2
+ class Engine
3
+
4
+ def initialize(name, thread: 1)
5
+ engine = self
6
+
7
+ @server = ::Plux.worker(name, thread: thread) do
8
+ instance_variable_set(:@engine, engine)
9
+
10
+ def initialize
11
+ @engine = self.class.instance_variable_get(:@engine)
12
+ @engine.prepare
13
+ end
14
+
15
+ def work(msg)
16
+ @engine.process(msg)
17
+ end
18
+ end
19
+ end
20
+
21
+ def connect
22
+ @server.connect
23
+ end
24
+
25
+ def prepare
26
+ end
27
+
28
+ def process(msg)
29
+ end
30
+ end
31
+ end
@@ -43,7 +43,7 @@ module Plux
43
43
  child.close
44
44
  UNIXServer.open(Plux.server_file(name)) do |serv|
45
45
  parent.close
46
- worker = Class.new(&block).new
46
+ worker = Proc === block ? Class.new(&block).new : block
47
47
  reactor = Reactor.new(@thread, worker)
48
48
  loop{ reactor.register(serv.accept) }
49
49
  end
@@ -1,3 +1,3 @@
1
1
  module Plux
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plux
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - ken
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-09-20 00:00:00.000000000 Z
11
+ date: 2020-09-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -99,6 +99,7 @@ files:
99
99
  - bin/setup
100
100
  - lib/plux.rb
101
101
  - lib/plux/client.rb
102
+ - lib/plux/engine.rb
102
103
  - lib/plux/parser.rb
103
104
  - lib/plux/reactor.rb
104
105
  - lib/plux/server.rb