fyrehose 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/fyrehose.gemspec +1 -1
- data/lib/fyrehose.rb +15 -1
- data/lib/fyrehose/abstract_client.rb +35 -0
- data/lib/fyrehose/{protocol_error.rb → errors.rb} +5 -1
- data/lib/fyrehose/reactor.rb +5 -9
- data/lib/fyrehose/tcp_client.rb +21 -0
- data/lib/fyrehose/udp_client.rb +18 -0
- metadata +5 -2
data/fyrehose.gemspec
CHANGED
data/lib/fyrehose.rb
CHANGED
@@ -1,2 +1,16 @@
|
|
1
|
+
require "socket"
|
2
|
+
require "timeout"
|
3
|
+
|
4
|
+
require "fyrehose/errors"
|
1
5
|
require "fyrehose/input_stream"
|
2
|
-
require "fyrehose/
|
6
|
+
require "fyrehose/abstract_client"
|
7
|
+
require "fyrehose/tcp_client"
|
8
|
+
require "fyrehose/udp_client"
|
9
|
+
|
10
|
+
module Fyrehose
|
11
|
+
|
12
|
+
def self.next_txid
|
13
|
+
rand(8**32).to_s(36)
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class Fyrehose::AbstractClient
|
2
|
+
|
3
|
+
TIMEOUT = 0.1
|
4
|
+
|
5
|
+
def initialize(host, port, opts = {})
|
6
|
+
@host = host
|
7
|
+
@port = port
|
8
|
+
@opts = opts
|
9
|
+
|
10
|
+
@timeout = if opts[:timeout]
|
11
|
+
opts[:timeout].to_f
|
12
|
+
else
|
13
|
+
TIMEOUT
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def deliver(channel, data)
|
18
|
+
channel = channel.to_s
|
19
|
+
data = data.to_s
|
20
|
+
|
21
|
+
if channel.include?(" ")
|
22
|
+
raise Fyrehose::Error.new("channel names must not include whitespace")
|
23
|
+
end
|
24
|
+
|
25
|
+
txid = Fyrehose.next_txid
|
26
|
+
send_data("##{txid} @#{channel} *#{data.size} #{data}\n")
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def send_data(data)
|
32
|
+
raise "implement me"
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -1,5 +1,8 @@
|
|
1
1
|
module Fyrehose
|
2
|
-
class
|
2
|
+
class Error < StandardError; end
|
3
|
+
class ConnectionError < Fyrehose::Error; end
|
4
|
+
|
5
|
+
class ProtocolError < Fyrehose::Error
|
3
6
|
|
4
7
|
INFO_SIZE = 30
|
5
8
|
|
@@ -16,4 +19,5 @@ module Fyrehose
|
|
16
19
|
end
|
17
20
|
|
18
21
|
end
|
22
|
+
|
19
23
|
end
|
data/lib/fyrehose/reactor.rb
CHANGED
@@ -4,7 +4,7 @@ class Fyrehose::Reactor < EventMachine::Connection
|
|
4
4
|
|
5
5
|
def self.run(host, port, opts = {}, &block)
|
6
6
|
unless block
|
7
|
-
raise "missing proc{ |channel,data| } for #run"
|
7
|
+
raise Fyrehose::Error.new("missing proc{ |channel,data| } for #run")
|
8
8
|
end
|
9
9
|
|
10
10
|
EventMachine.run do
|
@@ -19,11 +19,13 @@ class Fyrehose::Reactor < EventMachine::Connection
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def deliver(channel, data)
|
22
|
-
|
22
|
+
txid = Fyrehose.next_txid
|
23
|
+
send_data("##{txid} @#{channel} *#{data.size} #{data}\n")
|
23
24
|
end
|
24
25
|
|
25
26
|
def set_flags(channel, flags)
|
26
|
-
|
27
|
+
txid = Fyrehose.next_txid
|
28
|
+
send_data("##{txid} @#{channel} +#{flags}\n")
|
27
29
|
end
|
28
30
|
|
29
31
|
def subscribe(channel)
|
@@ -50,10 +52,4 @@ class Fyrehose::Reactor < EventMachine::Connection
|
|
50
52
|
end
|
51
53
|
end
|
52
54
|
|
53
|
-
private
|
54
|
-
|
55
|
-
def next_txid
|
56
|
-
rand(8**32).to_s(36)
|
57
|
-
end
|
58
|
-
|
59
55
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class Fyrehose::TCPClient < Fyrehose::AbstractClient
|
2
|
+
|
3
|
+
def send_data(data)
|
4
|
+
Timeout::timeout(@timeout) do
|
5
|
+
@sock = TCPSocket.new(@host, @port) unless @sock
|
6
|
+
@sock.send(data, 0)
|
7
|
+
parse_response(@sock.gets)
|
8
|
+
end
|
9
|
+
rescue Exception => e
|
10
|
+
@sock = nil
|
11
|
+
raise e
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_response(str)
|
15
|
+
raise Fyrehose::ConnectionError.new unless str
|
16
|
+
m = str.match(/#[^ ]+ \$([0-9]+)\n/)
|
17
|
+
raise Fyrehose::ProtocolError.new unless m
|
18
|
+
m[1].to_i
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Fyrehose::UDPClient < Fyrehose::AbstractClient
|
2
|
+
|
3
|
+
def open_connection
|
4
|
+
@sock = UDPSocket.new
|
5
|
+
@sock.connect(@host, @port)
|
6
|
+
end
|
7
|
+
|
8
|
+
def send_data(data)
|
9
|
+
Timeout::timeout(@timeout) do
|
10
|
+
open_connection unless @sock
|
11
|
+
@sock.send(data, 0); 0
|
12
|
+
end
|
13
|
+
rescue Exception => e
|
14
|
+
@sock = nil
|
15
|
+
raise e
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fyrehose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -21,9 +21,12 @@ files:
|
|
21
21
|
- .gitkeep
|
22
22
|
- fyrehose.gemspec
|
23
23
|
- lib/fyrehose.rb
|
24
|
+
- lib/fyrehose/abstract_client.rb
|
25
|
+
- lib/fyrehose/errors.rb
|
24
26
|
- lib/fyrehose/input_stream.rb
|
25
|
-
- lib/fyrehose/protocol_error.rb
|
26
27
|
- lib/fyrehose/reactor.rb
|
28
|
+
- lib/fyrehose/tcp_client.rb
|
29
|
+
- lib/fyrehose/udp_client.rb
|
27
30
|
homepage: http://github.com/paulasmuth/fyrehose
|
28
31
|
licenses:
|
29
32
|
- MIT
|