/
CPBonjourResolver.m
136 lines (98 loc) · 3.46 KB
/
CPBonjourResolver.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
//
// CPBonjourResolver.m
// ControlPlane
//
// Created by Dustin Rue on 3/2/12.
// Copyright (c) 2012 Dustin Rue. All rights reserved.
//
#import "CPBonjourResolver.h"
#import "DSLogger.h"
@implementation CPBonjourResolver
@synthesize delegate;
@synthesize foundItems;
@synthesize myServiceType;
#pragma mark -
#pragma mark init/dealloc
- (id) init {
self = [super init];
if (!self)
return self;
networkBrowser = [[NSNetServiceBrowser alloc] init];
foundItems = [[NSMutableArray alloc] init];
return self;
}
- (void) dealloc {
[networkBrowser release];
[foundItems release];
[super dealloc];
}
- (void) searchForServicesOfType:(NSString *)serviceType inDomain:(NSString *) searchDomain {
[networkBrowser setDelegate:self];
[networkBrowser searchForServicesOfType:serviceType inDomain:searchDomain];
}
- (void) stop {
[networkBrowser stop];
[foundItems removeAllObjects];
}
- (void) doResolveForService:(NSNetService *)service {
[service setDelegate:self];
[service resolveWithTimeout:2];
}
#pragma mark -
#pragma mark NSNetServiceBrowser and NSNetService delegates
- (void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser
didRemoveService:(NSNetService *)netService
moreComing:(BOOL)moreServicesComing {
[foundItems removeObject:netService];
if ([[self delegate] respondsToSelector:@selector(netServiceBrowser:removedService:)])
[[self delegate] netServiceBrowser:self removedService:netService];
else
DSLog(@"you're not compliant with CPBonjourResolverDelegate so you missed hearing about this service that went away");
}
- (void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser *)netServiceBrowser {
#ifdef DEBUG_MODE
DSLog(@"");
#endif
}
- (void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser
didNotSearch:(NSDictionary *)errorInfo {
DSLog(@"Failed to perform search:\n%@", errorInfo);
}
- (void)netServiceBrowser:(NSNetServiceBrowser *)netServiceBrowser
didFindService:(NSNetService *)netService
moreComing:(BOOL)moreServicesComing {
[foundItems addObject:netService];
if ([[self delegate] respondsToSelector:@selector(foundNewServiceFrom:withService:)]) {
[[self delegate] foundNewServiceFrom:self withService:netService];
}
}
- (void)netServiceDidResolveAddress:(NSNetService *)sender {
if ([[self delegate] respondsToSelector:@selector(resolvedServiceArrived:)])
[[self delegate] resolvedServiceArrived:sender];
else
DSLog(@"you're not compliant with CPBonjourResolverDelegate so you missed on this hot new service I found");
}
- (void)netService:(NSNetService *)sender didNotResolve:(NSDictionary *)errorDict {
DSLog(@"failed to resolve netService: %@", errorDict);
}
- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didFindDomain:(NSString *)domainString moreComing:(BOOL)moreComing {
#ifdef DEBUG_MODE
DSLog(@"");
#endif
}
- (void)netServiceBrowser:(NSNetServiceBrowser *)aNetServiceBrowser didRemoveDomain:(NSString *)domainString moreComing:(BOOL)moreComin {
#ifdef DEBUG_MODE
DSLog(@"");
#endif
}
- (NSUInteger) numberOfHosts {
return [foundItems count];
}
#pragma mark -
#pragma mark Utility methods
+ (NSString *) stripLocal:(NSString *) incoming {
if ([incoming hasSuffix:@".local."])
return[incoming substringToIndex:([incoming length] - 6)];
return incoming;
}
@end