vagrant-listen-server 0.0.4 → 0.0.5
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 +4 -4
- data/README.md +4 -0
- data/examples/node-client.js +48 -0
- data/lib/vagrant-listen-server/action.rb +45 -12
- data/lib/vagrant-listen-server/version.rb +1 -1
- data/vagrant-listen-server.gemspec +0 -3
- metadata +3 -36
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a30b9bb31559cff8314063a36ebbe2b42f041504
|
|
4
|
+
data.tar.gz: f19e8fe12f1e3700841cb95a4caf7ecbfe0334cc
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c1b0dda84cc0a2a0951f4f3b6810bdf8dc7ead5d5ab2b1c55939190c41a710198757d63e14550ebae86e612e640974c390d3ee8c0bb61719a2f7a5298f54ba86
|
|
7
|
+
data.tar.gz: 0c19dc5641435505ebfae14329a5dc0d30ebf20f8dd0e47b4e8edc82aa72b750f0af16a271af4cfa8b8bf2c2689db81b89126927aa42a24ccb96ea09b9e5eb77
|
data/README.md
CHANGED
|
@@ -32,6 +32,10 @@ You can also write a simple server that touches all files on the guest, however
|
|
|
32
32
|
you'll have to be aware of loops created if filesystem notifications are passed
|
|
33
33
|
back from the guest to the host.
|
|
34
34
|
|
|
35
|
+
See the [examples](/examples) section for some implementations. Currently there
|
|
36
|
+
is solely my node based client, but if you're using this in any other
|
|
37
|
+
languages, please add your client and submit a pull request!
|
|
38
|
+
|
|
35
39
|
|
|
36
40
|
## Usage
|
|
37
41
|
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
var net = require('net');
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
// Assuming the existence of some `build` method that returns a promise.
|
|
5
|
+
var sequence = build();
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
// gathers rapid changes as one build
|
|
9
|
+
var timeout = null;
|
|
10
|
+
var scheduleBuild = function() {
|
|
11
|
+
if (timeout) { return; }
|
|
12
|
+
|
|
13
|
+
// we want the timeout to start now before we wait for the current build
|
|
14
|
+
var timeoutPromise = new Promise(function(resolve) {
|
|
15
|
+
timeout = setTimeout(resolve, 100);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
var timeoutThenBuild = function() {
|
|
19
|
+
timeoutPromise.then(function() {
|
|
20
|
+
timeout = null
|
|
21
|
+
return build();
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// we want the current promise to be waiting for the current build
|
|
26
|
+
// regardless if it fails or not.
|
|
27
|
+
sequence = sequence.then(timeoutThenBuild, timeoutThenBuild);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
var port = 4000;
|
|
32
|
+
var host = '172.16.172.1';
|
|
33
|
+
var client = new net.Socket();
|
|
34
|
+
|
|
35
|
+
client.connect(port, host, function() {
|
|
36
|
+
console.log('Connected to listen server: ', host, port);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
client.on('data', function(data) {
|
|
40
|
+
// message is [modified, added, removed]
|
|
41
|
+
console.log('Data received', data)
|
|
42
|
+
var message = JSON.parse(data.toString().trim())
|
|
43
|
+
scheduleBuild();
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
client.on('close', function() {
|
|
47
|
+
console.log('Connection closed');
|
|
48
|
+
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
require 'celluloid'
|
|
2
1
|
require 'listen'
|
|
2
|
+
require 'socket'
|
|
3
|
+
require 'json'
|
|
3
4
|
|
|
4
5
|
# No ActiveSupport in vagrant
|
|
5
6
|
def array_wrap object
|
|
@@ -28,9 +29,8 @@ module VagrantPlugins
|
|
|
28
29
|
|
|
29
30
|
config = @machine.config.listen_server
|
|
30
31
|
folders = array_wrap config.folders
|
|
31
|
-
host = "#{config.ip}:#{config.port}"
|
|
32
32
|
|
|
33
|
-
@ui.info "Starting listen server - #{
|
|
33
|
+
@ui.info "Starting listen server - #{config.ip}:#{config.port}"
|
|
34
34
|
|
|
35
35
|
# Check whether the daemon is already running.
|
|
36
36
|
if File.exists? config.pid_file
|
|
@@ -52,18 +52,51 @@ module VagrantPlugins
|
|
|
52
52
|
# machine to test it out on...
|
|
53
53
|
pid = fork do
|
|
54
54
|
$0 = "vagrant-listen-server - #{@machine.name}"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
|
|
56
|
+
clients = []
|
|
57
|
+
server = TCPServer.new config.ip, config.port
|
|
58
|
+
|
|
59
|
+
callback = Proc.new do |modified, added, removed|
|
|
60
|
+
bad_clients = []
|
|
61
|
+
# @ui.info "Listen fired - #{clients.count} clients.\n #{modified}\n #{added}\n #{removed}"
|
|
62
|
+
clients.each do |client|
|
|
63
|
+
begin
|
|
64
|
+
client.puts [modified, added, removed].to_json
|
|
65
|
+
rescue Errno::EPIPE
|
|
66
|
+
@ui.info "Connection broke! #{client}"
|
|
67
|
+
# Don't want to change the list of threads as we iterate.
|
|
68
|
+
bad_clients.push client
|
|
69
|
+
end
|
|
58
70
|
end
|
|
59
|
-
end
|
|
60
71
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
@ui.info "Can't start server - Port in use"
|
|
65
|
-
exit
|
|
72
|
+
bad_clients.each do |client|
|
|
73
|
+
clients.delete client
|
|
74
|
+
end
|
|
66
75
|
end
|
|
76
|
+
listener = Listen.to(*folders, &callback)
|
|
77
|
+
listener.start
|
|
78
|
+
|
|
79
|
+
# server.accept blocks - we need it in its own thread so we can
|
|
80
|
+
# continue to have listener callbacks fired, and so we can sleep
|
|
81
|
+
# and catch any interrupts from vagrant.
|
|
82
|
+
Thread.new do
|
|
83
|
+
loop do
|
|
84
|
+
Thread.fork(server.accept) do |client|
|
|
85
|
+
@ui.info "New connection - #{client}"
|
|
86
|
+
clients.push client
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
# TODO: this error won't happen on the listen anymore - it will
|
|
92
|
+
# happen somewhere on the tcp call. Not sure where.
|
|
93
|
+
#
|
|
94
|
+
# begin
|
|
95
|
+
# listener.start
|
|
96
|
+
# rescue Errno::EADDRNOTAVAIL
|
|
97
|
+
# @ui.info "Can't start server - Port in use"
|
|
98
|
+
# exit
|
|
99
|
+
# end
|
|
67
100
|
|
|
68
101
|
# Uhh... this needs work. Vagrant steals the interrupt from us and
|
|
69
102
|
# there's no way to get it back
|
|
@@ -17,9 +17,6 @@ Gem::Specification.new do |spec|
|
|
|
17
17
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
18
18
|
spec.require_paths = ['lib']
|
|
19
19
|
|
|
20
|
-
spec.add_dependency 'celluloid', '~> 0.16'
|
|
21
|
-
spec.add_dependency 'celluloid-io', '~> 0.16', '>= 0.16.2'
|
|
22
|
-
|
|
23
20
|
spec.add_dependency 'rb-inotify', '~> 0.9', '>= 0.9.5'
|
|
24
21
|
spec.add_dependency 'rb-fsevent', '~> 0.9', '>= 0.9.4'
|
|
25
22
|
spec.add_dependency 'rb-kqueue', '~> 0.2', '>= 0.2.3'
|
metadata
CHANGED
|
@@ -1,49 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vagrant-listen-server
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- David Kelso
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-08-18 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: celluloid
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - "~>"
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0.16'
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - "~>"
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0.16'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: celluloid-io
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - "~>"
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0.16'
|
|
34
|
-
- - ">="
|
|
35
|
-
- !ruby/object:Gem::Version
|
|
36
|
-
version: 0.16.2
|
|
37
|
-
type: :runtime
|
|
38
|
-
prerelease: false
|
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
40
|
-
requirements:
|
|
41
|
-
- - "~>"
|
|
42
|
-
- !ruby/object:Gem::Version
|
|
43
|
-
version: '0.16'
|
|
44
|
-
- - ">="
|
|
45
|
-
- !ruby/object:Gem::Version
|
|
46
|
-
version: 0.16.2
|
|
47
13
|
- !ruby/object:Gem::Dependency
|
|
48
14
|
name: rb-inotify
|
|
49
15
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -144,6 +110,7 @@ files:
|
|
|
144
110
|
- LICENSE.txt
|
|
145
111
|
- README.md
|
|
146
112
|
- Rakefile
|
|
113
|
+
- examples/node-client.js
|
|
147
114
|
- lib/vagrant-listen-server.rb
|
|
148
115
|
- lib/vagrant-listen-server/action.rb
|
|
149
116
|
- lib/vagrant-listen-server/config.rb
|