foxbat 0.2.0 → 0.2.3
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.
- data/lib/em/connection.rb +19 -29
- data/lib/eventmachine.rb +3 -3
- data/lib/foxbat/netty_connection.rb +47 -0
- data/lib/foxbat/pipeline.rb +8 -2
- data/lib/foxbat/server.rb +4 -2
- data/lib/foxbat/version.rb +1 -1
- data/lib/foxbat.rb +40 -1
- data/lib/netty-3.5.0.Final.jar +0 -0
- metadata +15 -14
data/lib/em/connection.rb
CHANGED
@@ -1,14 +1,20 @@
|
|
1
|
-
import java.nio.ByteBuffer
|
2
|
-
import org.jboss.netty.buffer.ChannelBuffers
|
3
|
-
import org.jboss.netty.channel.SimpleChannelUpstreamHandler
|
4
|
-
|
5
1
|
module EventMachine
|
6
2
|
|
7
|
-
class Connection
|
3
|
+
class Connection
|
4
|
+
|
5
|
+
attr_writer :netty_handler
|
6
|
+
|
7
|
+
def self.new(*args)
|
8
|
+
allocate.instance_eval do
|
9
|
+
initialize(*args)
|
10
|
+
self
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def initialize(*args); end
|
8
15
|
|
9
16
|
def send_data(data)
|
10
|
-
|
11
|
-
@channel.write(buf)
|
17
|
+
@netty_handler.write(data)
|
12
18
|
end
|
13
19
|
|
14
20
|
def post_init; end
|
@@ -22,7 +28,11 @@ module EventMachine
|
|
22
28
|
end
|
23
29
|
|
24
30
|
def close_connection(after_writing=false)
|
25
|
-
|
31
|
+
if after_writing
|
32
|
+
@close_scheduled = true
|
33
|
+
else
|
34
|
+
@netty_handler.close
|
35
|
+
end
|
26
36
|
end
|
27
37
|
|
28
38
|
def close_connection_after_writing
|
@@ -30,27 +40,7 @@ module EventMachine
|
|
30
40
|
end
|
31
41
|
|
32
42
|
def get_peername
|
33
|
-
|
34
|
-
[addr.getPort, addr.getHostString]
|
35
|
-
end
|
36
|
-
|
37
|
-
private
|
38
|
-
|
39
|
-
# The netty channel callbacks
|
40
|
-
|
41
|
-
def channelConnected(ctx, e)
|
42
|
-
@pipeline = ctx.getPipeline
|
43
|
-
@channel = e.getChannel
|
44
|
-
post_init
|
45
|
-
end
|
46
|
-
|
47
|
-
def messageReceived(ctx, e)
|
48
|
-
data = e.getMessage.toString('UTF-8')
|
49
|
-
receive_data(data)
|
50
|
-
end
|
51
|
-
|
52
|
-
def exceptionCaught(ctx, e)
|
53
|
-
p e.toString
|
43
|
+
@netty_handler.peername
|
54
44
|
end
|
55
45
|
|
56
46
|
end
|
data/lib/eventmachine.rb
CHANGED
@@ -5,7 +5,7 @@ import java.util.concurrent.TimeUnit
|
|
5
5
|
module EventMachine
|
6
6
|
|
7
7
|
def self.start_server host, port=nil, handler=nil, *args, &block
|
8
|
-
s = Foxbat::Server.new(host, port, handler, args.first || {}, block)
|
8
|
+
s = Foxbat::Server.new(host, port, handler, args.first || {}, &block)
|
9
9
|
|
10
10
|
@@servers ||= []
|
11
11
|
@@servers << s
|
@@ -17,7 +17,7 @@ module EventMachine
|
|
17
17
|
def self.epoll; end
|
18
18
|
def self.kqueue; end
|
19
19
|
|
20
|
-
def self.run(blk=nil, tail=nil, &block)
|
20
|
+
def self.run(blk=nil, tail=nil, &block)
|
21
21
|
@@threadpool = Executors.newCachedThreadPool
|
22
22
|
|
23
23
|
block.call
|
@@ -26,7 +26,7 @@ module EventMachine
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def self.stop
|
29
|
-
@@servers.each { |s| s.stop }
|
29
|
+
@@servers.each { |s| s.stop }
|
30
30
|
@@threadpool.shutdownNow
|
31
31
|
end
|
32
32
|
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import java.nio.ByteBuffer
|
2
|
+
import org.jboss.netty.buffer.ChannelBuffers
|
3
|
+
import org.jboss.netty.channel.SimpleChannelUpstreamHandler
|
4
|
+
|
5
|
+
module Foxbat
|
6
|
+
|
7
|
+
class NettyConnection < SimpleChannelUpstreamHandler
|
8
|
+
|
9
|
+
def initialize(connection)
|
10
|
+
@connection = connection
|
11
|
+
connection.netty_handler = self
|
12
|
+
super()
|
13
|
+
end
|
14
|
+
|
15
|
+
def write(data)
|
16
|
+
data = data.to_java_bytes if data.is_a?(String)
|
17
|
+
buf = ChannelBuffers.copiedBuffer(data)
|
18
|
+
@channel.write(buf)
|
19
|
+
end
|
20
|
+
|
21
|
+
def close
|
22
|
+
@channel.close
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
def channelConnected(ctx, e)
|
28
|
+
@pipeline = ctx.getPipeline
|
29
|
+
@channel = e.getChannel
|
30
|
+
@connection.post_init
|
31
|
+
end
|
32
|
+
|
33
|
+
def channelClosed(ctx, e)
|
34
|
+
@connection.unbind
|
35
|
+
end
|
36
|
+
|
37
|
+
def messageReceived(ctx, e)
|
38
|
+
data = String.from_java_bytes(e.getMessage.array)
|
39
|
+
@connection.receive_data(data)
|
40
|
+
end
|
41
|
+
|
42
|
+
def exceptionCaught(ctx, e)
|
43
|
+
p e.toString
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
data/lib/foxbat/pipeline.rb
CHANGED
@@ -3,14 +3,17 @@ import org.jboss.netty.channel.ChannelPipelineFactory
|
|
3
3
|
import org.jboss.netty.handler.ssl.SslHandler
|
4
4
|
|
5
5
|
require_relative 'security'
|
6
|
+
require_relative 'netty_connection'
|
6
7
|
|
7
8
|
module Foxbat
|
8
9
|
|
9
10
|
class Pipeline
|
10
11
|
include ChannelPipelineFactory
|
11
12
|
|
12
|
-
def initialize(handler, ssl_context=nil)
|
13
|
+
def initialize(handler, options={}, ssl_context=nil, &block)
|
14
|
+
@options = options
|
13
15
|
@handler = handler
|
16
|
+
@block = block
|
14
17
|
@context = ssl_context
|
15
18
|
end
|
16
19
|
|
@@ -20,7 +23,10 @@ module Foxbat
|
|
20
23
|
engine = Security.create_ssl_engine(@context)
|
21
24
|
pipeline.addLast("ssl", SslHandler.new(engine))
|
22
25
|
end
|
23
|
-
|
26
|
+
h = @handler.new(@options)
|
27
|
+
@block.call(h) if @block
|
28
|
+
connection = NettyConnection.new(h)
|
29
|
+
pipeline.addLast("handler", connection)
|
24
30
|
pipeline
|
25
31
|
end
|
26
32
|
|
data/lib/foxbat/server.rb
CHANGED
@@ -8,12 +8,13 @@ module Foxbat
|
|
8
8
|
|
9
9
|
class Server
|
10
10
|
|
11
|
-
def initialize(host, port, klass, options, block
|
11
|
+
def initialize(host, port, klass, options, &block)
|
12
12
|
if options[:secure]
|
13
13
|
@context = Security.setup_ssl_context(options[:keystore])
|
14
14
|
end
|
15
|
+
|
15
16
|
@address = InetSocketAddress.new(host, port)
|
16
|
-
@pipeline = Pipeline.new(klass
|
17
|
+
@pipeline = Pipeline.new(klass, options, @context, &block)
|
17
18
|
end
|
18
19
|
|
19
20
|
def start(threadpool)
|
@@ -24,6 +25,7 @@ module Foxbat
|
|
24
25
|
end
|
25
26
|
|
26
27
|
def stop
|
28
|
+
@bootstrap.releaseExternalResources
|
27
29
|
end
|
28
30
|
end
|
29
31
|
|
data/lib/foxbat/version.rb
CHANGED
data/lib/foxbat.rb
CHANGED
@@ -1,4 +1,35 @@
|
|
1
1
|
require 'java'
|
2
|
+
|
3
|
+
NETTY_VERSION = '3.5.0.Final'
|
4
|
+
JAR_SIZE = 1110903.0 # TODO: remove hard-coded jar size
|
5
|
+
|
6
|
+
netty_jar = File.dirname(__FILE__) + "/netty-#{NETTY_VERSION}.jar"
|
7
|
+
|
8
|
+
if !File.exist?(netty_jar)
|
9
|
+
puts "Couldn't find netty's JAR to load. Let's download it now."
|
10
|
+
|
11
|
+
require 'net/http'
|
12
|
+
f = open(netty_jar, 'w')
|
13
|
+
|
14
|
+
Net::HTTP.start('search.maven.org') do |http|
|
15
|
+
|
16
|
+
begin
|
17
|
+
http.request_get("/remotecontent?filepath=io/netty/netty/#{NETTY_VERSION}/netty-#{NETTY_VERSION}.jar") do |resp|
|
18
|
+
acc = 0
|
19
|
+
resp.read_body do |segment|
|
20
|
+
acc += segment.length
|
21
|
+
percent = ((acc / JAR_SIZE) * 100).to_i
|
22
|
+
print "Downloading netty #{NETTY_VERSION} from maven repository... [#{percent}%]\r"
|
23
|
+
f.write(segment)
|
24
|
+
end
|
25
|
+
puts "\nDone. You shouldn't see me again :)"
|
26
|
+
end
|
27
|
+
ensure
|
28
|
+
f.close()
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
2
33
|
require 'netty-3.5.0.Final.jar'
|
3
34
|
|
4
35
|
require 'em/connection'
|
@@ -8,5 +39,13 @@ require 'foxbat/server'
|
|
8
39
|
require 'foxbat/version'
|
9
40
|
require_relative 'eventmachine'
|
10
41
|
|
42
|
+
|
43
|
+
|
11
44
|
module EventMachine; end
|
12
|
-
|
45
|
+
|
46
|
+
begin
|
47
|
+
Kernel.const_get(:EM)
|
48
|
+
rescue
|
49
|
+
EM = EventMachine
|
50
|
+
end
|
51
|
+
|
data/lib/netty-3.5.0.Final.jar
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: foxbat
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.3
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Chris Mowforth
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
date: 2012-09-18 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
|
-
description: A drop-in replacement for EM, providing functionality missing from the
|
14
|
+
description: A drop-in replacement for EM, providing functionality missing from the
|
15
|
+
Java port.
|
15
16
|
email:
|
16
17
|
- chris@mowforth.com
|
17
18
|
executables: []
|
@@ -19,39 +20,39 @@ extensions: []
|
|
19
20
|
extra_rdoc_files: []
|
20
21
|
files:
|
21
22
|
- lib/eventmachine.rb
|
22
|
-
- lib/netty-3.5.0.Final.jar
|
23
|
-
- lib/foxbat.rb
|
24
23
|
- lib/foxbat/barrier.rb
|
25
24
|
- lib/foxbat/version.rb
|
26
25
|
- lib/foxbat/server.rb
|
27
26
|
- lib/foxbat/pipeline.rb
|
27
|
+
- lib/foxbat/netty_connection.rb
|
28
28
|
- lib/foxbat/security.rb
|
29
|
+
- lib/netty-3.5.0.Final.jar
|
30
|
+
- lib/foxbat.rb
|
29
31
|
- lib/em/periodic_timer.rb
|
30
32
|
- lib/em/timer.rb
|
31
33
|
- lib/em/connection.rb
|
32
|
-
homepage: http://github.com/
|
34
|
+
homepage: http://github.com/m0wfo/foxbat
|
33
35
|
licenses: []
|
34
|
-
post_install_message:
|
36
|
+
post_install_message:
|
35
37
|
rdoc_options: []
|
36
38
|
require_paths:
|
37
39
|
- lib
|
38
40
|
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
39
42
|
requirements:
|
40
43
|
- - ! '>='
|
41
44
|
- !ruby/object:Gem::Version
|
42
45
|
version: '0'
|
43
|
-
none: false
|
44
46
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
45
48
|
requirements:
|
46
49
|
- - ! '>='
|
47
50
|
- !ruby/object:Gem::Version
|
48
51
|
version: '0'
|
49
|
-
none: false
|
50
52
|
requirements: []
|
51
|
-
rubyforge_project:
|
52
|
-
rubygems_version: 1.8.
|
53
|
-
signing_key:
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 1.8.23
|
55
|
+
signing_key:
|
54
56
|
specification_version: 3
|
55
57
|
summary: EventMachine replacement for JRuby.
|
56
58
|
test_files: []
|
57
|
-
...
|