websocket-pipe 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/websocket-pipe.rb +47 -0
  3. metadata +65 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 149ef15439511390e4256a5fa33bd5580b54f81a
4
+ data.tar.gz: 843338de838f1504cb0f1f9e60fa670f6e407aa0
5
+ SHA512:
6
+ metadata.gz: c487811a26dfae44068dd46ca78ac7221a81b5e1f7cad493f4d337dc9b9a7d2480a71bae668c99adb0f5490d8a0f119b7699b118d53a386b67c06f3e8c8fe137
7
+ data.tar.gz: df686acd31f1f73ff8525c419b2f618434f245e35e2ccfd22d7efd91c221ffa2d8910cfd91850d3ed524c1bb2ac3e1bde1fcd258c99abe0f4a53dba41ceedd09
@@ -0,0 +1,47 @@
1
+ require 'io/wait'
2
+ require 'em-websocket'
3
+
4
+ class WebsocketPipe
5
+ POLL_INTERVAL = 0.1
6
+
7
+ def initialize(reader, host_info={})
8
+ @clients = []
9
+ @reader = reader
10
+ @host_info = {:host => "0.0.0.0", :port => 8080}
11
+ .merge(host_info)
12
+ end
13
+
14
+ def start!
15
+ last_msg = nil
16
+ EM.run do
17
+ EM::WebSocket.run(@host_info) do |ws|
18
+ ws.onopen do
19
+ @clients << ws
20
+ ws.send(last_msg)
21
+ end
22
+
23
+ ws.onclose do
24
+ @clients.delete(ws)
25
+ end
26
+ end
27
+
28
+ EM::PeriodicTimer.new(POLL_INTERVAL) do
29
+ if @reader.ready?
30
+ msg = @reader.gets
31
+ @clients.each {|client| client.send(msg)}
32
+ last_msg = msg
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ def self.fork!
39
+ ws_reader, ws_writer = IO.pipe
40
+ ws_pid = fork do
41
+ ws_writer.close
42
+ WebsocketPipe.new(ws_reader).start!
43
+ end
44
+ ws_reader.close
45
+ [ws_pid, ws_writer]
46
+ end
47
+ end
metadata ADDED
@@ -0,0 +1,65 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: websocket-pipe
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Matt Baker
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-07-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: em-websocket
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.5.1
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: 0.6.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 0.5.1
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: 0.6.0
33
+ description: Pipe data from a Ruby IO stream to a Websocket server, broadcasting to
34
+ all clients.
35
+ email: mbaker.pdx+websocketpipe@gmail.com
36
+ executables: []
37
+ extensions: []
38
+ extra_rdoc_files: []
39
+ files:
40
+ - lib/websocket-pipe.rb
41
+ homepage: https://github.com/mattbaker/websocket-pipe
42
+ licenses:
43
+ - Apache License, Version 2.0
44
+ metadata: {}
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ requirements: []
60
+ rubyforge_project:
61
+ rubygems_version: 2.0.14
62
+ signing_key:
63
+ specification_version: 4
64
+ summary: Pipe data to a Websocket!
65
+ test_files: []