mirror of
https://github.com/moonlight-stream/moonlight-ios.git
synced 2026-05-19 16:20:15 +00:00
Dark Mode & Stream Overlay [macOS] (#315)
* dark mode & stream overlay * removed all redundant imports * update for the new xcode version with fixes for the new 'implicitly retains self warning' * reworked the overlay view * cleaning up unused variables * small corrections
This commit is contained in:
committed by
Cameron Gutman
parent
74283a6763
commit
f759f719e6
@@ -6,8 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
@interface CryptoManager : NSObject
|
@interface CryptoManager : NSObject
|
||||||
|
|
||||||
+ (void) generateKeyPairUsingSSl;
|
+ (void) generateKeyPairUsingSSl;
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
// Copyright © 2015 Moonlight Stream. All rights reserved.
|
// Copyright © 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
@interface IdManager : NSObject
|
@interface IdManager : NSObject
|
||||||
|
|
||||||
+ (NSString*) getUniqueId;
|
+ (NSString*) getUniqueId;
|
||||||
|
|||||||
@@ -6,9 +6,6 @@
|
|||||||
// Copyright © 2015 Limelight Stream. All rights reserved.
|
// Copyright © 2015 Limelight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import <CoreData/CoreData.h>
|
|
||||||
|
|
||||||
@class Host;
|
@class Host;
|
||||||
|
|
||||||
@interface App : NSManagedObject
|
@interface App : NSManagedObject
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "AppDelegate.h"
|
#import "AppDelegate.h"
|
||||||
#import "TemporaryHost.h"
|
#import "TemporaryHost.h"
|
||||||
#import "TemporaryApp.h"
|
#import "TemporaryApp.h"
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
dispatch_sync(dispatch_get_main_queue(), ^{
|
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||||
_appDelegate = (AppDelegate *)[[OSApplication sharedApplication] delegate];
|
self->_appDelegate = (AppDelegate *)[[OSApplication sharedApplication] delegate];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,8 +76,8 @@
|
|||||||
// Add a new persistent managed object if one doesn't exist
|
// Add a new persistent managed object if one doesn't exist
|
||||||
Host* parent = [self getHostForTemporaryHost:host withHostRecords:[self fetchRecords:@"Host"]];
|
Host* parent = [self getHostForTemporaryHost:host withHostRecords:[self fetchRecords:@"Host"]];
|
||||||
if (parent == nil) {
|
if (parent == nil) {
|
||||||
NSEntityDescription* entity = [NSEntityDescription entityForName:@"Host" inManagedObjectContext:_managedObjectContext];
|
NSEntityDescription* entity = [NSEntityDescription entityForName:@"Host" inManagedObjectContext:self->_managedObjectContext];
|
||||||
parent = [[Host alloc] initWithEntity:entity insertIntoManagedObjectContext:_managedObjectContext];
|
parent = [[Host alloc] initWithEntity:entity insertIntoManagedObjectContext:self->_managedObjectContext];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Push changes from the temp host to the persistent one
|
// Push changes from the temp host to the persistent one
|
||||||
@@ -101,8 +101,8 @@
|
|||||||
// Add a new persistent managed object if one doesn't exist
|
// Add a new persistent managed object if one doesn't exist
|
||||||
App* parentApp = [self getAppForTemporaryApp:app withAppRecords:appRecords];
|
App* parentApp = [self getAppForTemporaryApp:app withAppRecords:appRecords];
|
||||||
if (parentApp == nil) {
|
if (parentApp == nil) {
|
||||||
NSEntityDescription* entity = [NSEntityDescription entityForName:@"App" inManagedObjectContext:_managedObjectContext];
|
NSEntityDescription* entity = [NSEntityDescription entityForName:@"App" inManagedObjectContext:self->_managedObjectContext];
|
||||||
parentApp = [[App alloc] initWithEntity:entity insertIntoManagedObjectContext:_managedObjectContext];
|
parentApp = [[App alloc] initWithEntity:entity insertIntoManagedObjectContext:self->_managedObjectContext];
|
||||||
}
|
}
|
||||||
|
|
||||||
[app propagateChangesToParent:parentApp withHost:parent];
|
[app propagateChangesToParent:parentApp withHost:parent];
|
||||||
@@ -158,7 +158,7 @@
|
|||||||
[_managedObjectContext performBlockAndWait:^{
|
[_managedObjectContext performBlockAndWait:^{
|
||||||
App* managedApp = [self getAppForTemporaryApp:app withAppRecords:[self fetchRecords:@"App"]];
|
App* managedApp = [self getAppForTemporaryApp:app withAppRecords:[self fetchRecords:@"App"]];
|
||||||
if (managedApp != nil) {
|
if (managedApp != nil) {
|
||||||
[_managedObjectContext deleteObject:managedApp];
|
[self->_managedObjectContext deleteObject:managedApp];
|
||||||
[self saveData];
|
[self saveData];
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
[_managedObjectContext performBlockAndWait:^{
|
[_managedObjectContext performBlockAndWait:^{
|
||||||
Host* managedHost = [self getHostForTemporaryHost:host withHostRecords:[self fetchRecords:@"Host"]];
|
Host* managedHost = [self getHostForTemporaryHost:host withHostRecords:[self fetchRecords:@"Host"]];
|
||||||
if (managedHost != nil) {
|
if (managedHost != nil) {
|
||||||
[_managedObjectContext deleteObject:managedHost];
|
[self->_managedObjectContext deleteObject:managedHost];
|
||||||
[self saveData];
|
[self saveData];
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
// Copyright © 2015 Limelight Stream. All rights reserved.
|
// Copyright © 2015 Limelight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import <CoreData/CoreData.h>
|
|
||||||
#import "Utils.h"
|
#import "Utils.h"
|
||||||
|
|
||||||
@interface Host : NSManagedObject
|
@interface Host : NSManagedObject
|
||||||
|
|||||||
@@ -6,10 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import <CoreData/CoreData.h>
|
|
||||||
|
|
||||||
|
|
||||||
@interface Settings : NSManagedObject
|
@interface Settings : NSManagedObject
|
||||||
|
|
||||||
@property (nonatomic, retain) NSNumber * bitrate;
|
@property (nonatomic, retain) NSNumber * bitrate;
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright © 2015 Moonlight Stream. All rights reserved.
|
// Copyright © 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "TemporaryHost.h"
|
#import "TemporaryHost.h"
|
||||||
#import "App.h"
|
#import "App.h"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright © 2015 Moonlight Stream. All rights reserved.
|
// Copyright © 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "Utils.h"
|
#import "Utils.h"
|
||||||
#import "Host.h"
|
#import "Host.h"
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright © 2015 Moonlight Stream. All rights reserved.
|
// Copyright © 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "Settings.h"
|
#import "Settings.h"
|
||||||
|
|
||||||
@interface TemporarySettings : NSObject
|
@interface TemporarySettings : NSObject
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
// Swift
|
// Swift
|
||||||
#import "Moonlight-Swift.h"
|
#import "Moonlight-Swift.h"
|
||||||
#if !TARGET_OS_IPHONE
|
#if !TARGET_OS_IPHONE
|
||||||
|
|||||||
@@ -177,7 +177,7 @@
|
|||||||
{
|
{
|
||||||
if (controller != NULL) {
|
if (controller != NULL) {
|
||||||
controller.controllerPausedHandler = ^(GCController *controller) {
|
controller.controllerPausedHandler = ^(GCController *controller) {
|
||||||
Controller* limeController = [_controllers objectForKey:[NSNumber numberWithInteger:controller.playerIndex]];
|
Controller* limeController = [self->_controllers objectForKey:[NSNumber numberWithInteger:controller.playerIndex]];
|
||||||
[self setButtonFlag:limeController flags:PLAY_FLAG];
|
[self setButtonFlag:limeController flags:PLAY_FLAG];
|
||||||
[self updateFinished:limeController];
|
[self updateFinished:limeController];
|
||||||
|
|
||||||
@@ -190,7 +190,7 @@
|
|||||||
|
|
||||||
if (controller.extendedGamepad != NULL) {
|
if (controller.extendedGamepad != NULL) {
|
||||||
controller.extendedGamepad.valueChangedHandler = ^(GCExtendedGamepad *gamepad, GCControllerElement *element) {
|
controller.extendedGamepad.valueChangedHandler = ^(GCExtendedGamepad *gamepad, GCControllerElement *element) {
|
||||||
Controller* limeController = [_controllers objectForKey:[NSNumber numberWithInteger:gamepad.controller.playerIndex]];
|
Controller* limeController = [self->_controllers objectForKey:[NSNumber numberWithInteger:gamepad.controller.playerIndex]];
|
||||||
short leftStickX, leftStickY;
|
short leftStickX, leftStickY;
|
||||||
short rightStickX, rightStickY;
|
short rightStickX, rightStickY;
|
||||||
char leftTrigger, rightTrigger;
|
char leftTrigger, rightTrigger;
|
||||||
@@ -225,7 +225,7 @@
|
|||||||
}
|
}
|
||||||
else if (controller.gamepad != NULL) {
|
else if (controller.gamepad != NULL) {
|
||||||
controller.gamepad.valueChangedHandler = ^(GCGamepad *gamepad, GCControllerElement *element) {
|
controller.gamepad.valueChangedHandler = ^(GCGamepad *gamepad, GCControllerElement *element) {
|
||||||
Controller* limeController = [_controllers objectForKey:[NSNumber numberWithInteger:gamepad.controller.playerIndex]];
|
Controller* limeController = [self->_controllers objectForKey:[NSNumber numberWithInteger:gamepad.controller.playerIndex]];
|
||||||
UPDATE_BUTTON_FLAG(limeController, A_FLAG, gamepad.buttonA.pressed);
|
UPDATE_BUTTON_FLAG(limeController, A_FLAG, gamepad.buttonA.pressed);
|
||||||
UPDATE_BUTTON_FLAG(limeController, B_FLAG, gamepad.buttonB.pressed);
|
UPDATE_BUTTON_FLAG(limeController, B_FLAG, gamepad.buttonB.pressed);
|
||||||
UPDATE_BUTTON_FLAG(limeController, X_FLAG, gamepad.buttonX.pressed);
|
UPDATE_BUTTON_FLAG(limeController, X_FLAG, gamepad.buttonX.pressed);
|
||||||
@@ -408,12 +408,12 @@
|
|||||||
|
|
||||||
GCController* controller = note.object;
|
GCController* controller = note.object;
|
||||||
[self unregisterControllerCallbacks:controller];
|
[self unregisterControllerCallbacks:controller];
|
||||||
_controllerNumbers &= ~(1 << controller.playerIndex);
|
self->_controllerNumbers &= ~(1 << controller.playerIndex);
|
||||||
Log(LOG_I, @"Unassigning controller index: %ld", (long)controller.playerIndex);
|
Log(LOG_I, @"Unassigning controller index: %ld", (long)controller.playerIndex);
|
||||||
|
|
||||||
// Inform the server of the updated active gamepads before removing this controller
|
// Inform the server of the updated active gamepads before removing this controller
|
||||||
[self updateFinished:[_controllers objectForKey:[NSNumber numberWithInteger:controller.playerIndex]]];
|
[self updateFinished:[self->_controllers objectForKey:[NSNumber numberWithInteger:controller.playerIndex]]];
|
||||||
[_controllers removeObjectForKey:[NSNumber numberWithInteger:controller.playerIndex]];
|
[self->_controllers removeObjectForKey:[NSNumber numberWithInteger:controller.playerIndex]];
|
||||||
|
|
||||||
// Re-evaluate the on-screen control mode
|
// Re-evaluate the on-screen control mode
|
||||||
[self updateAutoOnScreenControlMode];
|
[self updateAutoOnScreenControlMode];
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "TemporaryApp.h"
|
#import "TemporaryApp.h"
|
||||||
#import "HttpManager.h"
|
#import "HttpManager.h"
|
||||||
#import "TemporaryHost.h"
|
#import "TemporaryHost.h"
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "HttpResponse.h"
|
#import "HttpResponse.h"
|
||||||
|
|
||||||
@interface AppAssetResponse : NSObject <Response>
|
@interface AppAssetResponse : NSObject <Response>
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "TemporaryHost.h"
|
#import "TemporaryHost.h"
|
||||||
#import "TemporaryApp.h"
|
#import "TemporaryApp.h"
|
||||||
#import "AppAssetManager.h"
|
#import "AppAssetManager.h"
|
||||||
|
|||||||
@@ -2,11 +2,10 @@
|
|||||||
// ConnectionHelper.h
|
// ConnectionHelper.h
|
||||||
// Moonlight macOS
|
// Moonlight macOS
|
||||||
//
|
//
|
||||||
// Created by Felix on 22.03.18.
|
// Created by Felix Kratz on 22.03.18.
|
||||||
// Copyright © 2018 Felix. All rights reserved.
|
// Copyright © 2018 Felix Kratz. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "AppListResponse.h"
|
#import "AppListResponse.h"
|
||||||
|
|
||||||
#ifndef ConnectionHelper_h
|
#ifndef ConnectionHelper_h
|
||||||
|
|||||||
@@ -2,8 +2,8 @@
|
|||||||
// ConnectionHelper.m
|
// ConnectionHelper.m
|
||||||
// Moonlight macOS
|
// Moonlight macOS
|
||||||
//
|
//
|
||||||
// Created by Felix on 22.03.18.
|
// Created by Felix Kratz on 22.03.18.
|
||||||
// Copyright © 2018 Felix. All rights reserved.
|
// Copyright © 2018 Felix Kratz. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import "ConnectionHelper.h"
|
#import "ConnectionHelper.h"
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "MDNSManager.h"
|
#import "MDNSManager.h"
|
||||||
#import "TemporaryHost.h"
|
#import "TemporaryHost.h"
|
||||||
|
|
||||||
|
|||||||
@@ -153,7 +153,7 @@
|
|||||||
[worker discoverHost];
|
[worker discoverHost];
|
||||||
if ([self addHostToDiscovery:host]) {
|
if ([self addHostToDiscovery:host]) {
|
||||||
Log(LOG_I, @"Adding host to discovery: %@", host.name);
|
Log(LOG_I, @"Adding host to discovery: %@", host.name);
|
||||||
[_callback updateAllHosts:_hostQueue];
|
[self->_callback updateAllHosts:self->_hostQueue];
|
||||||
} else {
|
} else {
|
||||||
Log(LOG_I, @"Not adding host to discovery: %@", host.name);
|
Log(LOG_I, @"Not adding host to discovery: %@", host.name);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "TemporaryHost.h"
|
#import "TemporaryHost.h"
|
||||||
|
|
||||||
@interface DiscoveryWorker : NSOperation
|
@interface DiscoveryWorker : NSOperation
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "HttpResponse.h"
|
#import "HttpResponse.h"
|
||||||
#import "HttpRequest.h"
|
#import "HttpRequest.h"
|
||||||
|
|
||||||
|
|||||||
@@ -69,23 +69,23 @@ static const NSString* HTTPS_PORT = @"47984";
|
|||||||
|
|
||||||
if (error != NULL) {
|
if (error != NULL) {
|
||||||
Log(LOG_D, @"Connection error: %@", error);
|
Log(LOG_D, @"Connection error: %@", error);
|
||||||
_errorOccurred = true;
|
self->_errorOccurred = true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Log(LOG_D, @"Received response: %@", response);
|
Log(LOG_D, @"Received response: %@", response);
|
||||||
|
|
||||||
if (data != NULL) {
|
if (data != NULL) {
|
||||||
Log(LOG_D, @"\n\nReceived data: %@\n\n", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
|
Log(LOG_D, @"\n\nReceived data: %@\n\n", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
|
||||||
[_respData appendData:data];
|
[self->_respData appendData:data];
|
||||||
if ([[NSString alloc] initWithData:_respData encoding:NSUTF8StringEncoding] != nil) {
|
if ([[NSString alloc] initWithData:self->_respData encoding:NSUTF8StringEncoding] != nil) {
|
||||||
_requestResp = [HttpManager fixXmlVersion:_respData];
|
self->_requestResp = [HttpManager fixXmlVersion:self->_respData];
|
||||||
} else {
|
} else {
|
||||||
_requestResp = _respData;
|
self->_requestResp = self->_respData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatch_semaphore_signal(_requestLock);
|
dispatch_semaphore_signal(self->_requestLock);
|
||||||
}] resume];
|
}] resume];
|
||||||
dispatch_semaphore_wait(_requestLock, DISPATCH_TIME_FOREVER);
|
dispatch_semaphore_wait(_requestLock, DISPATCH_TIME_FOREVER);
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "HttpResponse.h"
|
#import "HttpResponse.h"
|
||||||
|
|
||||||
@interface HttpRequest : NSObject
|
@interface HttpRequest : NSObject
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
static NSString* TAG_STATUS_CODE = @"status_code";
|
static NSString* TAG_STATUS_CODE = @"status_code";
|
||||||
static NSString* TAG_STATUS_MESSAGE = @"status_message";
|
static NSString* TAG_STATUS_MESSAGE = @"status_message";
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
@protocol MDNSCallback <NSObject>
|
@protocol MDNSCallback <NSObject>
|
||||||
|
|
||||||
- (void) updateHosts:(NSArray*)hosts;
|
- (void) updateHosts:(NSArray*)hosts;
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "HttpManager.h"
|
#import "HttpManager.h"
|
||||||
|
|
||||||
@protocol PairCallback <NSObject>
|
@protocol PairCallback <NSObject>
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2015 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "TemporaryHost.h"
|
#import "TemporaryHost.h"
|
||||||
|
|
||||||
@interface WakeOnLanManager : NSObject
|
@interface WakeOnLanManager : NSObject
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "VideoDecoderRenderer.h"
|
#import "VideoDecoderRenderer.h"
|
||||||
#import "StreamConfiguration.h"
|
#import "StreamConfiguration.h"
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
@interface StreamConfiguration : NSObject
|
@interface StreamConfiguration : NSObject
|
||||||
|
|
||||||
@property NSString* host;
|
@property NSString* host;
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "StreamConfiguration.h"
|
#import "StreamConfiguration.h"
|
||||||
#import "Connection.h"
|
#import "Connection.h"
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
@import AVFoundation;
|
@import AVFoundation;
|
||||||
|
|
||||||
@interface VideoDecoderRenderer : NSObject
|
@interface VideoDecoderRenderer : NSObject
|
||||||
|
|||||||
@@ -7,11 +7,12 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import "VideoDecoderRenderer.h"
|
#import "VideoDecoderRenderer.h"
|
||||||
|
#import "StreamView.h"
|
||||||
|
|
||||||
#include "Limelight.h"
|
#include "Limelight.h"
|
||||||
|
|
||||||
@implementation VideoDecoderRenderer {
|
@implementation VideoDecoderRenderer {
|
||||||
OSView *_view;
|
StreamView* _view;
|
||||||
|
|
||||||
AVSampleBufferDisplayLayer* displayLayer;
|
AVSampleBufferDisplayLayer* displayLayer;
|
||||||
Boolean waitingForSps, waitingForPps, waitingForVps;
|
Boolean waitingForSps, waitingForPps, waitingForVps;
|
||||||
@@ -54,7 +55,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (id)initWithView:(OSView*)view
|
- (id)initWithView:(StreamView*)view
|
||||||
{
|
{
|
||||||
self = [super init];
|
self = [super init];
|
||||||
|
|
||||||
@@ -68,6 +69,9 @@
|
|||||||
- (void)setupWithVideoFormat:(int)videoFormat
|
- (void)setupWithVideoFormat:(int)videoFormat
|
||||||
{
|
{
|
||||||
self->videoFormat = videoFormat;
|
self->videoFormat = videoFormat;
|
||||||
|
#if !TARGET_OS_IPHONE
|
||||||
|
_view.codec = videoFormat;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FRAME_START_PREFIX_SIZE 4
|
#define FRAME_START_PREFIX_SIZE 4
|
||||||
@@ -335,7 +339,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
[displayLayer enqueueSampleBuffer:sampleBuffer];
|
[displayLayer enqueueSampleBuffer:sampleBuffer];
|
||||||
|
#if !TARGET_OS_IPHONE
|
||||||
|
_view.frameCount++;
|
||||||
|
#endif
|
||||||
// Dereference the buffers
|
// Dereference the buffers
|
||||||
CFRelease(blockBuffer);
|
CFRelease(blockBuffer);
|
||||||
CFRelease(sampleBuffer);
|
CFRelease(sampleBuffer);
|
||||||
|
|||||||
@@ -6,8 +6,6 @@
|
|||||||
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
|
|
||||||
@interface Utils : NSObject
|
@interface Utils : NSObject
|
||||||
|
|
||||||
typedef NS_ENUM(int, PairState) {
|
typedef NS_ENUM(int, PairState) {
|
||||||
|
|||||||
+9
-19
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="13771" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="14109" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13771"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14109"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<scenes>
|
<scenes>
|
||||||
@@ -832,38 +832,26 @@
|
|||||||
<objects>
|
<objects>
|
||||||
<viewController title="StreamFrame" storyboardIdentifier="streamFrameVC" id="8UI-ob-rLN" customClass="StreamFrameViewController" sceneMemberID="viewController">
|
<viewController title="StreamFrame" storyboardIdentifier="streamFrameVC" id="8UI-ob-rLN" customClass="StreamFrameViewController" sceneMemberID="viewController">
|
||||||
<customView key="view" wantsLayer="YES" id="0nI-m2-hfb" customClass="StreamView">
|
<customView key="view" wantsLayer="YES" id="0nI-m2-hfb" customClass="StreamView">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="200" height="200"/>
|
<rect key="frame" x="0.0" y="0.0" width="362" height="187"/>
|
||||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||||
<subviews>
|
<subviews>
|
||||||
<progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="dCg-Rb-XtM">
|
<progressIndicator wantsLayer="YES" horizontalHuggingPriority="750" verticalHuggingPriority="750" maxValue="100" bezeled="NO" indeterminate="YES" controlSize="small" style="spinning" translatesAutoresizingMaskIntoConstraints="NO" id="dCg-Rb-XtM">
|
||||||
<rect key="frame" x="92" y="92" width="16" height="16"/>
|
<rect key="frame" x="173" y="86" width="16" height="16"/>
|
||||||
</progressIndicator>
|
</progressIndicator>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Fbs-og-fmy">
|
|
||||||
<rect key="frame" x="18" y="65" width="164" height="19"/>
|
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="center" id="T2I-Dw-oy5">
|
|
||||||
<font key="font" metaFont="system" size="15"/>
|
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
|
||||||
</textFieldCell>
|
|
||||||
</textField>
|
|
||||||
</subviews>
|
</subviews>
|
||||||
<constraints>
|
<constraints>
|
||||||
<constraint firstItem="dCg-Rb-XtM" firstAttribute="centerY" secondItem="0nI-m2-hfb" secondAttribute="centerY" id="4KU-wx-Rei"/>
|
<constraint firstItem="dCg-Rb-XtM" firstAttribute="centerY" secondItem="0nI-m2-hfb" secondAttribute="centerY" id="4KU-wx-Rei"/>
|
||||||
<constraint firstItem="Fbs-og-fmy" firstAttribute="leading" secondItem="0nI-m2-hfb" secondAttribute="leading" constant="20" id="6Bo-xo-1Kh"/>
|
|
||||||
<constraint firstAttribute="trailing" secondItem="Fbs-og-fmy" secondAttribute="trailing" constant="20" id="D6H-sy-lYF"/>
|
|
||||||
<constraint firstItem="dCg-Rb-XtM" firstAttribute="centerX" secondItem="0nI-m2-hfb" secondAttribute="centerX" id="LXb-65-YYS"/>
|
<constraint firstItem="dCg-Rb-XtM" firstAttribute="centerX" secondItem="0nI-m2-hfb" secondAttribute="centerX" id="LXb-65-YYS"/>
|
||||||
<constraint firstItem="Fbs-og-fmy" firstAttribute="top" secondItem="dCg-Rb-XtM" secondAttribute="bottom" constant="8" id="yOt-Xm-ghe"/>
|
|
||||||
</constraints>
|
</constraints>
|
||||||
</customView>
|
</customView>
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="progressIndicator" destination="dCg-Rb-XtM" id="KDw-2J-5Vx"/>
|
<outlet property="progressIndicator" destination="dCg-Rb-XtM" id="KDw-2J-5Vx"/>
|
||||||
<outlet property="stageLabel" destination="Fbs-og-fmy" id="CQl-qn-f1H"/>
|
|
||||||
<outlet property="streamView" destination="0nI-m2-hfb" id="87h-Js-htb"/>
|
<outlet property="streamView" destination="0nI-m2-hfb" id="87h-Js-htb"/>
|
||||||
</connections>
|
</connections>
|
||||||
</viewController>
|
</viewController>
|
||||||
<customObject id="SeL-fy-qhv" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
<customObject id="SeL-fy-qhv" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="101" y="660"/>
|
<point key="canvasLocation" x="199" y="661"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--SettingsFrame-->
|
<!--SettingsFrame-->
|
||||||
<scene sceneID="z96-VP-gUP">
|
<scene sceneID="z96-VP-gUP">
|
||||||
@@ -875,6 +863,7 @@
|
|||||||
<subviews>
|
<subviews>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hYZ-tr-UfS">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hYZ-tr-UfS">
|
||||||
<rect key="frame" x="18" y="80" width="72" height="17"/>
|
<rect key="frame" x="18" y="80" width="72" height="17"/>
|
||||||
|
<string key="toolTip">Any resolution different from 1080p/720p may not be supported by the host and could result in worse picture quality. Setup a custom resolution on the host PC that matches the aspect ratio of the client PC to get full-screen rendering.</string>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Resolution:" id="w6X-ji-ba4">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Resolution:" id="w6X-ji-ba4">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -883,6 +872,7 @@
|
|||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4hp-dI-fwU">
|
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="4hp-dI-fwU">
|
||||||
<rect key="frame" x="18" y="51" width="48" height="17"/>
|
<rect key="frame" x="18" y="51" width="48" height="17"/>
|
||||||
|
<string key="toolTip">This will be the bitrate for the video stream. Note that if not streaming remotely and using HEVC the effective video bitrate will be lower. Also note that this is only the video bitrate and there will be ~1Mbps for audio traffic. </string>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Bitrate:" id="1ex-3K-9IU">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Bitrate:" id="1ex-3K-9IU">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
|
||||||
@@ -944,7 +934,7 @@
|
|||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="op8-KP-yTY">
|
<textField toolTip="Framerates different from 30fps or 60fps will (currently) fall back to one of these." horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="op8-KP-yTY">
|
||||||
<rect key="frame" x="18" y="20" width="70" height="17"/>
|
<rect key="frame" x="18" y="20" width="70" height="17"/>
|
||||||
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Framerate:" id="fzt-Ma-FGg">
|
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Framerate:" id="fzt-Ma-FGg">
|
||||||
<font key="font" metaFont="system"/>
|
<font key="font" metaFont="system"/>
|
||||||
@@ -952,7 +942,7 @@
|
|||||||
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
|
||||||
</textFieldCell>
|
</textFieldCell>
|
||||||
</textField>
|
</textField>
|
||||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tB7-JI-smj">
|
<button toolTip="If activated, the stream will be optimized for streaming over the internet." verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="tB7-JI-smj">
|
||||||
<rect key="frame" x="200" y="20" width="144" height="18"/>
|
<rect key="frame" x="200" y="20" width="144" height="18"/>
|
||||||
<buttonCell key="cell" type="check" title="Streaming Remotely" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="RAr-f3-mlU">
|
<buttonCell key="cell" type="check" title="Streaming Remotely" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="RAr-f3-mlU">
|
||||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
DC2F1746205DA35700C3021E /* PairManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2F1734205DA35700C3021E /* PairManager.m */; };
|
DC2F1746205DA35700C3021E /* PairManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2F1734205DA35700C3021E /* PairManager.m */; };
|
||||||
DC2F174E205DA39600C3021E /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2F174A205DA39600C3021E /* Utils.m */; };
|
DC2F174E205DA39600C3021E /* Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2F174A205DA39600C3021E /* Utils.m */; };
|
||||||
DC2F174F205DA39600C3021E /* Logger.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2F174C205DA39600C3021E /* Logger.m */; };
|
DC2F174F205DA39600C3021E /* Logger.m in Sources */ = {isa = PBXBuildFile; fileRef = DC2F174C205DA39600C3021E /* Logger.m */; };
|
||||||
|
DC381F8E206D74F600E0931A /* NetworkTraffic.m in Sources */ = {isa = PBXBuildFile; fileRef = DC381F8D206D74F600E0931A /* NetworkTraffic.m */; };
|
||||||
DC38D540205ACC360045FE93 /* Control.m in Sources */ = {isa = PBXBuildFile; fileRef = DC38D53F205ACC360045FE93 /* Control.m */; };
|
DC38D540205ACC360045FE93 /* Control.m in Sources */ = {isa = PBXBuildFile; fileRef = DC38D53F205ACC360045FE93 /* Control.m */; };
|
||||||
DC38D548205AD8D00045FE93 /* libstem_gamepad.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DC38D544205AD8D00045FE93 /* libstem_gamepad.a */; };
|
DC38D548205AD8D00045FE93 /* libstem_gamepad.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DC38D544205AD8D00045FE93 /* libstem_gamepad.a */; };
|
||||||
DC38D549205AD9860045FE93 /* libstem_gamepad.a in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DC38D544205AD8D00045FE93 /* libstem_gamepad.a */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
DC38D549205AD9860045FE93 /* libstem_gamepad.a in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DC38D544205AD8D00045FE93 /* libstem_gamepad.a */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
@@ -57,6 +58,7 @@
|
|||||||
DC6A60862064299700A0673D /* ConnectionHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DC6A60852064299700A0673D /* ConnectionHelper.m */; };
|
DC6A60862064299700A0673D /* ConnectionHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = DC6A60852064299700A0673D /* ConnectionHelper.m */; };
|
||||||
DC7029D5205B28340016D44B /* LICENSE.txt in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DC7029D4205B28340016D44B /* LICENSE.txt */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
DC7029D5205B28340016D44B /* LICENSE.txt in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DC7029D4205B28340016D44B /* LICENSE.txt */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
|
||||||
DC9CD51F20601658001A5DCD /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DC9CD51E20601658001A5DCD /* AppDelegate.m */; };
|
DC9CD51F20601658001A5DCD /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = DC9CD51E20601658001A5DCD /* AppDelegate.m */; };
|
||||||
|
DCA3B3F22070EED0006565D9 /* OverlayView.m in Sources */ = {isa = PBXBuildFile; fileRef = DCA3B3F02070EED0006565D9 /* OverlayView.m */; };
|
||||||
DCAF051C205F3E6A00AD1DBA /* Limelight.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DCAF0516205F3E6A00AD1DBA /* Limelight.xcdatamodeld */; };
|
DCAF051C205F3E6A00AD1DBA /* Limelight.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DCAF0516205F3E6A00AD1DBA /* Limelight.xcdatamodeld */; };
|
||||||
DCAF0522205FCADB00AD1DBA /* Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCAF051F205FCADA00AD1DBA /* Controller.swift */; };
|
DCAF0522205FCADB00AD1DBA /* Controller.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCAF051F205FCADA00AD1DBA /* Controller.swift */; };
|
||||||
DCAF0523205FCADB00AD1DBA /* ControllerSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = DCAF0521205FCADA00AD1DBA /* ControllerSupport.m */; };
|
DCAF0523205FCADB00AD1DBA /* ControllerSupport.m in Sources */ = {isa = PBXBuildFile; fileRef = DCAF0521205FCADA00AD1DBA /* ControllerSupport.m */; };
|
||||||
@@ -176,6 +178,8 @@
|
|||||||
DC2F174C205DA39600C3021E /* Logger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Logger.m; path = Limelight/Utility/Logger.m; sourceTree = SOURCE_ROOT; };
|
DC2F174C205DA39600C3021E /* Logger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = Logger.m; path = Limelight/Utility/Logger.m; sourceTree = SOURCE_ROOT; };
|
||||||
DC2F174D205DA39600C3021E /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = Limelight/Utility/Utils.h; sourceTree = SOURCE_ROOT; };
|
DC2F174D205DA39600C3021E /* Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = Limelight/Utility/Utils.h; sourceTree = SOURCE_ROOT; };
|
||||||
DC2F1751205DA48D00C3021E /* Limelight-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Limelight-Prefix.pch"; path = "Limelight/Limelight-Prefix.pch"; sourceTree = SOURCE_ROOT; };
|
DC2F1751205DA48D00C3021E /* Limelight-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "Limelight-Prefix.pch"; path = "Limelight/Limelight-Prefix.pch"; sourceTree = SOURCE_ROOT; };
|
||||||
|
DC381F8C206D74F600E0931A /* NetworkTraffic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkTraffic.h; path = "Moonlight macOS/Network/NetworkTraffic.h"; sourceTree = SOURCE_ROOT; };
|
||||||
|
DC381F8D206D74F600E0931A /* NetworkTraffic.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = NetworkTraffic.m; path = "Moonlight macOS/Network/NetworkTraffic.m"; sourceTree = SOURCE_ROOT; };
|
||||||
DC38D53E205ACC360045FE93 /* Control.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Control.h; sourceTree = "<group>"; };
|
DC38D53E205ACC360045FE93 /* Control.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Control.h; sourceTree = "<group>"; };
|
||||||
DC38D53F205ACC360045FE93 /* Control.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Control.m; sourceTree = "<group>"; };
|
DC38D53F205ACC360045FE93 /* Control.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Control.m; sourceTree = "<group>"; };
|
||||||
DC38D544205AD8D00045FE93 /* libstem_gamepad.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libstem_gamepad.a; sourceTree = "<group>"; };
|
DC38D544205AD8D00045FE93 /* libstem_gamepad.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libstem_gamepad.a; sourceTree = "<group>"; };
|
||||||
@@ -288,6 +292,8 @@
|
|||||||
DC6A60852064299700A0673D /* ConnectionHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ConnectionHelper.m; sourceTree = "<group>"; };
|
DC6A60852064299700A0673D /* ConnectionHelper.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ConnectionHelper.m; sourceTree = "<group>"; };
|
||||||
DC7029D4205B28340016D44B /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE.txt; sourceTree = "<group>"; };
|
DC7029D4205B28340016D44B /* LICENSE.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE.txt; sourceTree = "<group>"; };
|
||||||
DC9CD51E20601658001A5DCD /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Limelight/AppDelegate.m; sourceTree = SOURCE_ROOT; };
|
DC9CD51E20601658001A5DCD /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Limelight/AppDelegate.m; sourceTree = SOURCE_ROOT; };
|
||||||
|
DCA3B3F02070EED0006565D9 /* OverlayView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OverlayView.m; sourceTree = "<group>"; };
|
||||||
|
DCA3B3F12070EED0006565D9 /* OverlayView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OverlayView.h; sourceTree = "<group>"; };
|
||||||
DCAF04FD205F38B100AD1DBA /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Limelight/AppDelegate.h; sourceTree = SOURCE_ROOT; };
|
DCAF04FD205F38B100AD1DBA /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Limelight/AppDelegate.h; sourceTree = SOURCE_ROOT; };
|
||||||
DCAF0517205F3E6A00AD1DBA /* Limelight.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Limelight.xcdatamodel; sourceTree = "<group>"; };
|
DCAF0517205F3E6A00AD1DBA /* Limelight.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Limelight.xcdatamodel; sourceTree = "<group>"; };
|
||||||
DCAF0518205F3E6A00AD1DBA /* Moonlight v1.0-2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Moonlight v1.0-2.xcdatamodel"; sourceTree = "<group>"; };
|
DCAF0518205F3E6A00AD1DBA /* Moonlight v1.0-2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Moonlight v1.0-2.xcdatamodel"; sourceTree = "<group>"; };
|
||||||
@@ -391,6 +397,8 @@
|
|||||||
DC2F171C205DA35700C3021E /* Network */ = {
|
DC2F171C205DA35700C3021E /* Network */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
DC381F8C206D74F600E0931A /* NetworkTraffic.h */,
|
||||||
|
DC381F8D206D74F600E0931A /* NetworkTraffic.m */,
|
||||||
DC2F171D205DA35700C3021E /* WakeOnLanManager.m */,
|
DC2F171D205DA35700C3021E /* WakeOnLanManager.m */,
|
||||||
DC2F171E205DA35700C3021E /* ServerInfoResponse.m */,
|
DC2F171E205DA35700C3021E /* ServerInfoResponse.m */,
|
||||||
DC2F171F205DA35700C3021E /* HttpResponse.m */,
|
DC2F171F205DA35700C3021E /* HttpResponse.m */,
|
||||||
@@ -696,6 +704,8 @@
|
|||||||
DCAF13DB20530BE100896C35 /* Input */ = {
|
DCAF13DB20530BE100896C35 /* Input */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
DCA3B3F12070EED0006565D9 /* OverlayView.h */,
|
||||||
|
DCA3B3F02070EED0006565D9 /* OverlayView.m */,
|
||||||
DCAF051F205FCADA00AD1DBA /* Controller.swift */,
|
DCAF051F205FCADA00AD1DBA /* Controller.swift */,
|
||||||
DCAF0520205FCADA00AD1DBA /* ControllerSupport.h */,
|
DCAF0520205FCADA00AD1DBA /* ControllerSupport.h */,
|
||||||
DCAF0521205FCADA00AD1DBA /* ControllerSupport.m */,
|
DCAF0521205FCADA00AD1DBA /* ControllerSupport.m */,
|
||||||
@@ -793,7 +803,7 @@
|
|||||||
DC5EF53D2052FBDB00C9BF55 /* Project object */ = {
|
DC5EF53D2052FBDB00C9BF55 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 0920;
|
LastUpgradeCheck = 0930;
|
||||||
ORGANIZATIONNAME = "Moonlight Game Streaming Project";
|
ORGANIZATIONNAME = "Moonlight Game Streaming Project";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
DC5EF5442052FBDB00C9BF55 = {
|
DC5EF5442052FBDB00C9BF55 = {
|
||||||
@@ -901,10 +911,12 @@
|
|||||||
DC2F1742205DA35700C3021E /* AppListResponse.m in Sources */,
|
DC2F1742205DA35700C3021E /* AppListResponse.m in Sources */,
|
||||||
DC2F1741205DA35700C3021E /* AppAssetResponse.m in Sources */,
|
DC2F1741205DA35700C3021E /* AppAssetResponse.m in Sources */,
|
||||||
DC6A60862064299700A0673D /* ConnectionHelper.m in Sources */,
|
DC6A60862064299700A0673D /* ConnectionHelper.m in Sources */,
|
||||||
|
DC381F8E206D74F600E0931A /* NetworkTraffic.m in Sources */,
|
||||||
DCC23C26205DAC5C00BF3C25 /* Settings.m in Sources */,
|
DCC23C26205DAC5C00BF3C25 /* Settings.m in Sources */,
|
||||||
DCD464E22053417800CC8950 /* StreamFrameViewController.m in Sources */,
|
DCD464E22053417800CC8950 /* StreamFrameViewController.m in Sources */,
|
||||||
DC5EF5582052FBDB00C9BF55 /* main.m in Sources */,
|
DC5EF5582052FBDB00C9BF55 /* main.m in Sources */,
|
||||||
DC2F173A205DA35700C3021E /* WakeOnLanManager.m in Sources */,
|
DC2F173A205DA35700C3021E /* WakeOnLanManager.m in Sources */,
|
||||||
|
DCA3B3F22070EED0006565D9 /* OverlayView.m in Sources */,
|
||||||
DCAF051C205F3E6A00AD1DBA /* Limelight.xcdatamodeld in Sources */,
|
DCAF051C205F3E6A00AD1DBA /* Limelight.xcdatamodeld in Sources */,
|
||||||
DC0F7508205C04A90087B187 /* keepAlive.m in Sources */,
|
DC0F7508205C04A90087B187 /* keepAlive.m in Sources */,
|
||||||
DC2634D4205438DC00D44F88 /* keyboardTranslation.m in Sources */,
|
DC2634D4205438DC00D44F88 /* keyboardTranslation.m in Sources */,
|
||||||
@@ -979,6 +991,7 @@
|
|||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_COMMA = YES;
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
@@ -986,6 +999,7 @@
|
|||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
@@ -1034,6 +1048,7 @@
|
|||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_COMMA = YES;
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
@@ -1041,6 +1056,7 @@
|
|||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
@@ -1065,6 +1081,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
MTL_ENABLE_DEBUG_INFO = NO;
|
MTL_ENABLE_DEBUG_INFO = NO;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
@@ -1076,6 +1093,7 @@
|
|||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = "Moonlight macOS/Moonlight macOS.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "Moonlight macOS/Moonlight macOS.entitlements";
|
||||||
|
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEVELOPMENT_TEAM = DQ6R9YE8BF;
|
DEVELOPMENT_TEAM = DQ6R9YE8BF;
|
||||||
@@ -1105,6 +1123,7 @@
|
|||||||
OTHER_LDFLAGS = "";
|
OTHER_LDFLAGS = "";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight-macOS";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight-macOS";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Moonlight macOS/Input/Moonlight macOS-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Moonlight macOS/Input/Moonlight macOS-Bridging-Header.h";
|
||||||
SWIFT_OBJC_INTERFACE_HEADER_NAME = "Moonlight-Swift.h";
|
SWIFT_OBJC_INTERFACE_HEADER_NAME = "Moonlight-Swift.h";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
@@ -1121,6 +1140,7 @@
|
|||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_ENABLE_MODULES = YES;
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = "Moonlight macOS/Moonlight macOS.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "Moonlight macOS/Moonlight macOS.entitlements";
|
||||||
|
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
DEVELOPMENT_TEAM = DQ6R9YE8BF;
|
DEVELOPMENT_TEAM = DQ6R9YE8BF;
|
||||||
@@ -1154,6 +1174,8 @@
|
|||||||
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
|
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight-macOS";
|
PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight-macOS";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SWIFT_COMPILATION_MODE = wholemodule;
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Moonlight macOS/Input/Moonlight macOS-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Moonlight macOS/Input/Moonlight macOS-Bridging-Header.h";
|
||||||
SWIFT_OBJC_INTERFACE_HEADER_NAME = "Moonlight-Swift.h";
|
SWIFT_OBJC_INTERFACE_HEADER_NAME = "Moonlight-Swift.h";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>IDEDidComputeMac32BitWarning</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
||||||
@@ -160,32 +160,37 @@ void onButtonUp(struct Gamepad_device * device, unsigned int buttonID, double ti
|
|||||||
|
|
||||||
void onAxisMoved(struct Gamepad_device * device, unsigned int axisID, float value, float lastValue, double timestamp, void * context) {
|
void onAxisMoved(struct Gamepad_device * device, unsigned int axisID, float value, float lastValue, double timestamp, void * context) {
|
||||||
if (fabsf(lastValue - value) > 0.01) {
|
if (fabsf(lastValue - value) > 0.01) {
|
||||||
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
|
|
||||||
// The dualshock controller has much more than these axis because of the motion axis, so it
|
// The dualshock controller has much more than these axis because of the motion axis, so it
|
||||||
// is better to call the updateFinished in the cases, because otherwise all of these
|
// is better to call the updateFinished in the cases, because otherwise all of these
|
||||||
// motion axis will also trigger an updateFinished event.
|
// motion axis will also trigger an updateFinished event.
|
||||||
switch (axisID) {
|
switch (axisID) {
|
||||||
case LEFT_X:
|
case LEFT_X:
|
||||||
|
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
|
||||||
_controller.lastLeftStickX = value * 0X7FFE;
|
_controller.lastLeftStickX = value * 0X7FFE;
|
||||||
[_controllerSupport updateFinished:_controller];
|
[_controllerSupport updateFinished:_controller];
|
||||||
break;
|
break;
|
||||||
case LEFT_Y:
|
case LEFT_Y:
|
||||||
|
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
|
||||||
_controller.lastLeftStickY = -value * 0X7FFE;
|
_controller.lastLeftStickY = -value * 0X7FFE;
|
||||||
[_controllerSupport updateFinished:_controller];
|
[_controllerSupport updateFinished:_controller];
|
||||||
break;
|
break;
|
||||||
case RIGHT_X:
|
case RIGHT_X:
|
||||||
|
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
|
||||||
_controller.lastRightStickX = value * 0X7FFE;
|
_controller.lastRightStickX = value * 0X7FFE;
|
||||||
[_controllerSupport updateFinished:_controller];
|
[_controllerSupport updateFinished:_controller];
|
||||||
break;
|
break;
|
||||||
case RIGHT_Y:
|
case RIGHT_Y:
|
||||||
|
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
|
||||||
_controller.lastRightStickY = -value * 0X7FFE;
|
_controller.lastRightStickY = -value * 0X7FFE;
|
||||||
[_controllerSupport updateFinished:_controller];
|
[_controllerSupport updateFinished:_controller];
|
||||||
break;
|
break;
|
||||||
case LT:
|
case LT:
|
||||||
|
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
|
||||||
_controller.lastLeftTrigger = value * 0xFF;
|
_controller.lastLeftTrigger = value * 0xFF;
|
||||||
[_controllerSupport updateFinished:_controller];
|
[_controllerSupport updateFinished:_controller];
|
||||||
break;
|
break;
|
||||||
case RT:
|
case RT:
|
||||||
|
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
|
||||||
_controller.lastRightTrigger = value * 0xFF;
|
_controller.lastRightTrigger = value * 0xFF;
|
||||||
[_controllerSupport updateFinished:_controller];
|
[_controllerSupport updateFinished:_controller];
|
||||||
break;
|
break;
|
||||||
@@ -208,11 +213,11 @@ void onDeviceRemoved(struct Gamepad_device * device, void * context) {
|
|||||||
|
|
||||||
void initGamepad(ControllerSupport* controllerSupport) {
|
void initGamepad(ControllerSupport* controllerSupport) {
|
||||||
_controllerSupport = controllerSupport;
|
_controllerSupport = controllerSupport;
|
||||||
|
_controller = [[Controller alloc] init];
|
||||||
Gamepad_deviceAttachFunc(onDeviceAttached, NULL);
|
Gamepad_deviceAttachFunc(onDeviceAttached, NULL);
|
||||||
Gamepad_deviceRemoveFunc(onDeviceRemoved, NULL);
|
Gamepad_deviceRemoveFunc(onDeviceRemoved, NULL);
|
||||||
Gamepad_buttonDownFunc(onButtonDown, NULL);
|
Gamepad_buttonDownFunc(onButtonDown, NULL);
|
||||||
Gamepad_buttonUpFunc(onButtonUp, NULL);
|
Gamepad_buttonUpFunc(onButtonUp, NULL);
|
||||||
Gamepad_axisMoveFunc(onAxisMoved, NULL);
|
Gamepad_axisMoveFunc(onAxisMoved, NULL);
|
||||||
Gamepad_init();
|
Gamepad_init();
|
||||||
_controller = [[Controller alloc] init];
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// OverlayView.h
|
||||||
|
// Moonlight macOS
|
||||||
|
//
|
||||||
|
// Created by Felix Kratz on 01.04.18.
|
||||||
|
// Copyright © 2018 Felix Kratz. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@interface OverlayView : NSView
|
||||||
|
|
||||||
|
- (id)initWithFrame:(NSRect)frame sender:(StreamView*)sender;
|
||||||
|
- (void)toggleOverlay:(int)codec;
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
//
|
||||||
|
// OverlayView.m
|
||||||
|
// Moonlight macOS
|
||||||
|
//
|
||||||
|
// Created by Felix Kratz on 01.04.18.
|
||||||
|
// Copyright © 2018 Felix Kratz. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "StreamView.h"
|
||||||
|
#import "OverlayView.h"
|
||||||
|
#import "NetworkTraffic.h"
|
||||||
|
|
||||||
|
@implementation OverlayView {
|
||||||
|
StreamView* _streamView;
|
||||||
|
bool statsDisplayed;
|
||||||
|
unsigned long lastNetworkDown;
|
||||||
|
unsigned long lastNetworkUp;
|
||||||
|
NSTextField* _textFieldIncomingBitrate;
|
||||||
|
NSTextField* _textFieldOutgoingBitrate;
|
||||||
|
NSTextField* _textFieldCodec;
|
||||||
|
NSTextField* _textFieldFramerate;
|
||||||
|
NSTextField* _stageLabel;
|
||||||
|
|
||||||
|
NSTimer* _statTimer;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (id)initWithFrame:(NSRect)frame sender:(StreamView*)sender
|
||||||
|
{
|
||||||
|
self = [super initWithFrame:frame];
|
||||||
|
if (self) {
|
||||||
|
_streamView = sender;
|
||||||
|
}
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)initStats {
|
||||||
|
_textFieldCodec = [[NSTextField alloc] initWithFrame:NSMakeRect(5, NSScreen.mainScreen.frame.size.height - 22, 200, 17)];
|
||||||
|
_textFieldIncomingBitrate = [[NSTextField alloc] initWithFrame:NSMakeRect(5, 5, 250, 17)];
|
||||||
|
_textFieldOutgoingBitrate = [[NSTextField alloc] initWithFrame:NSMakeRect(5, 5 + 20, 250, 17)];
|
||||||
|
_textFieldFramerate = [[NSTextField alloc] initWithFrame:NSMakeRect(NSScreen.mainScreen.frame.size.width - 50, NSScreen.mainScreen.frame.size.height - 22, 50, 17)];
|
||||||
|
|
||||||
|
[self setupTextField:_textFieldOutgoingBitrate];
|
||||||
|
[self setupTextField:_textFieldIncomingBitrate];
|
||||||
|
[self setupTextField:_textFieldCodec];
|
||||||
|
[self setupTextField:_textFieldFramerate];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)setupTextField:(NSTextField*)textField {
|
||||||
|
textField.drawsBackground = false;
|
||||||
|
textField.bordered = false;
|
||||||
|
textField.editable = false;
|
||||||
|
textField.alignment = NSTextAlignmentLeft;
|
||||||
|
textField.textColor = [NSColor whiteColor];
|
||||||
|
[self addSubview:textField];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)toggleOverlay:(int)codec {
|
||||||
|
statsDisplayed = !statsDisplayed;
|
||||||
|
if (statsDisplayed) {
|
||||||
|
_streamView.frameCount = 0;
|
||||||
|
if (_textFieldIncomingBitrate == nil || _textFieldCodec == nil || _textFieldOutgoingBitrate == nil || _textFieldFramerate == nil) {
|
||||||
|
[self initStats];
|
||||||
|
}
|
||||||
|
_statTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(statTimerTick) userInfo:nil repeats:true];
|
||||||
|
NSLog(@"display stats");
|
||||||
|
if (codec == 1) {
|
||||||
|
_textFieldCodec.stringValue = @"Codec: H.264";
|
||||||
|
}
|
||||||
|
else if (codec == 256) {
|
||||||
|
_textFieldCodec.stringValue = @"Codec: HEVC/H.265";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_textFieldCodec.stringValue = @"Codec: Unknown";
|
||||||
|
}
|
||||||
|
[self statTimerTick];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
[_statTimer invalidate];
|
||||||
|
_textFieldCodec.stringValue = @"";
|
||||||
|
_textFieldIncomingBitrate.stringValue = @"";
|
||||||
|
_textFieldOutgoingBitrate.stringValue = @"";
|
||||||
|
_textFieldFramerate.stringValue = @"";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)statTimerTick {
|
||||||
|
_textFieldFramerate.stringValue = [NSString stringWithFormat:@"%i fps", _streamView.frameCount];
|
||||||
|
_streamView.frameCount = 0;
|
||||||
|
|
||||||
|
unsigned long currentNetworkDown = getBytesDown();
|
||||||
|
_textFieldIncomingBitrate.stringValue = [NSString stringWithFormat:@"Incoming Bitrate (System): %lu kbps", (currentNetworkDown - lastNetworkDown)*8 / 1000];
|
||||||
|
lastNetworkDown = currentNetworkDown;
|
||||||
|
|
||||||
|
unsigned long currentNetworkUp = getBytesUp();
|
||||||
|
_textFieldOutgoingBitrate.stringValue = [NSString stringWithFormat:@"Outgoing Bitrate (System): %lu kbps", (currentNetworkUp - lastNetworkUp)*8 / 1000];
|
||||||
|
lastNetworkUp = currentNetworkUp;
|
||||||
|
}
|
||||||
|
@end
|
||||||
@@ -8,5 +8,10 @@
|
|||||||
|
|
||||||
@interface StreamView : NSView
|
@interface StreamView : NSView
|
||||||
|
|
||||||
|
- (void)drawMessage:(NSString*)message;
|
||||||
|
|
||||||
|
@property int codec;
|
||||||
|
@property unsigned short frameCount;
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -11,26 +11,27 @@
|
|||||||
#import "DataManager.h"
|
#import "DataManager.h"
|
||||||
#include <ApplicationServices/ApplicationServices.h>
|
#include <ApplicationServices/ApplicationServices.h>
|
||||||
#include "keyboardTranslation.h"
|
#include "keyboardTranslation.h"
|
||||||
|
#import "OverlayView.h"
|
||||||
|
|
||||||
@implementation StreamView {
|
@implementation StreamView {
|
||||||
BOOL isDragging;
|
bool isDragging;
|
||||||
NSTrackingArea *trackingArea;
|
NSTrackingArea* _trackingArea;
|
||||||
|
OverlayView* _overlay;
|
||||||
|
NSTextField* _stageLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) updateTrackingAreas {
|
- (void) updateTrackingAreas {
|
||||||
|
if (_trackingArea != nil) {
|
||||||
// This will be the area used to track the mouse movement
|
[self removeTrackingArea:_trackingArea];
|
||||||
if (trackingArea != nil) {
|
|
||||||
[self removeTrackingArea:trackingArea];
|
|
||||||
}
|
}
|
||||||
NSTrackingAreaOptions options = (NSTrackingActiveAlways | NSTrackingInVisibleRect |
|
NSTrackingAreaOptions options = (NSTrackingActiveAlways | NSTrackingInVisibleRect |
|
||||||
NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved);
|
NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved);
|
||||||
|
|
||||||
trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
|
_trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
|
||||||
options:options
|
options:options
|
||||||
owner:self
|
owner:self
|
||||||
userInfo:nil];
|
userInfo:nil];
|
||||||
[self addTrackingArea:trackingArea];
|
[self addTrackingArea:_trackingArea];
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)mouseDragged:(NSEvent *)event {
|
-(void)mouseDragged:(NSEvent *)event {
|
||||||
@@ -59,24 +60,20 @@
|
|||||||
|
|
||||||
- (void)mouseDown:(NSEvent *)mouseEvent {
|
- (void)mouseDown:(NSEvent *)mouseEvent {
|
||||||
LiSendMouseButtonEvent(BUTTON_ACTION_PRESS, BUTTON_LEFT);
|
LiSendMouseButtonEvent(BUTTON_ACTION_PRESS, BUTTON_LEFT);
|
||||||
[self setNeedsDisplay:YES];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mouseUp:(NSEvent *)mouseEvent {
|
- (void)mouseUp:(NSEvent *)mouseEvent {
|
||||||
isDragging = false;
|
isDragging = false;
|
||||||
LiSendMouseButtonEvent(BUTTON_ACTION_RELEASE, BUTTON_LEFT);
|
LiSendMouseButtonEvent(BUTTON_ACTION_RELEASE, BUTTON_LEFT);
|
||||||
[self setNeedsDisplay:YES];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)rightMouseUp:(NSEvent *)mouseEvent {
|
- (void)rightMouseUp:(NSEvent *)mouseEvent {
|
||||||
isDragging = false;
|
isDragging = false;
|
||||||
LiSendMouseButtonEvent(BUTTON_ACTION_RELEASE, BUTTON_RIGHT);
|
LiSendMouseButtonEvent(BUTTON_ACTION_RELEASE, BUTTON_RIGHT);
|
||||||
[self setNeedsDisplay:YES];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)rightMouseDown:(NSEvent *)mouseEvent {
|
- (void)rightMouseDown:(NSEvent *)mouseEvent {
|
||||||
LiSendMouseButtonEvent(BUTTON_ACTION_PRESS, BUTTON_RIGHT);
|
LiSendMouseButtonEvent(BUTTON_ACTION_PRESS, BUTTON_RIGHT);
|
||||||
[self setNeedsDisplay:YES];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)mouseMoved:(NSEvent *)mouseEvent {
|
- (void)mouseMoved:(NSEvent *)mouseEvent {
|
||||||
@@ -85,22 +82,24 @@
|
|||||||
|
|
||||||
-(void)keyDown:(NSEvent *)event {
|
-(void)keyDown:(NSEvent *)event {
|
||||||
unsigned char keyChar = keyCharFromKeyCode(event.keyCode);
|
unsigned char keyChar = keyCharFromKeyCode(event.keyCode);
|
||||||
printf("DOWN: KeyCode: %hu, keyChar: %d, keyModifier: %lu \n", event.keyCode, keyChar, event.modifierFlags);
|
NSLog(@"DOWN: KeyCode: %hu, keyChar: %d, keyModifier: %lu \n", event.keyCode, keyChar, event.modifierFlags);
|
||||||
|
|
||||||
LiSendKeyboardEvent(keyChar, KEY_ACTION_DOWN, modifierFlagForKeyModifier(event.modifierFlags));
|
LiSendKeyboardEvent(keyChar, KEY_ACTION_DOWN, modifierFlagForKeyModifier(event.modifierFlags));
|
||||||
|
if (event.modifierFlags & kCGEventFlagMaskCommand && event.keyCode == kVK_ANSI_I) {
|
||||||
|
[self toggleStats];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
-(void)keyUp:(NSEvent *)event {
|
-(void)keyUp:(NSEvent *)event {
|
||||||
unsigned char keyChar = keyCharFromKeyCode(event.keyCode);
|
unsigned char keyChar = keyCharFromKeyCode(event.keyCode);
|
||||||
printf("UP: KeyChar: %d \n‚", keyChar);
|
NSLog(@"UP: KeyChar: %d \n‚", keyChar);
|
||||||
LiSendKeyboardEvent(keyChar, KEY_ACTION_UP, modifierFlagForKeyModifier(event.modifierFlags));
|
LiSendKeyboardEvent(keyChar, KEY_ACTION_UP, modifierFlagForKeyModifier(event.modifierFlags));
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)flagsChanged:(NSEvent *)event
|
- (void)flagsChanged:(NSEvent *)event {
|
||||||
{
|
|
||||||
unsigned char keyChar = keyCodeFromModifierKey(event.modifierFlags);
|
unsigned char keyChar = keyCodeFromModifierKey(event.modifierFlags);
|
||||||
if(keyChar) {
|
if(keyChar) {
|
||||||
printf("DOWN: FlagChanged: %hhu \n", keyChar);
|
NSLog(@"DOWN: FlagChanged: %hhu \n", keyChar);
|
||||||
LiSendKeyboardEvent(keyChar, KEY_ACTION_DOWN, 0x00);
|
LiSendKeyboardEvent(keyChar, KEY_ACTION_DOWN, 0x00);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -108,6 +107,33 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)initStageLabel {
|
||||||
|
_stageLabel = [[NSTextField alloc] initWithFrame:NSMakeRect(NSScreen.mainScreen.frame.size.width/2 - 100, NSScreen.mainScreen.frame.size.height/2 - 8, 200, 17)];
|
||||||
|
_stageLabel.drawsBackground = false;
|
||||||
|
_stageLabel.bordered = false;
|
||||||
|
_stageLabel.alignment = NSTextAlignmentCenter;
|
||||||
|
_stageLabel.textColor = [NSColor blackColor];
|
||||||
|
|
||||||
|
[self addSubview:_stageLabel];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)toggleStats {
|
||||||
|
if (_overlay == nil) {
|
||||||
|
_overlay = [[OverlayView alloc] initWithFrame:self.frame sender:self];
|
||||||
|
[self addSubview:_overlay];
|
||||||
|
}
|
||||||
|
[_overlay toggleOverlay:_codec];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)drawMessage:(NSString*)message {
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
if (self->_stageLabel == nil) {
|
||||||
|
[self initStageLabel];
|
||||||
|
}
|
||||||
|
self->_stageLabel.stringValue = message;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
- (BOOL)acceptsFirstResponder {
|
- (BOOL)acceptsFirstResponder {
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
//
|
||||||
|
// NetworkTraffic.h
|
||||||
|
// Moonlight macOS
|
||||||
|
//
|
||||||
|
// Created by Felix Kratz on 28.03.18.
|
||||||
|
// Copyright © 2018 Felix Kratz. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef NetworkTraffic_h
|
||||||
|
#define NetworkTraffic_h
|
||||||
|
|
||||||
|
unsigned long getBytesDown(void);
|
||||||
|
unsigned long getBytesUp(void);
|
||||||
|
|
||||||
|
#endif /* NetworkTraffic_h */
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
//
|
||||||
|
// NetworkTraffic.m
|
||||||
|
// Moonlight macOS
|
||||||
|
//
|
||||||
|
// Created by Felix Kratz on 28.03.18.
|
||||||
|
// Copyright © 2018 Felix Kratz. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "NetworkTraffic.h"
|
||||||
|
#include <ifaddrs.h>
|
||||||
|
#include <net/if.h>
|
||||||
|
|
||||||
|
struct ifaddrs *ifap, *ifa;
|
||||||
|
unsigned long da;
|
||||||
|
|
||||||
|
unsigned long getBytesDown() {
|
||||||
|
da = 0;
|
||||||
|
getifaddrs (&ifap);
|
||||||
|
ifa = ifap;
|
||||||
|
while (ifa != NULL) {
|
||||||
|
if (ifa->ifa_addr->sa_family == AF_LINK) {
|
||||||
|
const struct if_data *ifa_data = (struct if_data *)ifa->ifa_data;
|
||||||
|
if (ifa_data != NULL) {
|
||||||
|
da += ifa_data->ifi_ibytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ifa = ifa->ifa_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
freeifaddrs(ifap);
|
||||||
|
return da;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned long getBytesUp() {
|
||||||
|
da = 0;
|
||||||
|
getifaddrs (&ifap);
|
||||||
|
ifa = ifap;
|
||||||
|
while (ifa != NULL) {
|
||||||
|
if (ifa->ifa_addr->sa_family == AF_LINK) {
|
||||||
|
const struct if_data *ifa_data = (struct if_data *)ifa->ifa_data;
|
||||||
|
if (ifa_data != NULL) {
|
||||||
|
da += ifa_data->ifi_obytes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ifa = ifa->ifa_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
freeifaddrs(ifap);
|
||||||
|
return da;
|
||||||
|
}
|
||||||
@@ -5,7 +5,6 @@
|
|||||||
// Created by Felix Kratz on 31.10.17.
|
// Created by Felix Kratz on 31.10.17.
|
||||||
// Copyright © 2017 Felix Kratz. All rights reserved.
|
// Copyright © 2017 Felix Kratz. All rights reserved.
|
||||||
//
|
//
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#ifndef keepAlive_h
|
#ifndef keepAlive_h
|
||||||
#define keepAlive_h
|
#define keepAlive_h
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
// Copyright © 2018 Felix Kratz. All rights reserved.
|
// Copyright © 2018 Felix Kratz. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#import <Foundation/Foundation.h>
|
|
||||||
#import "keyboardTranslation.h"
|
#import "keyboardTranslation.h"
|
||||||
#import <Limelight.h>
|
#import <Limelight.h>
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,5 @@
|
|||||||
@property (nonatomic) StreamConfiguration* streamConfig;
|
@property (nonatomic) StreamConfiguration* streamConfig;
|
||||||
@property (strong) IBOutlet StreamView *streamView;
|
@property (strong) IBOutlet StreamView *streamView;
|
||||||
@property (weak) IBOutlet NSProgressIndicator *progressIndicator;
|
@property (weak) IBOutlet NSProgressIndicator *progressIndicator;
|
||||||
@property (weak) IBOutlet NSTextField *stageLabel;
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#import "Gamepad.h"
|
#import "Gamepad.h"
|
||||||
#import "keepAlive.h"
|
#import "keepAlive.h"
|
||||||
#import "ControllerSupport.h"
|
#import "ControllerSupport.h"
|
||||||
|
#import "StreamView.h"
|
||||||
|
|
||||||
@interface StreamFrameViewController ()
|
@interface StreamFrameViewController ()
|
||||||
@end
|
@end
|
||||||
@@ -48,11 +49,11 @@
|
|||||||
// Can someone test this?
|
// Can someone test this?
|
||||||
_controllerSupport = [[ControllerSupport alloc] init];
|
_controllerSupport = [[ControllerSupport alloc] init];
|
||||||
|
|
||||||
// The gamepad currently gets polled at 60Hz, this could very well be set as 1/Framerate in the future.
|
// The gamepad currently gets polled at 1/Framerate.
|
||||||
_eventTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/60.0 target:self selector:@selector(eventTimerTick) userInfo:nil repeats:true];
|
_eventTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/_streamConfig.frameRate target:self selector:@selector(eventTimerTick) userInfo:nil repeats:true];
|
||||||
|
|
||||||
// We search for new devices every second.
|
// We search for new devices every 2 seconds.
|
||||||
_searchTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(searchTimerTick) userInfo:nil repeats:true];
|
_searchTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(searchTimerTick) userInfo:nil repeats:true];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)eventTimerTick {
|
- (void)eventTimerTick {
|
||||||
@@ -94,29 +95,31 @@
|
|||||||
|
|
||||||
- (void)connectionStarted {
|
- (void)connectionStarted {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
[_progressIndicator stopAnimation:nil];
|
[self->_progressIndicator stopAnimation:nil];
|
||||||
_progressIndicator.hidden = true;
|
self->_progressIndicator.hidden = true;
|
||||||
_stageLabel.stringValue = @"Waiting for the first frame";
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)connectionTerminated:(long)errorCode {
|
- (void)connectionTerminated:(long)errorCode {
|
||||||
|
[_streamMan stopStream];
|
||||||
|
[self transitionToSetupView:1];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)transitionToSetupView:(long)errorCode {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
NSLog(@"error has occured: %ld", errorCode);
|
|
||||||
NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:@"Mac" bundle:nil];
|
NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:@"Mac" bundle:nil];
|
||||||
ViewController* view = (ViewController*)[storyBoard instantiateControllerWithIdentifier :@"setupFrameVC"];
|
ViewController* view = (ViewController*)[storyBoard instantiateControllerWithIdentifier :@"setupFrameVC"];
|
||||||
[view setError:1];
|
[view setError:errorCode];
|
||||||
self.view.window.contentViewController = view;
|
self.view.window.contentViewController = view;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)setOrigin: (ViewController*) viewController
|
- (void)setOrigin: (ViewController*) viewController {
|
||||||
{
|
|
||||||
_origin = viewController;
|
_origin = viewController;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)displayMessage:(const char *)message {
|
- (void)displayMessage:(const char *)message {
|
||||||
|
//[_streamView drawMessage:[NSString stringWithFormat:@"%s", message]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)displayTransientMessage:(const char *)message {
|
- (void)displayTransientMessage:(const char *)message {
|
||||||
@@ -131,10 +134,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)stageFailed:(const char *)stageName withError:(long)errorCode {
|
- (void)stageFailed:(const char *)stageName withError:(long)errorCode {
|
||||||
|
//[_streamView drawMessage:[NSString stringWithFormat:@"Stage: %s failed with code: %li", stageName, errorCode]];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)stageStarting:(const char *)stageName {
|
- (void)stageStarting:(const char *)stageName {
|
||||||
|
//[_streamView drawMessage:[NSString stringWithFormat:@"%s", stageName]];
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#import <AppKit/AppKit.h>
|
|
||||||
#import "PairManager.h"
|
#import "PairManager.h"
|
||||||
#import "StreamConfiguration.h"
|
#import "StreamConfiguration.h"
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,14 @@
|
|||||||
|
|
||||||
// Do any additional setup after loading the view.
|
// Do any additional setup after loading the view.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)viewWillAppear {
|
||||||
|
[super viewWillAppear];
|
||||||
|
if ([[[NSUserDefaults standardUserDefaults] stringForKey:@"AppleInterfaceStyle"] isEqual: @"Dark"]) {
|
||||||
|
[self.view.window setAppearance:[NSAppearance appearanceNamed:NSAppearanceNameVibrantDark]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
- (void)viewDidAppear {
|
- (void)viewDidAppear {
|
||||||
[super viewDidAppear];
|
[super viewDidAppear];
|
||||||
|
|
||||||
@@ -84,9 +92,9 @@
|
|||||||
|
|
||||||
-(void) showAlert:(NSString*) message {
|
-(void) showAlert:(NSString*) message {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
_alert = [NSAlert new];
|
self->_alert = [NSAlert new];
|
||||||
_alert.messageText = message;
|
self->_alert.messageText = message;
|
||||||
[_alert beginSheetModalForWindow:[self.view window] completionHandler:^(NSInteger result) {
|
[self->_alert beginSheetModalForWindow:[self.view window] completionHandler:^(NSInteger result) {
|
||||||
NSLog(@"Success");
|
NSLog(@"Success");
|
||||||
}];
|
}];
|
||||||
});
|
});
|
||||||
@@ -138,7 +146,7 @@
|
|||||||
_host = _textFieldHost.stringValue;
|
_host = _textFieldHost.stringValue;
|
||||||
HttpManager* hMan = [[HttpManager alloc] initWithHost:_textFieldHost.stringValue
|
HttpManager* hMan = [[HttpManager alloc] initWithHost:_textFieldHost.stringValue
|
||||||
uniqueId:_uniqueId
|
uniqueId:_uniqueId
|
||||||
deviceName:@"roth"
|
deviceName:deviceName
|
||||||
cert:_cert];
|
cert:_cert];
|
||||||
|
|
||||||
ServerInfoResponse* serverInfoResp = [[ServerInfoResponse alloc] init];
|
ServerInfoResponse* serverInfoResp = [[ServerInfoResponse alloc] init];
|
||||||
@@ -152,9 +160,9 @@
|
|||||||
// Polling the server while pairing causes the server to screw up
|
// Polling the server while pairing causes the server to screw up
|
||||||
NSLog(@"Pairing");
|
NSLog(@"Pairing");
|
||||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||||
HttpManager* hMan = [[HttpManager alloc] initWithHost:_host uniqueId:_uniqueId deviceName:deviceName cert:_cert];
|
HttpManager* hMan = [[HttpManager alloc] initWithHost:self->_host uniqueId:self->_uniqueId deviceName:deviceName cert:self->_cert];
|
||||||
PairManager* pMan = [[PairManager alloc] initWithManager:hMan andCert:_cert callback:self];
|
PairManager* pMan = [[PairManager alloc] initWithManager:hMan andCert:self->_cert callback:self];
|
||||||
[_opQueue addOperation:pMan];
|
[self->_opQueue addOperation:pMan];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -174,12 +182,12 @@
|
|||||||
|
|
||||||
- (void)alreadyPaired {
|
- (void)alreadyPaired {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
[_popupButtonSelection setEnabled:true];
|
[self->_popupButtonSelection setEnabled:true];
|
||||||
[_popupButtonSelection setHidden:false];
|
[self->_popupButtonSelection setHidden:false];
|
||||||
[_buttonConnect setEnabled:false];
|
[self->_buttonConnect setEnabled:false];
|
||||||
[_buttonConnect setHidden:true];
|
[self->_buttonConnect setHidden:true];
|
||||||
[_buttonLaunch setEnabled:true];
|
[self->_buttonLaunch setEnabled:true];
|
||||||
[_textFieldHost setEnabled:false];
|
[self->_textFieldHost setEnabled:false];
|
||||||
});
|
});
|
||||||
[self searchForHost:_host];
|
[self searchForHost:_host];
|
||||||
[self updateAppsForHost];
|
[self updateAppsForHost];
|
||||||
@@ -202,8 +210,8 @@
|
|||||||
|
|
||||||
- (void)pairSuccessful {
|
- (void)pairSuccessful {
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
[self.view.window endSheet:_alert.window];
|
[self.view.window endSheet:self->_alert.window];
|
||||||
_alert = nil;
|
self->_alert = nil;
|
||||||
[self alreadyPaired];
|
[self alreadyPaired];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -285,7 +285,7 @@
|
|||||||
FB290E2619B37A4E004C83CF /* Project object */ = {
|
FB290E2619B37A4E004C83CF /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 0920;
|
LastUpgradeCheck = 0930;
|
||||||
ORGANIZATIONNAME = "Moonlight Stream";
|
ORGANIZATIONNAME = "Moonlight Stream";
|
||||||
};
|
};
|
||||||
buildConfigurationList = FB290E2919B37A4E004C83CF /* Build configuration list for PBXProject "moonlight-common_mac" */;
|
buildConfigurationList = FB290E2919B37A4E004C83CF /* Build configuration list for PBXProject "moonlight-common_mac" */;
|
||||||
@@ -355,12 +355,14 @@
|
|||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_COMMA = YES;
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
@@ -390,6 +392,7 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
@@ -409,12 +412,14 @@
|
|||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
CLANG_WARN_COMMA = YES;
|
CLANG_WARN_COMMA = YES;
|
||||||
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
CLANG_WARN_CONSTANT_CONVERSION = YES;
|
||||||
|
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
|
||||||
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
|
||||||
CLANG_WARN_EMPTY_BODY = YES;
|
CLANG_WARN_EMPTY_BODY = YES;
|
||||||
CLANG_WARN_ENUM_CONVERSION = YES;
|
CLANG_WARN_ENUM_CONVERSION = YES;
|
||||||
CLANG_WARN_INFINITE_RECURSION = YES;
|
CLANG_WARN_INFINITE_RECURSION = YES;
|
||||||
CLANG_WARN_INT_CONVERSION = YES;
|
CLANG_WARN_INT_CONVERSION = YES;
|
||||||
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
|
||||||
|
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
|
||||||
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
|
||||||
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
|
||||||
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
|
||||||
@@ -437,6 +442,7 @@
|
|||||||
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
|
||||||
GCC_WARN_UNUSED_FUNCTION = YES;
|
GCC_WARN_UNUSED_FUNCTION = YES;
|
||||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||||
PROVISIONING_PROFILE = "";
|
PROVISIONING_PROFILE = "";
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
@@ -447,7 +453,6 @@
|
|||||||
FB290E3319B37A4E004C83CF /* Debug */ = {
|
FB290E3319B37A4E004C83CF /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = "$(ARCHS_STANDARD)";
|
|
||||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||||
EXECUTABLE_PREFIX = lib;
|
EXECUTABLE_PREFIX = lib;
|
||||||
HEADER_SEARCH_PATHS = (
|
HEADER_SEARCH_PATHS = (
|
||||||
@@ -458,7 +463,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = NO;
|
ONLY_ACTIVE_ARCH = NO;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = macosx10.13;
|
SDKROOT = macosx;
|
||||||
SUPPORTED_PLATFORMS = macosx;
|
SUPPORTED_PLATFORMS = macosx;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
@@ -466,7 +471,6 @@
|
|||||||
FB290E3419B37A4E004C83CF /* Release */ = {
|
FB290E3419B37A4E004C83CF /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ARCHS = "$(ARCHS_STANDARD)";
|
|
||||||
CODE_SIGN_IDENTITY = "Mac Developer";
|
CODE_SIGN_IDENTITY = "Mac Developer";
|
||||||
EXECUTABLE_PREFIX = lib;
|
EXECUTABLE_PREFIX = lib;
|
||||||
GCC_OPTIMIZATION_LEVEL = 0;
|
GCC_OPTIMIZATION_LEVEL = 0;
|
||||||
@@ -478,7 +482,7 @@
|
|||||||
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
ONLY_ACTIVE_ARCH = NO;
|
ONLY_ACTIVE_ARCH = NO;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SDKROOT = macosx10.13;
|
SDKROOT = macosx;
|
||||||
SUPPORTED_PLATFORMS = macosx;
|
SUPPORTED_PLATFORMS = macosx;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
|||||||
Reference in New Issue
Block a user