zmachine 0.3.2 → 0.4.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.
@@ -8,6 +8,11 @@ require 'zmachine/channel'
8
8
  module ZMachine
9
9
  class TCPChannel < Channel
10
10
 
11
+ def initialize
12
+ super
13
+ @buffer = Thread.current[:tcp_channel_buffer] ||= ByteBuffer.allocate(1024 * 1024)
14
+ end
15
+
11
16
  def selectable_fd
12
17
  @socket
13
18
  end
@@ -60,17 +65,17 @@ module ZMachine
60
65
  end
61
66
 
62
67
  def connected?
68
+ return false if @socket.is_a?(ServerSocketChannel)
63
69
  @socket.connected?
64
70
  end
65
71
 
66
72
  def read_inbound_data
67
73
  ZMachine.logger.debug("zmachine:tcp_channel:#{__method__}", channel: self) if ZMachine.debug
68
- buffer = @inbound_buffer
69
- buffer.clear
70
- raise IOException.new("EOF") if @socket.read(buffer) == -1
71
- buffer.flip
72
- return if buffer.limit == 0
73
- data = buffer.array[buffer.position...buffer.limit]
74
+ @buffer.clear
75
+ raise IOException.new("EOF") if @socket.read(@buffer) == -1
76
+ @buffer.flip
77
+ return if @buffer.limit == 0
78
+ data = java.util.Arrays.copyOfRange(@buffer.array, @buffer.position, @buffer.limit)
74
79
  data = String.from_java_bytes(data) unless @raw
75
80
  data
76
81
  end
@@ -44,7 +44,7 @@ shared_examples_for "a Channel" do
44
44
 
45
45
  it 'writes outbound buffers to the socket' do
46
46
  @client.send_data(data)
47
- expect(@client.write_outbound_data).to eq(true)
47
+ expect(@client.can_send?).to eq(true)
48
48
  end
49
49
 
50
50
  it 'receives data sent from the client' do
@@ -84,16 +84,6 @@ shared_examples_for "a Channel" do
84
84
  expect(channel).to be_closed
85
85
  end
86
86
 
87
- it 'closes the connection after writing' do
88
- @server.accept
89
- @client.finish_connecting
90
- @client.send_data(data)
91
- @client.close(true)
92
- expect(@client).to be_connected
93
- @client.write_outbound_data
94
- expect(@client).not_to be_connected
95
- end
96
-
97
87
  end
98
88
 
99
89
  end
@@ -135,9 +125,9 @@ describe TCPChannel do
135
125
  channel = @server.accept
136
126
  @client.finish_connecting
137
127
  channel.send_data(data)
138
- channel.close(true)
139
- expect(channel).to be_connected
140
128
  channel.write_outbound_data
129
+ expect(channel).to be_connected
130
+ channel.close
141
131
  expect(channel).not_to be_connected
142
132
  expect(@client).to be_connected
143
133
  @client.read_inbound_data
@@ -12,8 +12,8 @@ shared_examples_for "a Connection" do
12
12
  end
13
13
 
14
14
  after(:each) do
15
- @client.close
16
- @server.close
15
+ @client.close!
16
+ @server.close!
17
17
  ZMachine.context.destroy
18
18
  end
19
19
 
@@ -1,19 +1,15 @@
1
1
  require 'zmachine/hashed_wheel'
2
2
 
3
3
  describe ZMachine::HashedWheel do
4
- let(:wheel) { ZMachine::HashedWheel.new(16, 0.1) }
5
-
6
- it 'returns a timeout on add' do
7
- expect(wheel.add(0)).to be_instance_of(ZMachine::HashedWheelTimeout)
8
- end
4
+ let(:wheel) { ZMachine::HashedWheel.new(16, 100) }
9
5
 
10
6
  it 'adds timeouts to the correct slot' do
11
7
  wheel.add 0
12
- wheel.add 0.090
13
- wheel.add 0.110
14
- wheel.add 1.000
15
- wheel.add 1.600
16
- wheel.add 3.200
8
+ wheel.add 90
9
+ wheel.add 110
10
+ wheel.add 1000
11
+ wheel.add 1600
12
+ wheel.add 3200
17
13
  expect(wheel.slots[0].length).to eq(4)
18
14
  expect(wheel.slots[1].length).to eq(1)
19
15
  expect(wheel.slots[10].length).to eq(1)
@@ -21,19 +17,19 @@ describe ZMachine::HashedWheel do
21
17
 
22
18
  it 'times out same slot timeouts correctly' do
23
19
  now = wheel.reset
24
- wheel.add 0.01
25
- wheel.add 0.05
20
+ wheel.add 10
21
+ wheel.add 50
26
22
  timedout = wheel.advance(now + 30 * 1_000_000)
27
23
  expect(timedout.length).to eq(1)
28
24
  end
29
25
 
30
26
  it 'calculates the timeout set correctly' do
31
27
  now = wheel.reset
32
- wheel.add 0.010
33
- wheel.add 0.040
34
- wheel.add 1.900
35
- wheel.add 3.300
36
- wheel.add 4.000
28
+ wheel.add 10
29
+ wheel.add 40
30
+ wheel.add 1900
31
+ wheel.add 3300
32
+ wheel.add 4000
37
33
  timedout = wheel.advance(now + 3900 * 1_000_000)
38
34
  expect(timedout).to be
39
35
  expect(timedout.length).to eq(4)
@@ -41,11 +37,11 @@ describe ZMachine::HashedWheel do
41
37
 
42
38
  it 'cancels timers correctly' do
43
39
  now = wheel.reset
44
- t1 = wheel.add 0.090
45
- t2 = wheel.add 0.110
40
+ t1 = wheel.add 90
41
+ t2 = wheel.add 110
46
42
  t1.cancel
47
43
  timedout = wheel.advance(now + 200 * 1_000_000)
48
- expect(timedout).to eq([t2])
44
+ expect(timedout.first).to eq(t2)
49
45
  expect(timedout.length).to eq(1)
50
46
  end
51
47
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "zmachine"
5
- spec.version = "0.3.2"
5
+ spec.version = "0.4.0"
6
6
  spec.authors = ["LiquidM, Inc."]
7
7
  spec.email = ["opensource@liquidm.com"]
8
8
  spec.description = %q{pure JRuby multi-threaded mostly EventMachine compatible event loop}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zmachine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - LiquidM, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-28 00:00:00.000000000 Z
11
+ date: 2014-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: liquid-ext
@@ -32,6 +32,7 @@ extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
34
  - .gitignore
35
+ - .jrubyrc
35
36
  - .rspec
36
37
  - .ruby-version
37
38
  - .travis.yml
@@ -44,6 +45,9 @@ files:
44
45
  - benchmarks/zmq_channel.rb
45
46
  - examples/echo_client.rb
46
47
  - examples/echo_server.rb
48
+ - java/com/liquidm/zmachine/HashedWheel$Timeout.class
49
+ - java/com/liquidm/zmachine/HashedWheel.class
50
+ - java/com/liquidm/zmachine/HashedWheel.java
47
51
  - lib/zmachine.rb
48
52
  - lib/zmachine/channel.rb
49
53
  - lib/zmachine/connection.rb
@@ -82,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
86
  version: '0'
83
87
  requirements: []
84
88
  rubyforge_project:
85
- rubygems_version: 2.2.1
89
+ rubygems_version: 2.2.2
86
90
  signing_key:
87
91
  specification_version: 4
88
92
  summary: pure JRuby multi-threaded mostly EventMachine compatible event loop