motion-net-service 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ .repl_history
2
+ build
3
+ resources/*.nib
4
+ resources/*.momd
5
+ resources/*.storyboardc
6
+ *.gem
7
+ .bundle
8
+ Gemfile.lock
9
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "bubble-wrap"
4
+ # Specify your gem's dependencies in motion-net-service.gemspec
5
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env rake
2
+ $:.unshift("/Library/RubyMotion/lib")
3
+ require 'motion/project'
4
+ require "bundler/gem_tasks"
5
+ Bundler.setup
6
+ Bundler.require
7
+
8
+ $:.unshift("./lib/")
9
+ require './lib/motion-net-service'
10
+
11
+ Motion::Project::App.setup do |app|
12
+ # Use `rake config' to see complete project settings.
13
+ app.name = 'MotionNetService'
14
+ end
@@ -0,0 +1,22 @@
1
+ class AppDelegate
2
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
3
+ @service = NetService.new(:name => "foobar", :port => 8080).tap do |ns|
4
+ ns.on_did_publish do
5
+ puts "HELLO"
6
+ end
7
+ ns.on_did_not_resolve do |error|
8
+
9
+ end
10
+ end
11
+ @service.publish
12
+
13
+ p "SEARCHING NOW."
14
+ @n = NetServiceBrowser.search('_ssh._tcp') do |service, more_coming|
15
+ s = service.instance_variable_get(:@net_service)
16
+ p "name: #{s.name}, addresses: #{s.addresses.first}"
17
+ p "SERVICE FOUND: #{s.hostName}"
18
+ p "MORE COMING: #{more_coming}"
19
+ end
20
+ true
21
+ end
22
+ end
@@ -0,0 +1,5 @@
1
+ require "motion-net-service/version"
2
+ require 'bubble-wrap'
3
+ Dir.glob(File.join(File.dirname(__FILE__), 'motion-net-service/*.rb')).each do |file|
4
+ BW.require file
5
+ end
@@ -0,0 +1,73 @@
1
+ class NetService
2
+ def initialize(options = {})
3
+ default_options = {
4
+ domain: "",
5
+ type: "_http._tcp.",
6
+ }
7
+ options.merge!(default_options)
8
+
9
+ if options[:net_service]
10
+ @net_service = options[:net_service]
11
+ else
12
+ @net_service = NSNetService.alloc.initWithDomain(
13
+ options[:domain],
14
+ type:options[:type],
15
+ name:options[:name],
16
+ port:options[:port]
17
+ )
18
+ end
19
+
20
+ @net_service.setDelegate(self)
21
+ end
22
+
23
+ def self.from_ns_net_service(ns_net_service)
24
+ new(:net_service => ns_net_service)
25
+ end
26
+
27
+ def publish
28
+ @net_service.publish
29
+ end
30
+
31
+ def resolve(timeout = 1, &block)
32
+ on_did_resolve_address(&block) if block
33
+ @net_service.resolveWithTimeout(timeout)
34
+ end
35
+
36
+ [
37
+ :on_will_publish, :on_did_not_publish, :on_did_publish, :on_will_resolve, :on_did_not_resolve,
38
+ :on_did_resolve_address, :on_did_update_txt_record_data, :on_did_stop
39
+ ].each do |callback|
40
+ define_method callback do |&block|
41
+ instance_variable_set("@#{callback}", block)
42
+ end
43
+ end
44
+
45
+ protected
46
+ def netServiceWillPublish(sender)
47
+ @on_publish.call if @on_publish
48
+ end
49
+
50
+ def netService(sender, didNotPublish:errors)
51
+ @on_did_not_publish.call(errors) if @on_did_not_publish
52
+ end
53
+
54
+ def netServiceDidPublish(sender)
55
+ @on_did_publish.call if @on_did_publish
56
+ end
57
+
58
+ def netServiceWillResolve(sender)
59
+ @on_will_resolve.call if @on_will_resolve
60
+ end
61
+
62
+ def netService(sender, didNotResolve:errors)
63
+ @on_did_not_resolve.call(errors) if @on_did_not_resolve
64
+ end
65
+
66
+ def netServiceDidResolveAddress(sender)
67
+ @on_did_resolve_address.call if @on_did_resolve_address
68
+ end
69
+
70
+ def netServiceDidStop(sender)
71
+ @on_did_stop.call if @on_did_stop
72
+ end
73
+ end
@@ -0,0 +1,47 @@
1
+ class NetServiceBrowser
2
+ def initialize(search_type, options={})
3
+ default_options = {
4
+ search_type: search_type,
5
+ domain: ""
6
+ }
7
+ @options = options.merge(default_options)
8
+
9
+ @net_service_browser = NSNetServiceBrowser.alloc.init
10
+ @net_service_browser.setDelegate(self)
11
+ end
12
+
13
+ [
14
+ :on_will_search,
15
+ :on_did_find_domain, :on_did_remove_domain, :on_did_find_service, :on_did_remove_service,
16
+ :on_did_not_search, :on_did_stop_search
17
+ ].each do |callback|
18
+ define_method callback do |&block|
19
+ instance_variable_set("@#{callback}", block)
20
+ end
21
+ end
22
+
23
+ def self.search(search_type, options={}, &block)
24
+ NetServiceBrowser.new(search_type, options).tap do |browser|
25
+ browser.search(&block)
26
+ end
27
+ end
28
+
29
+ def search(&block)
30
+ if block
31
+ on_did_find_service do |service, more_coming|
32
+ service.resolve do
33
+ block.call(service, more_coming)
34
+ end
35
+ end
36
+ end
37
+ @net_service_browser.searchForServicesOfType @options[:search_type], inDomain: @options[:domain]
38
+ end
39
+
40
+ def netServiceBrowser(netServiceBrowser, didFindService: service, moreComing: moreComing)
41
+ @on_did_find_service.call(NetService.from_ns_net_service(service), moreComing) if @on_did_find_service
42
+ end
43
+
44
+ def netServiceBrowser(netServiceBrowser, didNotSearch: errorInfo)
45
+ @on_did_not_search.call(errorInfo) if @on_did_not_search
46
+ end
47
+ end
@@ -0,0 +1,3 @@
1
+ module MotionNetService
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/motion-net-service/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "motion-net-service"
6
+ s.version = MotionNetService::VERSION
7
+ s.authors = ["Jamie van Dyke", "Thomas Kadauke"]
8
+ s.email = ["jamie@fearoffish.com", "thomas.kadauke@googlemail.com"]
9
+ s.homepage = "https://github.com/fearoffish/motion-net-service"
10
+ s.summary = "Wrapper around NSNetService for RubyMotion"
11
+ s.description = "Wrapper around NSNetService for RubyMotion."
12
+
13
+ s.files = `git ls-files`.split($\)
14
+ s.test_files = s.files.grep(%r{^(test|spec|features)/})
15
+ s.require_paths = ["lib"]
16
+
17
+ s.add_dependency 'bubble-wrap'
18
+ s.add_development_dependency 'rake'
19
+ end
Binary file
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: motion-net-service
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Jamie van Dyke
9
+ - Thomas Kadauke
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2013-03-29 00:00:00 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: bubble-wrap
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: *id002
38
+ description: Wrapper around NSNetService for RubyMotion.
39
+ email:
40
+ - jamie@fearoffish.com
41
+ - thomas.kadauke@googlemail.com
42
+ executables: []
43
+
44
+ extensions: []
45
+
46
+ extra_rdoc_files: []
47
+
48
+ files:
49
+ - .gitignore
50
+ - Gemfile
51
+ - Rakefile
52
+ - app/app_delegate.rb
53
+ - lib/motion-net-service.rb
54
+ - lib/motion-net-service/net_service.rb
55
+ - lib/motion-net-service/net_service_browser.rb
56
+ - lib/motion-net-service/version.rb
57
+ - motion-net-service.gemspec
58
+ - resources/Default-568h@2x.png
59
+ homepage: https://github.com/fearoffish/motion-net-service
60
+ licenses: []
61
+
62
+ post_install_message:
63
+ rdoc_options: []
64
+
65
+ require_paths:
66
+ - lib
67
+ required_ruby_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: -2733567938995359562
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ hash: -2733567938995359562
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ requirements: []
86
+
87
+ rubyforge_project:
88
+ rubygems_version: 1.8.19
89
+ signing_key:
90
+ specification_version: 3
91
+ summary: Wrapper around NSNetService for RubyMotion
92
+ test_files: []
93
+