multicast 0.1.0 → 0.2.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.
data/README.rdoc CHANGED
@@ -1,16 +1,20 @@
1
1
  = multicast
2
2
 
3
- Description goes here.
4
-
5
- == Note on Patches/Pull Requests
6
-
7
- * Fork the project.
8
- * Make your feature addition or bug fix.
9
- * Add tests for it. This is important so I don't break it in a
10
- future version unintentionally.
11
- * Commit, do not mess with rakefile, version, or history.
12
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
13
- * Send me a pull request. Bonus points for topic branches.
3
+ Ruby library and command line utils for multicasting
4
+
5
+ This project is very young so some things might not work.
6
+
7
+ == Listening
8
+
9
+ mclisten -g 224.0.1.33 -p 4567
10
+
11
+ == Sending
12
+
13
+ mcsend -g 224.0.1.33 -p 4567 -m "Multicasting like a champ"
14
+
15
+ == Contact
16
+
17
+ You can find me on @mwhuss[http://twitter.com/mwhuss]
14
18
 
15
19
  == Copyright
16
20
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
data/bin/mclisten CHANGED
@@ -3,7 +3,7 @@
3
3
  require File.dirname(__FILE__) + '/../lib/multicast'
4
4
  require 'choice'
5
5
 
6
-
6
+ PROGRAM_VERSION = File.exist?('VERSION') ? File.read('VERSION') : ""
7
7
 
8
8
 
9
9
  Choice.options do
@@ -38,33 +38,41 @@ Choice.options do
38
38
  long '--version'
39
39
  desc 'Show version'
40
40
  action do
41
- puts "ftpd.rb FTP server v#{PROGRAM_VERSION}"
41
+ puts "mclisten v#{PROGRAM_VERSION}"
42
42
  exit
43
43
  end
44
44
  end
45
45
  end
46
46
 
47
-
48
47
  puts "==== Multicast Listener ====\n"
48
+ listener = Multicast::Listener.new(:group => Choice.choices[:group], :port => Choice.choices[:port])
49
+ puts "---> Joining #{Choice.choices[:group]}:#{Choice.choices[:port]}"
49
50
 
50
- multicast_group = Choice.choices[:group]
51
- port = Choice.choices[:port]
52
- ip = IPAddr.new(multicast_group).hton + IPAddr.new("0.0.0.0").hton
53
- puts "---> Joining #{multicast_group}:#{port}"
54
- sock = UDPSocket.new
55
- sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, ip)
56
- sock.bind(Socket::INADDR_ANY, port)
57
-
58
- loop do
59
- begin
60
- msg, info = sock.recvfrom(1024)
61
- #puts "MSG: #{msg} from #{info[2]} (#{info[3]})/#{info[1]} len #{msg.size}"
51
+ listener.listen do |msg, info|
62
52
  puts "---> [#{info[2]} / #{info[3]}:#{info[1]} (#{msg.size} bytes)] #{msg}"
63
-
64
- rescue Interrupt
65
- sock.close
66
- puts "\n---> Exiting"
67
- exit
68
- end
53
+ end
54
+
69
55
 
70
- end
56
+ # puts "==== Multicast Listener ====\n"
57
+ #
58
+ # multicast_group = Choice.choices[:group]
59
+ # port = Choice.choices[:port]
60
+ # ip = IPAddr.new(multicast_group).hton + IPAddr.new("0.0.0.0").hton
61
+ # puts "---> Joining #{multicast_group}:#{port}"
62
+ # sock = UDPSocket.new
63
+ # sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, ip)
64
+ # sock.bind(Socket::INADDR_ANY, port)
65
+ #
66
+ # loop do
67
+ # begin
68
+ # msg, info = sock.recvfrom(1024)
69
+ # #puts "MSG: #{msg} from #{info[2]} (#{info[3]})/#{info[1]} len #{msg.size}"
70
+ # puts "---> [#{info[2]} / #{info[3]}:#{info[1]} (#{msg.size} bytes)] #{msg}"
71
+ #
72
+ # rescue Interrupt
73
+ # sock.close
74
+ # puts "\n---> Exiting"
75
+ # exit
76
+ # end
77
+ #
78
+ # end
data/bin/mcsend ADDED
@@ -0,0 +1,56 @@
1
+ #! /usr/bin/ruby
2
+
3
+ require File.dirname(__FILE__) + '/../lib/multicast'
4
+ require 'choice'
5
+
6
+ PROGRAM_VERSION = File.exist?('VERSION') ? File.read('VERSION') : ""
7
+
8
+ Choice.options do
9
+ header ''
10
+ header 'Specific options:'
11
+
12
+ option :group, :required => true do
13
+ short '-g'
14
+ long '--group=GROUP'
15
+ desc 'The multicast group to send to'
16
+ end
17
+
18
+ option :port, :required => true do
19
+ short '-p'
20
+ long '--port=PORT'
21
+ desc 'The port to send on'
22
+ cast Integer
23
+ end
24
+
25
+ option :message do
26
+ short '-m'
27
+ long '--message=MESSAGE'
28
+ desc 'The message to send to the multicast group'
29
+ default "Multicast Message from Ruby Multicast lib"
30
+ end
31
+
32
+ separator ''
33
+ separator 'Common options: '
34
+
35
+ option :help do
36
+ long '--help'
37
+ desc 'Show this message'
38
+ end
39
+
40
+ option :version do
41
+ short '-v'
42
+ long '--version'
43
+ desc 'Show version'
44
+ action do
45
+ puts "mcsend v#{PROGRAM_VERSION}"
46
+ exit
47
+ end
48
+ end
49
+ end
50
+
51
+ puts "==== Multicast Sender ====\n"
52
+ sender = Multicast::Sender.new(:group => Choice.choices[:group], :port => Choice.choices[:port])
53
+ puts "---> Sending message to #{Choice.choices[:group]}:#{Choice.choices[:port]}"
54
+ puts "---> #{Choice.choices[:message]}"
55
+
56
+ sender.send(Choice.choices[:message])
@@ -0,0 +1,34 @@
1
+ module Multicast
2
+ class Listener
3
+ attr_accessor :group, :port
4
+
5
+ def initialize(opts={})
6
+ @group = opts[:group]
7
+ @port = opts[:port]
8
+ end
9
+
10
+ def listen(&block)
11
+
12
+ ip = IPAddr.new(@group).hton + IPAddr.new("0.0.0.0").hton
13
+ sock = UDPSocket.new
14
+ sock.setsockopt(Socket::IPPROTO_IP, Socket::IP_ADD_MEMBERSHIP, ip)
15
+ sock.bind(Socket::INADDR_ANY, @port)
16
+
17
+ loop do
18
+ begin
19
+ msg, info = sock.recvfrom(1024)
20
+ #puts "MSG: #{msg} from #{info[2]} (#{info[3]})/#{info[1]} len #{msg.size}"
21
+ #puts "---> [#{info[2]} / #{info[3]}:#{info[1]} (#{msg.size} bytes)] #{msg}"
22
+ yield(msg, info)
23
+
24
+ rescue Interrupt
25
+ sock.close
26
+ puts "\n---> Exiting"
27
+ exit
28
+ end
29
+
30
+ end
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,22 @@
1
+ module Multicast
2
+ class Sender
3
+ attr_accessor :group, :port
4
+
5
+ def initialize(opts={})
6
+ @group = opts[:group]
7
+ @port = opts[:port]
8
+ end
9
+
10
+ def send(message)
11
+
12
+ begin
13
+ socket = UDPSocket.open
14
+ socket.setsockopt(Socket::IPPROTO_IP, Socket::IP_TTL, [1].pack('i'))
15
+ socket.send(message, 0, @group, @port)
16
+ ensure
17
+ socket.close
18
+ end
19
+ end
20
+
21
+ end
22
+ end
data/lib/multicast.rb CHANGED
@@ -1,2 +1,5 @@
1
1
  require 'socket'
2
- require 'ipaddr'
2
+ require 'ipaddr'
3
+
4
+ require File.dirname(__FILE__) + '/multicast/listener'
5
+ require File.dirname(__FILE__) + '/multicast/sender'
data/multicast.gemspec CHANGED
@@ -5,15 +5,14 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{multicast}
8
- s.version = "0.1.0"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Marshall Huss"]
12
- s.date = %q{2010-05-19}
13
- s.default_executable = %q{mclisten}
12
+ s.date = %q{2010-05-20}
14
13
  s.description = %q{Multicasting in Ruby}
15
14
  s.email = %q{mwhuss@gmail.com}
16
- s.executables = ["mclisten"]
15
+ s.executables = ["mclisten", "mcsend"]
17
16
  s.extra_rdoc_files = [
18
17
  "LICENSE",
19
18
  "README.rdoc"
@@ -26,7 +25,10 @@ Gem::Specification.new do |s|
26
25
  "Rakefile",
27
26
  "VERSION",
28
27
  "bin/mclisten",
28
+ "bin/mcsend",
29
29
  "lib/multicast.rb",
30
+ "lib/multicast/listener.rb",
31
+ "lib/multicast/sender.rb",
30
32
  "multicast.gemspec",
31
33
  "test/helper.rb",
32
34
  "test/test_multicast.rb"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multicast
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 1
8
+ - 2
9
9
  - 0
10
- version: 0.1.0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Marshall Huss
@@ -15,8 +15,8 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-05-19 00:00:00 -04:00
19
- default_executable: mclisten
18
+ date: 2010-05-20 00:00:00 -04:00
19
+ default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: thoughtbot-shoulda
@@ -52,6 +52,7 @@ description: Multicasting in Ruby
52
52
  email: mwhuss@gmail.com
53
53
  executables:
54
54
  - mclisten
55
+ - mcsend
55
56
  extensions: []
56
57
 
57
58
  extra_rdoc_files:
@@ -65,7 +66,10 @@ files:
65
66
  - Rakefile
66
67
  - VERSION
67
68
  - bin/mclisten
69
+ - bin/mcsend
68
70
  - lib/multicast.rb
71
+ - lib/multicast/listener.rb
72
+ - lib/multicast/sender.rb
69
73
  - multicast.gemspec
70
74
  - test/helper.rb
71
75
  - test/test_multicast.rb