mirror of
https://github.com/moonlight-stream/moonlight-ios.git
synced 2025-07-27 06:32:59 +00:00
95 lines
3.7 KiB
Objective-C
95 lines
3.7 KiB
Objective-C
//
|
|
// DiscoveryWorker.m
|
|
// Limelight
|
|
//
|
|
// Created by Diego Waxemberg on 1/2/15.
|
|
// Copyright (c) 2015 Limelight Stream. All rights reserved.
|
|
//
|
|
|
|
#import "DiscoveryWorker.h"
|
|
#import "Utils.h"
|
|
#import "HttpManager.h"
|
|
|
|
@implementation DiscoveryWorker {
|
|
Host* _host;
|
|
NSString* _uniqueId;
|
|
NSData* _cert;
|
|
}
|
|
|
|
static const float POLL_RATE = 2.0f; // Poll every 2 seconds
|
|
|
|
- (id) initWithHost:(Host*)host uniqueId:(NSString*)uniqueId cert:(NSData*)cert {
|
|
self = [super init];
|
|
_host = host;
|
|
_uniqueId = uniqueId;
|
|
_cert = cert;
|
|
return self;
|
|
}
|
|
|
|
- (Host*) getHost {
|
|
return _host;
|
|
}
|
|
|
|
- (void)main {
|
|
while (!self.cancelled) {
|
|
[self discoverHost];
|
|
if (!self.cancelled) {
|
|
[NSThread sleepForTimeInterval:POLL_RATE];
|
|
}
|
|
}
|
|
}
|
|
|
|
- (void) discoverHost {
|
|
BOOL receivedResponse = NO;
|
|
if (!self.cancelled && _host.localAddress != nil) {
|
|
HttpManager* hMan = [[HttpManager alloc] initWithHost:_host.localAddress uniqueId:_uniqueId deviceName:deviceName cert:_cert];
|
|
NSData* serverInfoData = [hMan executeRequestSynchronously:[hMan newServerInfoRequest]];
|
|
if ([[HttpManager getStatusStringFromXML:serverInfoData] isEqualToString:@"OK"]) {
|
|
[DiscoveryWorker updateHost:_host withServerInfo:serverInfoData];
|
|
_host.address = _host.localAddress;
|
|
receivedResponse = YES;
|
|
}
|
|
}
|
|
if (!self.cancelled && !receivedResponse && _host.externalAddress != nil) {
|
|
HttpManager* hMan = [[HttpManager alloc] initWithHost:_host.externalAddress uniqueId:_uniqueId deviceName:deviceName cert:_cert];
|
|
NSData* serverInfoData = [hMan executeRequestSynchronously:[hMan newServerInfoRequest]];
|
|
if ([[HttpManager getStatusStringFromXML:serverInfoData] isEqualToString:@"OK"]) {
|
|
[DiscoveryWorker updateHost:_host withServerInfo:serverInfoData];
|
|
_host.address = _host.externalAddress;
|
|
receivedResponse = YES;
|
|
}
|
|
}
|
|
|
|
if (!self.cancelled && !receivedResponse && _host.address != nil) {
|
|
HttpManager* hMan = [[HttpManager alloc] initWithHost:_host.address uniqueId:_uniqueId deviceName:deviceName cert:_cert];
|
|
NSData* serverInfoData = [hMan executeRequestSynchronously:[hMan newServerInfoRequest]];
|
|
if ([[HttpManager getStatusStringFromXML:serverInfoData] isEqualToString:@"OK"]) {
|
|
[DiscoveryWorker updateHost:_host withServerInfo:serverInfoData];
|
|
receivedResponse = YES;
|
|
}
|
|
}
|
|
_host.online = receivedResponse;
|
|
if (receivedResponse) {
|
|
NSLog(@"Received response from: %@\n{\n\t address:%@ \n\t localAddress:%@ \n\t externalAddress:%@ \n\t uuid:%@ \n\t mac:%@ \n\t pairState:%d \n\t online:%d \n}", _host.name, _host.address, _host.localAddress, _host.externalAddress, _host.uuid, _host.mac, _host.pairState, _host.online);
|
|
} else {
|
|
// If the host is not online, we do not know the pairstate
|
|
_host.pairState = PairStateUnknown;
|
|
}
|
|
}
|
|
|
|
+ (void) updateHost:(Host*)host withServerInfo:(NSData*)serverInfoData {
|
|
host.name = [HttpManager getStringFromXML:serverInfoData tag:@"hostname"];
|
|
host.externalAddress = [HttpManager getStringFromXML:serverInfoData tag:@"ExternalIP"];
|
|
host.localAddress = [HttpManager getStringFromXML:serverInfoData tag:@"LocalIP"];
|
|
host.uuid = [HttpManager getStringFromXML:serverInfoData tag:@"uniqueid"];
|
|
host.mac = [HttpManager getStringFromXML:serverInfoData tag:@"mac"];
|
|
NSString* pairState = [HttpManager getStringFromXML:serverInfoData tag:@"PairStatus"];
|
|
if ([pairState isEqualToString:@"1"]) {
|
|
host.pairState = PairStatePaired;
|
|
} else {
|
|
host.pairState = PairStateUnpaired;
|
|
}
|
|
}
|
|
|
|
@end
|