Remove macOS port

We now have a proper native PC port (Moonlight Qt) and if we
wanted to bring the full iOS app over we can now use Catalyst.
This commit is contained in:
Cameron Gutman
2019-10-21 17:39:48 -07:00
parent 27d95ae0ba
commit 653a72eaf8
56 changed files with 2 additions and 4785 deletions

View File

@@ -6,19 +6,11 @@
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
//
#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) UIWindow *window;
#else
#import <Cocoa/Cocoa.h>
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property (readonly, strong) NSPersistentContainer *persistentContainer;
@property (strong, nonatomic) NSWindow *window;
#endif
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;

View File

@@ -18,13 +18,10 @@ static NSOperationQueue* mainQueue;
#if TARGET_OS_TV
static NSString* DB_NAME = @"Moonlight_tvOS.bin";
#elif TARGET_OS_IPHONE
static NSString* DB_NAME = @"Limelight_iOS.sqlite";
#else
static NSString* DB_NAME = @"moonlight_mac.sqlite";
static NSString* DB_NAME = @"Limelight_iOS.sqlite";
#endif
#if TARGET_OS_IPHONE
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
@@ -58,17 +55,6 @@ static NSString* DB_NAME = @"moonlight_mac.sqlite";
// Saves changes in the application's managed object context before the application terminates.
[self saveContext];
}
#else
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
[self saveContext];
}
#endif
- (void)saveContext
{

View File

@@ -6,10 +6,6 @@
// Copyright (c) 2014 Moonlight Stream. All rights reserved.
//
// Swift
#if !TARGET_OS_IPHONE
#import "Gamepad.h"
#endif
#import "StreamConfiguration.h"
#import "Controller.h"
@@ -19,15 +15,9 @@
-(id) initWithConfig:(StreamConfiguration*)streamConfig;
#if TARGET_OS_IPHONE
-(void) initAutoOnScreenControlMode:(OnScreenControls*)osc;
-(void) cleanup;
-(Controller*) getOscController;
#else
-(void) assignGamepad:(struct Gamepad_device *)gamepad;
-(void) removeGamepad:(struct Gamepad_device *)gamepad;
-(NSMutableDictionary*) getControllers;
#endif
-(void) updateLeftStick:(Controller*)controller x:(short)x y:(short)y;
-(void) updateRightStick:(Controller*)controller x:(short)x y:(short)y;

View File

@@ -10,10 +10,6 @@
#import "Controller.h"
#import "OnScreenControls.h"
#if !TARGET_OS_IPHONE
#import "Gamepad.h"
#import "Control.h"
#endif
#import "DataManager.h"
#include "Limelight.h"
@@ -364,9 +360,7 @@
}
}
#if TARGET_OS_IPHONE
[_osc setLevel:level];
#endif
}
-(void) initAutoOnScreenControlMode:(OnScreenControls*)osc
@@ -402,40 +396,9 @@
}
}
#if TARGET_OS_IPHONE
-(Controller*) getOscController {
return _player0osc;
}
#else
-(NSMutableDictionary*) getControllers {
return _controllers;
}
-(void) assignGamepad:(struct Gamepad_device *)gamepad {
for (int i = 0; i < 4; i++) {
if (!(_controllerNumbers & (1 << i))) {
_controllerNumbers |= (1 << i);
gamepad->deviceID = i;
NSLog(@"Gamepad device id: %u assigned", gamepad->deviceID);
Controller* limeController;
limeController = [[Controller alloc] init];
limeController.playerIndex = i;
[_controllers setObject:limeController forKey:[NSNumber numberWithInteger:i]];
break;
}
}
}
-(void) removeGamepad:(struct Gamepad_device *)gamepad {
_controllerNumbers &= ~(1 << gamepad->deviceID);
Log(LOG_I, @"Unassigning controller index: %ld", (long)gamepad->deviceID);
// Inform the server of the updated active gamepads before removing this controller
[self updateFinished:[_controllers objectForKey:[NSNumber numberWithInteger:gamepad->deviceID]]];
[_controllers removeObjectForKey:[NSNumber numberWithInteger:gamepad->deviceID]];
}
#endif
+(bool) isSupportedGamepad:(GCController*) controller {
return controller.extendedGamepad != nil || controller.gamepad != nil;
@@ -472,7 +435,6 @@
mask = 0x1;
}
#if TARGET_OS_IPHONE
DataManager* dataMan = [[DataManager alloc] init];
OnScreenControlsLevel level = (OnScreenControlsLevel)[[dataMan getSettings].onscreenControls integerValue];
@@ -481,7 +443,6 @@
if (level != OnScreenControlsLevelOff) {
mask |= 0x1;
}
#endif
return mask;
}
@@ -515,14 +476,8 @@
_player0osc = [[Controller alloc] init];
_player0osc.playerIndex = 0;
#if TARGET_OS_IPHONE
DataManager* dataMan = [[DataManager alloc] init];
_oscEnabled = (OnScreenControlsLevel)[[dataMan getSettings].onscreenControls integerValue] != OnScreenControlsLevelOff;
#else
_oscEnabled = false;
initGamepad(self);
Gamepad_detectDevices();
#endif
_rumbleTimer = [NSTimer scheduledTimerWithTimeInterval:0.20
target:self

View File

@@ -25,12 +25,10 @@ typedef NS_ENUM(NSInteger, OnScreenControlsLevel) {
OnScreenControlsLevelAutoGCExtendedGamepadWithStickButtons
};
#if TARGET_OS_IPHONE
- (id) initWithView:(UIView*)view controllerSup:(ControllerSupport*)controllerSupport swipeDelegate:(id<EdgeDetectionDelegate>)edgeDelegate;
- (BOOL) handleTouchDownEvent:(NSSet*)touches;
- (BOOL) handleTouchUpEvent:(NSSet*)touches;
- (BOOL) handleTouchMovedEvent:(NSSet*)touches;
- (void) setLevel:(OnScreenControlsLevel)level;
#endif
@end

View File

@@ -17,12 +17,7 @@
self.statusCode = -1;
}
- (OSImage*) getImage {
#if TARGET_OS_IPHONE
OSImage* appImage = [[OSImage alloc] initWithData:self.data];
#else
OSImage* appImage = nil;
#endif
return appImage;
return [[OSImage alloc] initWithData:self.data];
}
@end

View File

@@ -24,16 +24,12 @@ static const int MAX_ATTEMPTS = 5;
AppAssetResponse* appAssetResp = [[AppAssetResponse alloc] init];
[hMan executeRequestSynchronously:[HttpRequest requestForResponse:appAssetResp withUrlRequest:[hMan newAppAssetRequestWithAppId:self.app.id]]];
#if TARGET_OS_IPHONE
if (appAssetResp.data != nil) {
NSString* boxArtPath = [AppAssetManager boxArtPathForApp:self.app];
[[NSFileManager defaultManager] createDirectoryAtPath:[boxArtPath stringByDeletingLastPathComponent] withIntermediateDirectories:YES attributes:nil error:nil];
[appAssetResp.data writeToFile:boxArtPath atomically:NO];
break;
}
#else
#endif
if (![self isCancelled]) {
[NSThread sleepForTimeInterval:RETRY_DELAY];

View File

@@ -110,7 +110,6 @@ int ArInit(int audioConfiguration, POPUS_MULTISTREAM_CONFIGURATION opusConfig, v
opusConfig->mapping,
&err);
#if TARGET_OS_IPHONE
// Configure the audio session for our app
NSError *audioSessionError = nil;
AVAudioSession* audioSession = [AVAudioSession sharedInstance];
@@ -122,7 +121,6 @@ int ArInit(int audioConfiguration, POPUS_MULTISTREAM_CONFIGURATION opusConfig, v
// FIXME: Calling this breaks surround audio for some reason
//[audioSession setPreferredOutputNumberOfChannels:opusConfig->channelCount error:&audioSessionError];
#endif
OSStatus status;
@@ -203,10 +201,8 @@ void ArCleanup(void)
audioCircularBuffer = NULL;
}
#if TARGET_OS_IPHONE
// Audio session is now inactive
[[AVAudioSession sharedInstance] setActive: NO error: nil];
#endif
}
void ArDecodeAndPlaySample(char* sampleData, int sampleLength)
@@ -358,7 +354,6 @@ void ClConnectionStatusUpdate(int status)
config.allowHevc = YES;
}
#if TARGET_OS_IPHONE
// On iOS 11, we can use HEVC if the server supports encoding it
// and this device has hardware decode for it (A9 and later).
// Additionally, iPhone X had a bug which would cause video
@@ -367,13 +362,6 @@ void ClConnectionStatusUpdate(int status)
if (@available(iOS 11.3, tvOS 11.3, *)) {
_streamConfig.supportsHevc = config.allowHevc && VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC);
}
#else
if (@available(macOS 10.13, *)) {
// Streaming with limited bandwidth will result in better quality with HEVC
if (VTIsHardwareDecodeSupported(kCMVideoCodecType_HEVC) || _streamConfig.streamingRemotely != 0)
_streamConfig.supportsHevc = config.allowHevc;
}
#endif
// HEVC must be supported when HDR is enabled
assert(!_streamConfig.enableHdr || _streamConfig.supportsHevc);

View File

@@ -78,14 +78,12 @@
}
}
#if TARGET_OS_IPHONE
// Set mouse delta factors from the screen resolution and stream size
CGFloat screenScale = [[UIScreen mainScreen] scale];
CGRect screenBounds = [[UIScreen mainScreen] bounds];
CGSize screenSize = CGSizeMake(screenBounds.size.width * screenScale, screenBounds.size.height * screenScale);
[((StreamView*)_renderView) setMouseDeltaFactors:_config.width / screenSize.width
y:_config.height / screenSize.height];
#endif
// Populate the config's version fields from serverinfo
_config.appVersion = appversion;

View File

@@ -75,9 +75,6 @@
- (void)setupWithVideoFormat:(int)videoFormat refreshRate:(int)refreshRate
{
self->videoFormat = videoFormat;
#if !TARGET_OS_IPHONE
_view.codec = videoFormat;
#endif
if (refreshRate > 60) {
// HACK: We seem to just get 60 Hz screen updates even with a 120 FPS stream if
@@ -255,11 +252,7 @@
Log(LOG_I, @"Constructing new HEVC format description");
#if TARGET_OS_IPHONE
if (@available(iOS 11.0, *)) {
#else
if (@available(macOS 10.13, *)) {
#endif
status = CMVideoFormatDescriptionCreateFromHEVCParameterSets(kCFAllocatorDefault,
3, /* count of parameter sets */
parameterSetPointers,
@@ -370,10 +363,6 @@
CFDictionarySetValue(dict, kCMSampleAttachmentKey_DependsOnOthers, kCFBooleanFalse);
}
#if !TARGET_OS_IPHONE
_view.frameCount++;
#endif
// Enqueue video samples on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
// Enqueue the next frame

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:Moonlight macOS.xcodeproj">
</FileRef>
</Workspace>

View File

@@ -1,8 +0,0 @@
<?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>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

View File

@@ -1,68 +0,0 @@
{
"images" : [
{
"size" : "16x16",
"idiom" : "mac",
"filename" : "16x icon.png",
"scale" : "1x"
},
{
"size" : "16x16",
"idiom" : "mac",
"filename" : "32x icon-1.png",
"scale" : "2x"
},
{
"size" : "32x32",
"idiom" : "mac",
"filename" : "32x icon.png",
"scale" : "1x"
},
{
"size" : "32x32",
"idiom" : "mac",
"filename" : "64x icon.png",
"scale" : "2x"
},
{
"size" : "128x128",
"idiom" : "mac",
"filename" : "128x icon.png",
"scale" : "1x"
},
{
"size" : "128x128",
"idiom" : "mac",
"filename" : "256x icon-1.png",
"scale" : "2x"
},
{
"size" : "256x256",
"idiom" : "mac",
"filename" : "256x icon.png",
"scale" : "1x"
},
{
"size" : "256x256",
"idiom" : "mac",
"filename" : "512x icon-1.png",
"scale" : "2x"
},
{
"size" : "512x512",
"idiom" : "mac",
"filename" : "512x icon.png",
"scale" : "1x"
},
{
"size" : "512x512",
"idiom" : "mac",
"filename" : "1024x icon-1.png",
"scale" : "2x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@@ -1,39 +0,0 @@
<?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>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.entertainment</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>NSHighResolutionCapable</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2018 Moonlight Game Streaming Project. All rights reserved.</string>
<key>NSMainStoryboardFile</key>
<string>Mac</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>

View File

@@ -1,17 +0,0 @@
//
// Control.h
// Moonlight macOS
//
// Created by Felix Kratz on 15.03.18.
// Copyright © 2018 Felix Kratz. All rights reserved.
//
#ifndef Control_h
#define Control_h
#include <stdio.h>
#import "ControllerSupport.h"
extern void initGamepad(ControllerSupport* controllerSupport);
#endif /* Control_h */

View File

@@ -1,223 +0,0 @@
//
// Control.m
// Moonlight macOS
//
// Created by Felix Kratz on 15.03.18.
// Copyright © 2018 Felix Kratz. All rights reserved.
//
#include "Gamepad.h"
#include "Control.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "Limelight.h"
#import "Moonlight-Swift.h"
@class Controller;
#ifdef _MSC_VER
#define snprintf _snprintf
#endif
Controller* _controller;
ControllerSupport* _controllerSupport;
NSMutableDictionary* _controllers;
typedef enum {
SELECT,
L3,
R3,
START,
UP,
RIGHT,
DOWN,
LEFT,
LB = 10,
RB,
Y,
B,
A,
X,
} ControllerKeys;
typedef enum {
LEFT_X,
LEFT_Y,
RIGHT_X,
RIGHT_Y,
LT = 14,
RT,
} ControllerAxis;
void onButtonDown(struct Gamepad_device * device, unsigned int buttonID, double timestamp, void * context) {
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
switch (buttonID) {
case SELECT:
[_controllerSupport setButtonFlag:_controller flags:BACK_FLAG];
break;
case L3:
[_controllerSupport setButtonFlag:_controller flags:LS_CLK_FLAG];
break;
case R3:
[_controllerSupport setButtonFlag:_controller flags:RS_CLK_FLAG];
break;
case START:
[_controllerSupport setButtonFlag:_controller flags:PLAY_FLAG];
break;
case UP:
[_controllerSupport setButtonFlag:_controller flags:UP_FLAG];
break;
case RIGHT:
[_controllerSupport setButtonFlag:_controller flags:RIGHT_FLAG];
break;
case DOWN:
[_controllerSupport setButtonFlag:_controller flags:DOWN_FLAG];
break;
case LEFT:
[_controllerSupport setButtonFlag:_controller flags:LEFT_FLAG];
break;
case LB:
[_controllerSupport setButtonFlag:_controller flags:LB_FLAG];
break;
case RB:
[_controllerSupport setButtonFlag:_controller flags:RB_FLAG];
break;
case Y:
[_controllerSupport setButtonFlag:_controller flags:Y_FLAG];
break;
case B:
[_controllerSupport setButtonFlag:_controller flags:B_FLAG];
break;
case A:
[_controllerSupport setButtonFlag:_controller flags:A_FLAG];
break;
case X:
[_controllerSupport setButtonFlag:_controller flags:X_FLAG];
break;
default:
break;
}
[_controllerSupport updateFinished:_controller];
}
void onButtonUp(struct Gamepad_device * device, unsigned int buttonID, double timestamp, void * context) {
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
switch (buttonID) {
case SELECT:
[_controllerSupport clearButtonFlag:_controller flags:BACK_FLAG];
break;
case L3:
[_controllerSupport clearButtonFlag:_controller flags:LS_CLK_FLAG];
break;
case R3:
[_controllerSupport clearButtonFlag:_controller flags:RS_CLK_FLAG];
break;
case START:
[_controllerSupport clearButtonFlag:_controller flags:PLAY_FLAG];
break;
case UP:
[_controllerSupport clearButtonFlag:_controller flags:UP_FLAG];
break;
case RIGHT:
[_controllerSupport clearButtonFlag:_controller flags:RIGHT_FLAG];
break;
case DOWN:
[_controllerSupport clearButtonFlag:_controller flags:DOWN_FLAG];
break;
case LEFT:
[_controllerSupport clearButtonFlag:_controller flags:LEFT_FLAG];
break;
case LB:
[_controllerSupport clearButtonFlag:_controller flags:LB_FLAG];
break;
case RB:
[_controllerSupport clearButtonFlag:_controller flags:RB_FLAG];
break;
case Y:
[_controllerSupport clearButtonFlag:_controller flags:Y_FLAG];
break;
case B:
[_controllerSupport clearButtonFlag:_controller flags:B_FLAG];
break;
case A:
[_controllerSupport clearButtonFlag:_controller flags:A_FLAG];
break;
case X:
[_controllerSupport clearButtonFlag:_controller flags:X_FLAG];
break;
default:
break;
}
[_controllerSupport updateFinished:_controller];
}
void onAxisMoved(struct Gamepad_device * device, unsigned int axisID, float value, float lastValue, double timestamp, void * context) {
if (fabsf(lastValue - value) > 0.01) {
// 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
// motion axis will also trigger an updateFinished event.
switch (axisID) {
case LEFT_X:
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
_controller.lastLeftStickX = value * 0X7FFE;
[_controllerSupport updateFinished:_controller];
break;
case LEFT_Y:
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
_controller.lastLeftStickY = -value * 0X7FFE;
[_controllerSupport updateFinished:_controller];
break;
case RIGHT_X:
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
_controller.lastRightStickX = value * 0X7FFE;
[_controllerSupport updateFinished:_controller];
break;
case RIGHT_Y:
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
_controller.lastRightStickY = -value * 0X7FFE;
[_controllerSupport updateFinished:_controller];
break;
case LT:
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
_controller.lastLeftTrigger = value * 0xFF;
[_controllerSupport updateFinished:_controller];
break;
case RT:
_controller = [_controllers objectForKey:[NSNumber numberWithInteger:device->deviceID]];
_controller.lastRightTrigger = value * 0xFF;
[_controllerSupport updateFinished:_controller];
break;
default:
break;
}
}
}
void onDeviceAttached(struct Gamepad_device * device, void * context) {
[_controllerSupport assignGamepad:device];
_controllers = [_controllerSupport getControllers];
}
void onDeviceRemoved(struct Gamepad_device * device, void * context) {
[_controllerSupport removeGamepad:device];
_controllers = [_controllerSupport getControllers];
}
void initGamepad(ControllerSupport* controllerSupport) {
_controllerSupport = controllerSupport;
_controller = [[Controller alloc] init];
Gamepad_deviceAttachFunc(onDeviceAttached, NULL);
Gamepad_deviceRemoveFunc(onDeviceRemoved, NULL);
Gamepad_buttonDownFunc(onButtonDown, NULL);
Gamepad_buttonUpFunc(onButtonUp, NULL);
Gamepad_axisMoveFunc(onAxisMoved, NULL);
Gamepad_init();
}

View File

@@ -1,4 +0,0 @@
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//

View File

@@ -1,16 +0,0 @@
//
// 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

View File

@@ -1,98 +0,0 @@
//
// 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

View File

@@ -1,17 +0,0 @@
//
// StreamView.h
// Moonlight macOS
//
// Created by Felix Kratz on 10.03.18.
// Copyright (c) 2018 Felix Kratz. All rights reserved.
//
@interface StreamView : NSView
- (void)drawMessage:(NSString*)message;
@property int codec;
@property unsigned short frameCount;
@end

View File

@@ -1,140 +0,0 @@
//
// StreamView.m
// Moonlight macOS
//
// Created by Felix Kratz on 10.3.18.
// Copyright (c) 2018 Felix Kratz. All rights reserved.
//
#import "StreamView.h"
#include <Limelight.h>
#import "DataManager.h"
#include <ApplicationServices/ApplicationServices.h>
#include "keyboardTranslation.h"
#import "OverlayView.h"
@implementation StreamView {
bool isDragging;
NSTrackingArea* _trackingArea;
OverlayView* _overlay;
NSTextField* _stageLabel;
}
- (void) updateTrackingAreas {
if (_trackingArea != nil) {
[self removeTrackingArea:_trackingArea];
}
NSTrackingAreaOptions options = (NSTrackingActiveAlways | NSTrackingInVisibleRect |
NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved);
_trackingArea = [[NSTrackingArea alloc] initWithRect:[self bounds]
options:options
owner:self
userInfo:nil];
[self addTrackingArea:_trackingArea];
}
-(void)mouseDragged:(NSEvent *)event {
if (isDragging) {
[self mouseMoved:event];
}
else {
[self mouseDown:event];
isDragging = true;
}
}
-(void)rightMouseDragged:(NSEvent *)event {
if (isDragging) {
[self mouseMoved:event];
}
else {
[self rightMouseDown:event];
isDragging = true;
}
}
-(void)scrollWheel:(NSEvent *)event {
LiSendScrollEvent(event.scrollingDeltaY);
}
- (void)mouseDown:(NSEvent *)mouseEvent {
LiSendMouseButtonEvent(BUTTON_ACTION_PRESS, BUTTON_LEFT);
}
- (void)mouseUp:(NSEvent *)mouseEvent {
isDragging = false;
LiSendMouseButtonEvent(BUTTON_ACTION_RELEASE, BUTTON_LEFT);
}
- (void)rightMouseUp:(NSEvent *)mouseEvent {
isDragging = false;
LiSendMouseButtonEvent(BUTTON_ACTION_RELEASE, BUTTON_RIGHT);
}
- (void)rightMouseDown:(NSEvent *)mouseEvent {
LiSendMouseButtonEvent(BUTTON_ACTION_PRESS, BUTTON_RIGHT);
}
- (void)mouseMoved:(NSEvent *)mouseEvent {
LiSendMouseMoveEvent(mouseEvent.deltaX, mouseEvent.deltaY);
}
-(void)keyDown:(NSEvent *)event {
unsigned char keyChar = keyCharFromKeyCode(event.keyCode);
NSLog(@"DOWN: KeyCode: %hu, keyChar: %d, keyModifier: %lu \n", event.keyCode, keyChar, 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 {
unsigned char keyChar = keyCharFromKeyCode(event.keyCode);
NSLog(@"UP: KeyChar: %d \n", keyChar);
LiSendKeyboardEvent(keyChar, KEY_ACTION_UP, modifierFlagForKeyModifier(event.modifierFlags));
}
- (void)flagsChanged:(NSEvent *)event {
unsigned char keyChar = keyCodeFromModifierKey(event.modifierFlags);
if(keyChar) {
NSLog(@"DOWN: FlagChanged: %hhu \n", keyChar);
LiSendKeyboardEvent(keyChar, KEY_ACTION_DOWN, 0x00);
}
else {
LiSendKeyboardEvent(58, KEY_ACTION_UP, 0x00);
}
}
- (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 {
return YES;
}
@end

View File

@@ -1,18 +0,0 @@
<?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>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.device.bluetooth</key>
<true/>
<key>com.apple.security.device.usb</key>
<true/>
<key>com.apple.security.files.user-selected.read-only</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>
</dict>
</plist>

View File

@@ -1,15 +0,0 @@
//
// 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 */

View File

@@ -1,50 +0,0 @@
//
// 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;
}

View File

@@ -1,19 +0,0 @@
//
// keepAlive.h
// LittleHelper
//
// Created by Felix Kratz on 31.10.17.
// Copyright © 2017 Felix Kratz. All rights reserved.
//
#ifndef keepAlive_h
#define keepAlive_h
@interface keepAlive : NSObject
+(void) keepSystemAlive;
+(void) allowSleep;
@end
#endif /* keepAlive_h */

View File

@@ -1,30 +0,0 @@
//
// keepAlive.m
// LittleHelper
//
// Created by Felix Kratz on 31.10.17.
// Copyright © 2017 Felix Kratz. All rights reserved.
//
#import <Foundation/Foundation.h>
#import <IOKit/pwr_mgt/IOPMLib.h>
#import "keepAlive.h"
@implementation keepAlive
CFStringRef reasonForActivity= CFSTR("Moonlight keeps the system awake");
IOPMAssertionID assertionID;
+(void) keepSystemAlive
{
IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep,
kIOPMAssertionLevelOn, reasonForActivity, &assertionID);
}
+(void) allowSleep
{
IOPMAssertionRelease(assertionID);
}
@end

View File

@@ -1,18 +0,0 @@
//
// keyboardTranslation.h
// Moonlight macOS
//
// Created by Felix Kratz on 10.03.18.
// Copyright © 2018 Felix Kratz. All rights reserved.
//
#include <CoreFoundation/CoreFoundation.h>
#include <Carbon/Carbon.h>
#ifndef keyboardTranslation_h
#define keyboardTranslation_h
CGKeyCode keyCharFromKeyCode(CGKeyCode keyCode);
CGKeyCode keyCodeFromModifierKey(NSEventModifierFlags keyModifier);
char modifierFlagForKeyModifier(NSEventModifierFlags keyModifier);
#endif /* keyboardTranslation_h */

View File

@@ -1,142 +0,0 @@
//
// keyboardTranslation.m
// Moonlight macOS
//
// Created by Felix Kratz on 10.03.18.
// Copyright © 2018 Felix Kratz. All rights reserved.
//
#import "keyboardTranslation.h"
#import <Limelight.h>
typedef enum {
NOKEY,
VK_BACKSPACE = 0x08,
VK_TAB = 0x09,
VK_ENTER = 0x0D,
VK_SPACE = 0x20,
VK_LEFT = 0x25,
VK_UP,
VK_RIGHT,
VK_DOWN,
VK_SHIFT = 0xA0,
VK_CTRL = 0xA2,
VK_ALT = 0xA4,
VK_COMMA = 0xBC,
VK_MINUS = 0xBD,
VK_PERIOD = 0xBE,
VK_ESC = 0x1B,
VK_F1 = 0x70,
VK_F2,
VK_F3,
VK_F4,
VK_F5,
VK_F6,
VK_F7,
VK_F8,
VK_F9,
VK_F10,
VK_F11,
VK_F12,
VK_F13,
VK_F14,
VK_F15,
VK_DEL = 0x7F,
} SpecialKeyCodes;
CGKeyCode keyCodeFromModifierKey(NSEventModifierFlags keyModifier) {
if (keyModifier & kCGEventFlagMaskShift) {
return VK_SHIFT;
}
if (keyModifier & kCGEventFlagMaskAlternate) {
return VK_ALT;
}
if (keyModifier & kCGEventFlagMaskControl) {
return VK_CTRL;
}
return NOKEY;
}
char modifierFlagForKeyModifier(NSEventModifierFlags keyModifier) {
if (keyModifier & kCGEventFlagMaskShift) {
return MODIFIER_SHIFT;
}
if (keyModifier & kCGEventFlagMaskAlternate) {
return MODIFIER_ALT;
}
if (keyModifier & kCGEventFlagMaskControl) {
return MODIFIER_CTRL;
}
return NOKEY;
}
CGKeyCode keyCharFromKeyCode(CGKeyCode keyCode) {
switch (keyCode) {
case kVK_ANSI_A: return 'A';
case kVK_ANSI_S: return 'S';
case kVK_ANSI_D: return 'D';
case kVK_ANSI_F: return 'F';
case kVK_ANSI_H: return 'H';
case kVK_ANSI_G: return 'G';
case kVK_ANSI_Y: return 'Y';
case kVK_ANSI_X: return 'X';
case kVK_ANSI_C: return 'C';
case kVK_ANSI_V: return 'V';
case kVK_ANSI_B: return 'B';
case kVK_ANSI_Q: return 'Q';
case kVK_ANSI_W: return 'W';
case kVK_ANSI_E: return 'E';
case kVK_ANSI_R: return 'R';
case kVK_ANSI_Z: return 'Z';
case kVK_ANSI_T: return 'T';
case kVK_ANSI_1: return '1';
case kVK_ANSI_2: return '2';
case kVK_ANSI_3: return '3';
case kVK_ANSI_4: return '4';
case kVK_ANSI_6: return '6';
case kVK_ANSI_5: return '5';
case kVK_ANSI_9: return '9';
case kVK_ANSI_7: return '7';
case kVK_ANSI_8: return '8';
case kVK_ANSI_0: return '0';
case kVK_ANSI_O: return 'O';
case kVK_ANSI_U: return 'U';
case kVK_ANSI_I: return 'I';
case kVK_ANSI_P: return 'P';
case kVK_ANSI_L: return 'L';
case kVK_ANSI_J: return 'J';
case kVK_ANSI_K: return 'K';
case kVK_ANSI_N: return 'N';
case kVK_ANSI_M: return 'M';
case kVK_Return: return VK_ENTER;
case kVK_ANSI_Period: return VK_PERIOD;
case kVK_ANSI_Comma: return VK_COMMA;
case kVK_ANSI_Minus: return VK_MINUS;
case kVK_Tab: return VK_TAB;
case kVK_Space: return VK_SPACE;
case kVK_Delete: return VK_BACKSPACE;
case kVK_Escape: return VK_ESC;
case kVK_F1: return VK_F1;
case kVK_F2: return VK_F2;
case kVK_F3: return VK_F3;
case kVK_F4: return VK_F4;
case kVK_F5: return VK_F5;
case kVK_F6: return VK_F6;
case kVK_F7: return VK_F7;
case kVK_F8: return VK_F8;
case kVK_F9: return VK_F9;
case kVK_F10: return VK_F10;
case kVK_F11: return VK_F11;
case kVK_F12: return VK_F12;
case kVK_F13: return VK_F13;
case kVK_F14: return VK_F14;
case kVK_F15: return VK_F15;
case kVK_LeftArrow: return VK_LEFT;
case kVK_RightArrow: return VK_RIGHT;
case kVK_DownArrow: return VK_DOWN;
case kVK_UpArrow: return VK_UP;
default:
return NOKEY;
}
}

View File

@@ -1,23 +0,0 @@
//
// SettingsViewController.h
// Moonlight macOS
//
// Created by Felix Kratz on 11.03.18.
// Copyright © 2018 Felix Kratz. All rights reserved.
//
#import <Cocoa/Cocoa.h>
@interface SettingsViewController : NSViewController
@property (weak) IBOutlet NSTextField *textFieldResolutionHeight;
@property (weak) IBOutlet NSTextField *textFieldResolutionWidth;
@property (weak) IBOutlet NSTextField *textFieldBitrate;
@property (weak) IBOutlet NSTextField *textFieldFPS;
@property (weak) IBOutlet NSButton *buttonStreamingRemotelyToggle;
- (NSString*) getCurrentHost;
- (NSInteger) getChosenBitrate;
- (NSInteger) getChosenStreamWidth;
- (NSInteger) getChosenStreamHeight;
- (NSInteger) getChosenFrameRate;
- (NSInteger) getRemoteOptions;
@end

View File

@@ -1,71 +0,0 @@
//
// SettingsViewController.m
// Moonlight macOS
//
// Created by Felix Kratz on 11.03.18.
// Copyright © 2018 Felix Kratz. All rights reserved.
//
#import "SettingsViewController.h"
#import "DataManager.h"
@interface SettingsViewController ()
@end
@implementation SettingsViewController
NSString* host;
- (void)viewDidLoad {
[super viewDidLoad];
[self loadSettings];
// Do view setup here.
}
- (void) controlTextDidChange:(NSNotification *)obj {
//[self saveSettings];
}
- (NSInteger) getRemoteOptions {
return _buttonStreamingRemotelyToggle.state == NSOnState ? 1 : 0;
}
- (NSInteger) getChosenFrameRate {
return _textFieldFPS.integerValue;
}
- (NSInteger) getChosenStreamHeight {
return _textFieldResolutionHeight.integerValue;
}
- (NSInteger) getChosenStreamWidth {
return _textFieldResolutionWidth.integerValue;
}
- (NSInteger) getChosenBitrate {
return _textFieldBitrate.integerValue;
}
- (void) loadSettings {
DataManager* dataMan = [[DataManager alloc] init];
TemporarySettings* currentSettings = [dataMan getSettings];
// Bitrate is persisted in kbps
_textFieldBitrate.integerValue = [currentSettings.bitrate integerValue];
_textFieldFPS.integerValue = [currentSettings.framerate integerValue];
_textFieldResolutionHeight.integerValue = [currentSettings.height integerValue];
_textFieldResolutionWidth.integerValue = [currentSettings.width integerValue];
_buttonStreamingRemotelyToggle.state = [currentSettings.streamingRemotely integerValue] == 0 ? NSOffState: NSOnState;
}
- (void)didReceiveMemoryWarning {
// Dispose of any resources that can be recreated.
}
-(NSString*) getCurrentHost {
return host;
}
@end

View File

@@ -1,25 +0,0 @@
//
// StreamFrameViewController.h
// Moonlight macOS
//
// Created by Felix Kratz on 09.03.18.
// Copyright © 2018 Felix Kratz. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "Connection.h"
#import "StreamConfiguration.h"
#import "StreamView.h"
#import "ViewController.h"
@interface StreamFrameViewController : NSViewController <ConnectionCallbacks>
- (ViewController*) _origin;
- (void)setOrigin: (ViewController*) viewController;
@property (nonatomic) StreamConfiguration* streamConfig;
@property (strong) IBOutlet StreamView *streamView;
@property (weak) IBOutlet NSProgressIndicator *progressIndicator;
@end

View File

@@ -1,144 +0,0 @@
//
// StreamFrameViewController.m
// Moonlight macOS
//
// Created by Felix Kratz on 09.03.18.
// Copyright © 2018 Felix Kratz. All rights reserved.
//
#import "StreamFrameViewController.h"
#import "VideoDecoderRenderer.h"
#import "StreamManager.h"
#import "Gamepad.h"
#import "keepAlive.h"
#import "ControllerSupport.h"
#import "StreamView.h"
@interface StreamFrameViewController ()
@end
@implementation StreamFrameViewController {
StreamManager *_streamMan;
StreamConfiguration *_streamConfig;
NSTimer* _eventTimer;
NSTimer* _searchTimer;
ViewController* _origin;
ControllerSupport* _controllerSupport;
}
-(ViewController*) _origin {
return _origin;
}
- (void)viewDidLoad {
[super viewDidLoad];
[keepAlive keepSystemAlive];
self.streamConfig = _streamConfig;
_streamMan = [[StreamManager alloc] initWithConfig:self.streamConfig
renderView:self.view
connectionCallbacks:self];
NSOperationQueue* opQueue = [[NSOperationQueue alloc] init];
[opQueue addOperation:_streamMan];
// Initialize the controllers (GC and IOHID)
// I have not tested it, but i think there will be a bug, when mixing GC and IOHID Controllers, because all GCControllers also register as IOHID Controllers.
// To fix this, we need to get the IOHIDDeviceRef for the GCController and compare it with every IOHID Controller.
// This shouldn't be a problem as long as this will not be put on the mac app store, as the IOHIDDeviceRef is a private field.
// The other "fix" would be to disable explicit GC support for the mac version for now.
// Can someone test this?
_controllerSupport = [[ControllerSupport alloc] init];
// The gamepad currently gets polled at 1/Framerate.
_eventTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/_streamConfig.frameRate target:self selector:@selector(eventTimerTick) userInfo:nil repeats:true];
// We search for new devices every 2 seconds.
_searchTimer = [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(searchTimerTick) userInfo:nil repeats:true];
}
- (void)eventTimerTick {
Gamepad_processEvents();
}
- (void)searchTimerTick {
Gamepad_detectDevices();
}
- (void) viewDidAppear {
[super viewDidAppear];
// Hide the cursor and disconnect it from the mouse movement
[NSCursor hide];
CGAssociateMouseAndMouseCursorPosition(false);
//During the setup the window should not be resizable, but to use the fullscreen feature of macOS it has to be resizable.
[self.view.window setStyleMask:[self.view.window styleMask] | NSWindowStyleMaskResizable];
if (self.view.bounds.size.height != NSScreen.mainScreen.frame.size.height || self.view.bounds.size.width != NSScreen.mainScreen.frame.size.width) {
[self.view.window toggleFullScreen:self];
}
[_progressIndicator startAnimation:nil];
[_origin dismissController:nil];
_origin = nil;
}
-(void)viewWillDisappear {
[NSCursor unhide];
[keepAlive allowSleep];
[_streamMan stopStream];
CGAssociateMouseAndMouseCursorPosition(true);
if (self.view.bounds.size.height == NSScreen.mainScreen.frame.size.height && self.view.bounds.size.width == NSScreen.mainScreen.frame.size.width) {
[self.view.window toggleFullScreen:self];
[self.view.window setStyleMask:[self.view.window styleMask] & ~NSWindowStyleMaskResizable];
}
}
- (void)connectionStarted {
dispatch_async(dispatch_get_main_queue(), ^{
[self->_progressIndicator stopAnimation:nil];
self->_progressIndicator.hidden = true;
});
}
- (void)connectionTerminated:(long)errorCode {
[_streamMan stopStream];
[self transitionToSetupView:1];
}
- (void)transitionToSetupView:(long)errorCode {
dispatch_async(dispatch_get_main_queue(), ^{
NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:@"Mac" bundle:nil];
ViewController* view = (ViewController*)[storyBoard instantiateControllerWithIdentifier :@"setupFrameVC"];
[view setError:errorCode];
self.view.window.contentViewController = view;
});
}
- (void)setOrigin: (ViewController*) viewController {
_origin = viewController;
}
- (void)displayMessage:(const char *)message {
//[_streamView drawMessage:[NSString stringWithFormat:@"%s", message]];
}
- (void)displayTransientMessage:(const char *)message {
}
- (void)launchFailed:(NSString *)message {
}
- (void)stageComplete:(const char *)stageName {
}
- (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 {
//[_streamView drawMessage:[NSString stringWithFormat:@"%s", stageName]];
}
@end

View File

@@ -1,34 +0,0 @@
//
// ViewController.h
// Moonlight macOS
//
// Created by Felix Kratz on 09.03.18.
// Copyright © 2018 Felix Kratz. All rights reserved.
//
#import <Cocoa/Cocoa.h>
#import "PairManager.h"
#import "StreamConfiguration.h"
@interface ViewController : NSViewController <PairCallback, NSURLConnectionDelegate>
- (IBAction)buttonLaunchPressed:(id)sender;
- (IBAction)textFieldAction:(id)sender;
- (IBAction)buttonConnectPressed:(id)sender;
- (IBAction)buttonSettingsPressed:(id)sender;
- (IBAction)popupButtonSelectionPressed:(id)sender;
- (void)setError:(long)errorCode;
- (long) error;
@property (weak) IBOutlet NSLayoutConstraint *layoutConstraintSetupFrame;
@property (weak) IBOutlet NSButton *buttonConnect;
@property (weak) IBOutlet NSTextField *textFieldHost;
@property (weak) IBOutlet NSButton *buttonSettings;
@property (weak) IBOutlet NSButton *buttonLaunch;
@property (weak) IBOutlet NSPopUpButton *popupButtonSelection;
@property (weak) IBOutlet NSView *containerViewController;
@end

View File

@@ -1,236 +0,0 @@
//
// ViewController.m
// Moonlight macOS
//
// Created by Felix Kratz on 09.03.18.
// Copyright © 2018 Felix Kratz. All rights reserved.
//
#import "ViewController.h"
#import "CryptoManager.h"
#import "HttpManager.h"
#import "Connection.h"
#import "StreamManager.h"
#import "Utils.h"
#import "DataManager.h"
#import "TemporarySettings.h"
#import "WakeOnLanManager.h"
#import "AppListResponse.h"
#import "ServerInfoResponse.h"
#import "StreamFrameViewController.h"
#import "TemporaryApp.h"
#import "IdManager.h"
#import "SettingsViewController.h"
#import "ConnectionHelper.h"
@implementation ViewController{
NSOperationQueue* _opQueue;
TemporaryHost* _selectedHost;
NSString* _uniqueId;
NSData* _cert;
StreamConfiguration* _streamConfig;
NSArray* _sortedAppList;
NSSet* _appList;
NSString* _host;
SettingsViewController *_settingsView;
CGFloat settingsFrameHeight;
bool showSettings;
NSAlert* _alert;
long error;
}
- (long)error {
return error;
}
- (void)setError:(long)errorCode {
error = errorCode;
}
- (void)viewDidLoad {
[super viewDidLoad];
[CryptoManager generateKeyPairUsingSSl];
_uniqueId = [IdManager getUniqueId];
_cert = [CryptoManager readCertFromFile];
_opQueue = [[NSOperationQueue alloc] init];
// 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 {
[super viewDidAppear];
if (self.view.bounds.size.height == NSScreen.mainScreen.frame.size.height && self.view.bounds.size.width == NSScreen.mainScreen.frame.size.width)
{
[self.view.window toggleFullScreen:self];
[self.view.window setStyleMask:[self.view.window styleMask] & ~NSWindowStyleMaskResizable];
return;
}
[_buttonLaunch setEnabled:false];
[_popupButtonSelection removeAllItems];
_settingsView = [self.childViewControllers lastObject];
if (_settingsView.getCurrentHost != nil)
_textFieldHost.stringValue = _settingsView.getCurrentHost;
settingsFrameHeight = _layoutConstraintSetupFrame.constant;
_layoutConstraintSetupFrame.constant = 0;
showSettings = false;
if (error != 0) {
[self showAlert:[NSString stringWithFormat: @"The connection terminated."]];
}
}
-(void) showAlert:(NSString*) message {
dispatch_async(dispatch_get_main_queue(), ^{
self->_alert = [NSAlert new];
self->_alert.messageText = message;
[self->_alert beginSheetModalForWindow:[self.view window] completionHandler:^(NSInteger result) {
NSLog(@"Success");
}];
});
}
- (void)setRepresentedObject:(id)representedObject {
[super setRepresentedObject:representedObject];
// Update the view, if already loaded.
}
- (void) saveSettings {
DataManager* dataMan = [[DataManager alloc] init];
NSInteger framerate = [_settingsView getChosenFrameRate];
NSInteger height = [_settingsView getChosenStreamHeight];
NSInteger width = [_settingsView getChosenStreamWidth];
NSInteger streamingRemotely = [_settingsView getRemoteOptions];
NSInteger bitrate = [_settingsView getChosenBitrate];
[dataMan saveSettingsWithBitrate:bitrate framerate:framerate height:height width:width
onscreenControls:0 remote:streamingRemotely];
}
- (void)controlTextDidChange:(NSNotification *)obj {
}
- (IBAction)buttonLaunchPressed:(id)sender {
[self saveSettings];
DataManager* dataMan = [[DataManager alloc] init];
TemporarySettings* streamSettings = [dataMan getSettings];
_streamConfig = [[StreamConfiguration alloc] init];
_streamConfig.frameRate = [streamSettings.framerate intValue];
_streamConfig.bitRate = [streamSettings.bitrate intValue];
_streamConfig.height = [streamSettings.height intValue];
_streamConfig.width = [streamSettings.width intValue];
_streamConfig.streamingRemotely = [streamSettings.streamingRemotely intValue];
_streamConfig.host = _textFieldHost.stringValue;
_streamConfig.appID = [_sortedAppList[_popupButtonSelection.indexOfSelectedItem] id];
[self transitionToStreamView];
}
- (IBAction)textFieldAction:(id)sender {
[self buttonConnectPressed:self];
}
- (IBAction)buttonConnectPressed:(id)sender {
_host = _textFieldHost.stringValue;
HttpManager* hMan = [[HttpManager alloc] initWithHost:_textFieldHost.stringValue
uniqueId:_uniqueId
deviceName:deviceName
cert:_cert];
ServerInfoResponse* serverInfoResp = [[ServerInfoResponse alloc] init];
[hMan executeRequestSynchronously:[HttpRequest requestForResponse:serverInfoResp withUrlRequest:[hMan newServerInfoRequest]
fallbackError:401 fallbackRequest:[hMan newHttpServerInfoRequest]]];
if ([[serverInfoResp getStringTag:@"PairStatus"] isEqualToString:@"1"]) {
NSLog(@"alreadyPaired");
[self alreadyPaired];
} else {
// Polling the server while pairing causes the server to screw up
NSLog(@"Pairing");
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
HttpManager* hMan = [[HttpManager alloc] initWithHost:self->_host uniqueId:self->_uniqueId deviceName:deviceName cert:self->_cert];
PairManager* pMan = [[PairManager alloc] initWithManager:hMan andCert:self->_cert callback:self];
[self->_opQueue addOperation:pMan];
});
}
}
- (IBAction)buttonSettingsPressed:(id)sender {
showSettings = !showSettings;
if(showSettings) {
_layoutConstraintSetupFrame.constant = settingsFrameHeight;
}
else {
_layoutConstraintSetupFrame.constant = 0;
}
}
- (IBAction)popupButtonSelectionPressed:(id)sender {
}
- (void)alreadyPaired {
dispatch_async(dispatch_get_main_queue(), ^{
[self->_popupButtonSelection setEnabled:true];
[self->_popupButtonSelection setHidden:false];
[self->_buttonConnect setEnabled:false];
[self->_buttonConnect setHidden:true];
[self->_buttonLaunch setEnabled:true];
[self->_textFieldHost setEnabled:false];
});
[self searchForHost:_host];
[self updateAppsForHost];
[self populatePopupButton];
}
- (void)searchForHost:(NSString*) hostAddress {
_appList = [ConnectionHelper getAppListForHostWithHostIP:_textFieldHost.stringValue deviceName:deviceName cert:_cert uniqueID:_uniqueId].getAppList;
}
- (void)populatePopupButton {
for (int i = 0; i < _appList.count; i++) {
[_popupButtonSelection addItemWithTitle:[_sortedAppList[i] name]];
}
}
- (void)pairFailed:(NSString *)message {
[self showAlert:[NSString stringWithFormat: @"%@", message]];
}
- (void)pairSuccessful {
dispatch_async(dispatch_get_main_queue(), ^{
[self.view.window endSheet:self->_alert.window];
self->_alert = nil;
[self alreadyPaired];
});
}
- (void)showPIN:(NSString *)PIN {
[self showAlert:[NSString stringWithFormat: @"PIN: %@", PIN]];
}
- (void) updateAppsForHost {
_sortedAppList = [_appList allObjects];
_sortedAppList = [_sortedAppList sortedArrayUsingSelector:@selector(compareName:)];
}
- (void)transitionToStreamView {
NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:@"Mac" bundle:nil];
StreamFrameViewController* streamFrame = (StreamFrameViewController*)[storyBoard instantiateControllerWithIdentifier :@"streamFrameVC"];
streamFrame.streamConfig = _streamConfig;
[streamFrame setOrigin:self];
self.view.window.contentViewController = streamFrame;
}
@end

View File

@@ -1,13 +0,0 @@
//
// main.m
// Moonlight macOS
//
// Created by Felix on 09.03.18.
// Copyright © 2018 Felix. All rights reserved.
//
#import <Cocoa/Cocoa.h>
int main(int argc, const char * argv[]) {
return NSApplicationMain(argc, argv);
}

View File

@@ -1,23 +0,0 @@
/*
The MIT License (MIT)
Copyright (c) 2014 Tim Caswell
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/

View File

@@ -1,134 +0,0 @@
/*
Copyright (c) 2014 Alex Diener
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Alex Diener alex@ludobloom.com
*/
#ifndef __GAMEPAD_H__
#define __GAMEPAD_H__
#ifdef __cplusplus
extern "C" {
#endif
#if _MSC_VER && _MSC_VER <= 1600
#define bool int
#define true 1
#define false 0
#else
#include <stdbool.h>
#endif
struct Gamepad_device {
// Unique device identifier for application session, starting at 0 for the first device attached and
// incrementing by 1 for each additional device. If a device is removed and subsequently reattached
// during the same application session, it will have a new deviceID.
unsigned int deviceID;
// Human-readable device name
const char * description;
// USB vendor/product IDs as returned by the driver. Can be used to determine the particular model of device represented.
int vendorID;
int productID;
// Number of axis elements belonging to the device
unsigned int numAxes;
// Number of button elements belonging to the device
unsigned int numButtons;
// Array[numAxes] of values representing the current state of each axis, in the range [-1..1]
float * axisStates;
// Array[numButtons] of values representing the current state of each button
bool * buttonStates;
// Platform-specific device data storage. Don't touch unless you know what you're doing and don't
// mind your code breaking in future versions of this library.
void * privateData;
};
/* Initializes gamepad library and detects initial devices. Call this before any other Gamepad_*()
function, other than callback registration functions. If you want to receive deviceAttachFunc
callbacks from devices detected in Gamepad_init(), you must call Gamepad_deviceAttachFunc()
before calling Gamepad_init().
This function must be called from the same thread that will be calling Gamepad_processEvents()
and Gamepad_detectDevices(). */
void Gamepad_init(void);
/* Tears down all data structures created by the gamepad library and releases any memory that was
allocated. It is not necessary to call this function at application termination, but it's
provided in case you want to free memory associated with gamepads at some earlier time. */
void Gamepad_shutdown(void);
/* Returns the number of currently attached gamepad devices. */
unsigned int Gamepad_numDevices(void);
/* Returns the specified Gamepad_device struct, or NULL if deviceIndex is out of bounds. */
struct Gamepad_device * Gamepad_deviceAtIndex(unsigned int deviceIndex);
/* Polls for any devices that have been attached since the last call to Gamepad_detectDevices() or
Gamepad_init(). If any new devices are found, the callback registered with
Gamepad_deviceAttachFunc() (if any) will be called once per newly detected device.
Note that depending on implementation, you may receive button and axis event callbacks for
devices that have not yet been detected with Gamepad_detectDevices(). You can safely ignore
these events, but be aware that your callbacks might receive a device ID that hasn't been seen
by your deviceAttachFunc. */
void Gamepad_detectDevices(void);
/* Reads pending input from all attached devices and calls the appropriate input callbacks, if any
have been registered. */
void Gamepad_processEvents(void);
/* Registers a function to be called whenever a device is attached. The specified function will be
called only during calls to Gamepad_init() and Gamepad_detectDevices(), in the thread from
which those functions were called. Calling this function with a NULL argument will stop any
previously registered callback from being called subsequently. */
void Gamepad_deviceAttachFunc(void (* callback)(struct Gamepad_device * device, void * context), void * context);
/* Registers a function to be called whenever a device is detached. The specified function can be
called at any time, and will not necessarily be called from the main thread. Calling this
function with a NULL argument will stop any previously registered callback from being called
subsequently. */
void Gamepad_deviceRemoveFunc(void (* callback)(struct Gamepad_device * device, void * context), void * context);
/* Registers a function to be called whenever a button on any attached device is pressed. The
specified function will be called only during calls to Gamepad_processEvents(), in the
thread from which Gamepad_processEvents() was called. Calling this function with a NULL
argument will stop any previously registered callback from being called subsequently. */
void Gamepad_buttonDownFunc(void (* callback)(struct Gamepad_device * device, unsigned int buttonID, double timestamp, void * context), void * context);
/* Registers a function to be called whenever a button on any attached device is released. The
specified function will be called only during calls to Gamepad_processEvents(), in the
thread from which Gamepad_processEvents() was called. Calling this function with a NULL
argument will stop any previously registered callback from being called subsequently. */
void Gamepad_buttonUpFunc(void (* callback)(struct Gamepad_device * device, unsigned int buttonID, double timestamp, void * context), void * context);
/* Registers a function to be called whenever an axis on any attached device is moved. The
specified function will be called only during calls to Gamepad_processEvents(), in the
thread from which Gamepad_processEvents() was called. Calling this function with a NULL
argument will stop any previously registered callback from being called subsequently. */
void Gamepad_axisMoveFunc(void (* callback)(struct Gamepad_device * device, unsigned int axisID, float value, float lastValue, double timestamp, void * context), void * context);
#ifdef __cplusplus
}
#endif
#endif

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,514 +0,0 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 48;
objects = {
/* Begin PBXBuildFile section */
9857AEEA1EBE85A20084F99E /* RtpFecQueue.c in Sources */ = {isa = PBXBuildFile; fileRef = 9857AEE91EBE85A20084F99E /* RtpFecQueue.c */; };
9857AEF01EBE85E10084F99E /* rs.c in Sources */ = {isa = PBXBuildFile; fileRef = 9857AEEE1EBE85E10084F99E /* rs.c */; };
98AB2E401CAD425A0089BB98 /* AudioStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1A1CAD423B0089BB98 /* AudioStream.c */; };
98AB2E411CAD425A0089BB98 /* ByteBuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1B1CAD423B0089BB98 /* ByteBuffer.c */; };
98AB2E421CAD425A0089BB98 /* Connection.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1D1CAD423B0089BB98 /* Connection.c */; };
98AB2E431CAD425A0089BB98 /* ControlStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1E1CAD423B0089BB98 /* ControlStream.c */; };
98AB2E441CAD425A0089BB98 /* FakeCallbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1F1CAD423B0089BB98 /* FakeCallbacks.c */; };
98AB2E451CAD425A0089BB98 /* InputStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E211CAD423B0089BB98 /* InputStream.c */; };
98AB2E461CAD425A0089BB98 /* LinkedBlockingQueue.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E241CAD423B0089BB98 /* LinkedBlockingQueue.c */; };
98AB2E471CAD425A0089BB98 /* Misc.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E261CAD423B0089BB98 /* Misc.c */; };
98AB2E481CAD425A0089BB98 /* Platform.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E311CAD423B0089BB98 /* Platform.c */; };
98AB2E491CAD425A0089BB98 /* PlatformSockets.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E331CAD423B0089BB98 /* PlatformSockets.c */; };
98AB2E4A1CAD425A0089BB98 /* RtpReorderQueue.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E361CAD423B0089BB98 /* RtpReorderQueue.c */; };
98AB2E4B1CAD425A0089BB98 /* RtspConnection.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E391CAD423B0089BB98 /* RtspConnection.c */; };
98AB2E4C1CAD425A0089BB98 /* RtspParser.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E3A1CAD423B0089BB98 /* RtspParser.c */; };
98AB2E4D1CAD425A0089BB98 /* SdpGenerator.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E3B1CAD423B0089BB98 /* SdpGenerator.c */; };
98AB2E4E1CAD425A0089BB98 /* VideoDepacketizer.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E3D1CAD423B0089BB98 /* VideoDepacketizer.c */; };
98AB2E4F1CAD425A0089BB98 /* VideoStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E3E1CAD423B0089BB98 /* VideoStream.c */; };
98AB2E501CAD427A0089BB98 /* callbacks.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2DF01CAD422B0089BB98 /* callbacks.c */; };
98AB2E511CAD427A0089BB98 /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2DF31CAD422B0089BB98 /* compress.c */; };
98AB2E521CAD427A0089BB98 /* host.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E001CAD422B0089BB98 /* host.c */; };
98AB2E531CAD427A0089BB98 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E0E1CAD422B0089BB98 /* list.c */; };
98AB2E541CAD427A0089BB98 /* packet.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E121CAD422B0089BB98 /* packet.c */; };
98AB2E551CAD427A0089BB98 /* peer.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E131CAD422B0089BB98 /* peer.c */; };
98AB2E561CAD427A0089BB98 /* protocol.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E151CAD422B0089BB98 /* protocol.c */; };
98AB2E571CAD427A0089BB98 /* unix.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E171CAD422B0089BB98 /* unix.c */; };
98AB2E581CAD427A0089BB98 /* win32.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E181CAD422B0089BB98 /* win32.c */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
9857AEE91EBE85A20084F99E /* RtpFecQueue.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = RtpFecQueue.c; sourceTree = "<group>"; };
9857AEEB1EBE85AB0084F99E /* RtpFecQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RtpFecQueue.h; sourceTree = "<group>"; };
9857AEEE1EBE85E10084F99E /* rs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rs.c; path = "moonlight-common-c/reedsolomon/rs.c"; sourceTree = "<group>"; };
9857AEEF1EBE85E10084F99E /* rs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rs.h; path = "moonlight-common-c/reedsolomon/rs.h"; sourceTree = "<group>"; };
98AB2DF01CAD422B0089BB98 /* callbacks.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = callbacks.c; sourceTree = "<group>"; };
98AB2DF11CAD422B0089BB98 /* ChangeLog */ = {isa = PBXFileReference; lastKnownFileType = text; path = ChangeLog; sourceTree = "<group>"; };
98AB2DF21CAD422B0089BB98 /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; };
98AB2DF31CAD422B0089BB98 /* compress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = compress.c; sourceTree = "<group>"; };
98AB2DF41CAD422B0089BB98 /* configure.ac */ = {isa = PBXFileReference; lastKnownFileType = text; path = configure.ac; sourceTree = "<group>"; };
98AB2DF61CAD422B0089BB98 /* design.dox */ = {isa = PBXFileReference; lastKnownFileType = text; path = design.dox; sourceTree = "<group>"; };
98AB2DF71CAD422B0089BB98 /* FAQ.dox */ = {isa = PBXFileReference; lastKnownFileType = text; path = FAQ.dox; sourceTree = "<group>"; };
98AB2DF81CAD422B0089BB98 /* install.dox */ = {isa = PBXFileReference; lastKnownFileType = text; path = install.dox; sourceTree = "<group>"; };
98AB2DF91CAD422B0089BB98 /* license.dox */ = {isa = PBXFileReference; lastKnownFileType = text; path = license.dox; sourceTree = "<group>"; };
98AB2DFA1CAD422B0089BB98 /* mainpage.dox */ = {isa = PBXFileReference; lastKnownFileType = text; path = mainpage.dox; sourceTree = "<group>"; };
98AB2DFB1CAD422B0089BB98 /* tutorial.dox */ = {isa = PBXFileReference; lastKnownFileType = text; path = tutorial.dox; sourceTree = "<group>"; };
98AB2DFC1CAD422B0089BB98 /* Doxyfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Doxyfile; sourceTree = "<group>"; };
98AB2DFD1CAD422B0089BB98 /* DoxygenLayout.xml */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = DoxygenLayout.xml; sourceTree = "<group>"; };
98AB2DFE1CAD422B0089BB98 /* enet.dsp */ = {isa = PBXFileReference; lastKnownFileType = text; path = enet.dsp; sourceTree = "<group>"; };
98AB2DFF1CAD422B0089BB98 /* enet_dll.cbp */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = enet_dll.cbp; sourceTree = "<group>"; };
98AB2E001CAD422B0089BB98 /* host.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = host.c; sourceTree = "<group>"; };
98AB2E031CAD422B0089BB98 /* callbacks.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = callbacks.h; sourceTree = "<group>"; };
98AB2E041CAD422B0089BB98 /* enet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = enet.h; sourceTree = "<group>"; };
98AB2E051CAD422B0089BB98 /* list.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = "<group>"; };
98AB2E061CAD422B0089BB98 /* protocol.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = protocol.h; sourceTree = "<group>"; };
98AB2E071CAD422B0089BB98 /* time.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = time.h; sourceTree = "<group>"; };
98AB2E081CAD422B0089BB98 /* types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
98AB2E091CAD422B0089BB98 /* unix.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = unix.h; sourceTree = "<group>"; };
98AB2E0A1CAD422B0089BB98 /* utility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = utility.h; sourceTree = "<group>"; };
98AB2E0B1CAD422B0089BB98 /* win32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = win32.h; sourceTree = "<group>"; };
98AB2E0C1CAD422B0089BB98 /* libenet.pc.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = libenet.pc.in; sourceTree = "<group>"; };
98AB2E0D1CAD422B0089BB98 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
98AB2E0E1CAD422B0089BB98 /* list.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = "<group>"; };
98AB2E101CAD422B0089BB98 /* .keep */ = {isa = PBXFileReference; lastKnownFileType = text; path = .keep; sourceTree = "<group>"; };
98AB2E111CAD422B0089BB98 /* Makefile.am */ = {isa = PBXFileReference; lastKnownFileType = text; path = Makefile.am; sourceTree = "<group>"; };
98AB2E121CAD422B0089BB98 /* packet.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = packet.c; sourceTree = "<group>"; };
98AB2E131CAD422B0089BB98 /* peer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = peer.c; sourceTree = "<group>"; };
98AB2E141CAD422B0089BB98 /* premake4.lua */ = {isa = PBXFileReference; lastKnownFileType = text; path = premake4.lua; sourceTree = "<group>"; };
98AB2E151CAD422B0089BB98 /* protocol.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = protocol.c; sourceTree = "<group>"; };
98AB2E161CAD422B0089BB98 /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = "<group>"; };
98AB2E171CAD422B0089BB98 /* unix.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = unix.c; sourceTree = "<group>"; };
98AB2E181CAD422B0089BB98 /* win32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = win32.c; sourceTree = "<group>"; };
98AB2E1A1CAD423B0089BB98 /* AudioStream.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = AudioStream.c; sourceTree = "<group>"; };
98AB2E1B1CAD423B0089BB98 /* ByteBuffer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ByteBuffer.c; sourceTree = "<group>"; };
98AB2E1C1CAD423B0089BB98 /* ByteBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ByteBuffer.h; sourceTree = "<group>"; };
98AB2E1D1CAD423B0089BB98 /* Connection.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Connection.c; sourceTree = "<group>"; };
98AB2E1E1CAD423B0089BB98 /* ControlStream.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ControlStream.c; sourceTree = "<group>"; };
98AB2E1F1CAD423B0089BB98 /* FakeCallbacks.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = FakeCallbacks.c; sourceTree = "<group>"; };
98AB2E201CAD423B0089BB98 /* Input.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Input.h; sourceTree = "<group>"; };
98AB2E211CAD423B0089BB98 /* InputStream.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = InputStream.c; sourceTree = "<group>"; };
98AB2E221CAD423B0089BB98 /* Limelight-internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Limelight-internal.h"; sourceTree = "<group>"; };
98AB2E231CAD423B0089BB98 /* Limelight.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Limelight.h; sourceTree = "<group>"; };
98AB2E241CAD423B0089BB98 /* LinkedBlockingQueue.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = LinkedBlockingQueue.c; sourceTree = "<group>"; };
98AB2E251CAD423B0089BB98 /* LinkedBlockingQueue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LinkedBlockingQueue.h; sourceTree = "<group>"; };
98AB2E261CAD423B0089BB98 /* Misc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Misc.c; sourceTree = "<group>"; };
98AB2E311CAD423B0089BB98 /* Platform.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Platform.c; sourceTree = "<group>"; };
98AB2E321CAD423B0089BB98 /* Platform.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Platform.h; sourceTree = "<group>"; };
98AB2E331CAD423B0089BB98 /* PlatformSockets.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = PlatformSockets.c; sourceTree = "<group>"; };
98AB2E341CAD423B0089BB98 /* PlatformSockets.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformSockets.h; sourceTree = "<group>"; };
98AB2E351CAD423B0089BB98 /* PlatformThreads.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformThreads.h; sourceTree = "<group>"; };
98AB2E361CAD423B0089BB98 /* RtpReorderQueue.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = RtpReorderQueue.c; sourceTree = "<group>"; };
98AB2E371CAD423B0089BB98 /* RtpReorderQueue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RtpReorderQueue.h; sourceTree = "<group>"; };
98AB2E381CAD423B0089BB98 /* Rtsp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Rtsp.h; sourceTree = "<group>"; };
98AB2E391CAD423B0089BB98 /* RtspConnection.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = RtspConnection.c; sourceTree = "<group>"; };
98AB2E3A1CAD423B0089BB98 /* RtspParser.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = RtspParser.c; sourceTree = "<group>"; };
98AB2E3B1CAD423B0089BB98 /* SdpGenerator.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SdpGenerator.c; sourceTree = "<group>"; };
98AB2E3C1CAD423B0089BB98 /* Video.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Video.h; sourceTree = "<group>"; };
98AB2E3D1CAD423B0089BB98 /* VideoDepacketizer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = VideoDepacketizer.c; sourceTree = "<group>"; };
98AB2E3E1CAD423B0089BB98 /* VideoStream.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = VideoStream.c; sourceTree = "<group>"; };
FB290E2E19B37A4E004C83CF /* libmoonlight-common.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libmoonlight-common.a"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
FB290E2B19B37A4E004C83CF /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
9857AEED1EBE85D50084F99E /* reedsolomon */ = {
isa = PBXGroup;
children = (
9857AEEE1EBE85E10084F99E /* rs.c */,
9857AEEF1EBE85E10084F99E /* rs.h */,
);
name = reedsolomon;
sourceTree = "<group>";
};
98AB2DEF1CAD422B0089BB98 /* enet */ = {
isa = PBXGroup;
children = (
98AB2DF01CAD422B0089BB98 /* callbacks.c */,
98AB2DF11CAD422B0089BB98 /* ChangeLog */,
98AB2DF21CAD422B0089BB98 /* CMakeLists.txt */,
98AB2DF31CAD422B0089BB98 /* compress.c */,
98AB2DF41CAD422B0089BB98 /* configure.ac */,
98AB2DF51CAD422B0089BB98 /* docs */,
98AB2DFC1CAD422B0089BB98 /* Doxyfile */,
98AB2DFD1CAD422B0089BB98 /* DoxygenLayout.xml */,
98AB2DFE1CAD422B0089BB98 /* enet.dsp */,
98AB2DFF1CAD422B0089BB98 /* enet_dll.cbp */,
98AB2E001CAD422B0089BB98 /* host.c */,
98AB2E011CAD422B0089BB98 /* include */,
98AB2E0C1CAD422B0089BB98 /* libenet.pc.in */,
98AB2E0D1CAD422B0089BB98 /* LICENSE */,
98AB2E0E1CAD422B0089BB98 /* list.c */,
98AB2E0F1CAD422B0089BB98 /* m4 */,
98AB2E111CAD422B0089BB98 /* Makefile.am */,
98AB2E121CAD422B0089BB98 /* packet.c */,
98AB2E131CAD422B0089BB98 /* peer.c */,
98AB2E141CAD422B0089BB98 /* premake4.lua */,
98AB2E151CAD422B0089BB98 /* protocol.c */,
98AB2E161CAD422B0089BB98 /* README */,
98AB2E171CAD422B0089BB98 /* unix.c */,
98AB2E181CAD422B0089BB98 /* win32.c */,
);
name = enet;
path = "moonlight-common-c/enet";
sourceTree = "<group>";
};
98AB2DF51CAD422B0089BB98 /* docs */ = {
isa = PBXGroup;
children = (
98AB2DF61CAD422B0089BB98 /* design.dox */,
98AB2DF71CAD422B0089BB98 /* FAQ.dox */,
98AB2DF81CAD422B0089BB98 /* install.dox */,
98AB2DF91CAD422B0089BB98 /* license.dox */,
98AB2DFA1CAD422B0089BB98 /* mainpage.dox */,
98AB2DFB1CAD422B0089BB98 /* tutorial.dox */,
);
path = docs;
sourceTree = "<group>";
};
98AB2E011CAD422B0089BB98 /* include */ = {
isa = PBXGroup;
children = (
98AB2E021CAD422B0089BB98 /* enet */,
);
path = include;
sourceTree = "<group>";
};
98AB2E021CAD422B0089BB98 /* enet */ = {
isa = PBXGroup;
children = (
98AB2E031CAD422B0089BB98 /* callbacks.h */,
98AB2E041CAD422B0089BB98 /* enet.h */,
98AB2E051CAD422B0089BB98 /* list.h */,
98AB2E061CAD422B0089BB98 /* protocol.h */,
98AB2E071CAD422B0089BB98 /* time.h */,
98AB2E081CAD422B0089BB98 /* types.h */,
98AB2E091CAD422B0089BB98 /* unix.h */,
98AB2E0A1CAD422B0089BB98 /* utility.h */,
98AB2E0B1CAD422B0089BB98 /* win32.h */,
);
path = enet;
sourceTree = "<group>";
};
98AB2E0F1CAD422B0089BB98 /* m4 */ = {
isa = PBXGroup;
children = (
98AB2E101CAD422B0089BB98 /* .keep */,
);
path = m4;
sourceTree = "<group>";
};
98AB2E191CAD423B0089BB98 /* src */ = {
isa = PBXGroup;
children = (
9857AEEB1EBE85AB0084F99E /* RtpFecQueue.h */,
9857AEE91EBE85A20084F99E /* RtpFecQueue.c */,
98AB2E1A1CAD423B0089BB98 /* AudioStream.c */,
98AB2E1B1CAD423B0089BB98 /* ByteBuffer.c */,
98AB2E1C1CAD423B0089BB98 /* ByteBuffer.h */,
98AB2E1D1CAD423B0089BB98 /* Connection.c */,
98AB2E1E1CAD423B0089BB98 /* ControlStream.c */,
98AB2E1F1CAD423B0089BB98 /* FakeCallbacks.c */,
98AB2E201CAD423B0089BB98 /* Input.h */,
98AB2E211CAD423B0089BB98 /* InputStream.c */,
98AB2E221CAD423B0089BB98 /* Limelight-internal.h */,
98AB2E231CAD423B0089BB98 /* Limelight.h */,
98AB2E241CAD423B0089BB98 /* LinkedBlockingQueue.c */,
98AB2E251CAD423B0089BB98 /* LinkedBlockingQueue.h */,
98AB2E261CAD423B0089BB98 /* Misc.c */,
98AB2E311CAD423B0089BB98 /* Platform.c */,
98AB2E321CAD423B0089BB98 /* Platform.h */,
98AB2E331CAD423B0089BB98 /* PlatformSockets.c */,
98AB2E341CAD423B0089BB98 /* PlatformSockets.h */,
98AB2E351CAD423B0089BB98 /* PlatformThreads.h */,
98AB2E361CAD423B0089BB98 /* RtpReorderQueue.c */,
98AB2E371CAD423B0089BB98 /* RtpReorderQueue.h */,
98AB2E381CAD423B0089BB98 /* Rtsp.h */,
98AB2E391CAD423B0089BB98 /* RtspConnection.c */,
98AB2E3A1CAD423B0089BB98 /* RtspParser.c */,
98AB2E3B1CAD423B0089BB98 /* SdpGenerator.c */,
98AB2E3C1CAD423B0089BB98 /* Video.h */,
98AB2E3D1CAD423B0089BB98 /* VideoDepacketizer.c */,
98AB2E3E1CAD423B0089BB98 /* VideoStream.c */,
);
name = src;
path = "moonlight-common-c/src";
sourceTree = "<group>";
};
FB290E2519B37A4E004C83CF = {
isa = PBXGroup;
children = (
9857AEED1EBE85D50084F99E /* reedsolomon */,
98AB2E191CAD423B0089BB98 /* src */,
98AB2DEF1CAD422B0089BB98 /* enet */,
FB290E2F19B37A4E004C83CF /* Products */,
);
sourceTree = "<group>";
};
FB290E2F19B37A4E004C83CF /* Products */ = {
isa = PBXGroup;
children = (
FB290E2E19B37A4E004C83CF /* libmoonlight-common.a */,
);
name = Products;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
FB290E2D19B37A4E004C83CF /* moonlight-common */ = {
isa = PBXNativeTarget;
buildConfigurationList = FB290E3219B37A4E004C83CF /* Build configuration list for PBXNativeTarget "moonlight-common" */;
buildPhases = (
FB290E2A19B37A4E004C83CF /* Sources */,
FB290E2B19B37A4E004C83CF /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = "moonlight-common";
productName = "limelight-common";
productReference = FB290E2E19B37A4E004C83CF /* libmoonlight-common.a */;
productType = "com.apple.product-type.library.static";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
FB290E2619B37A4E004C83CF /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 0930;
ORGANIZATIONNAME = "Moonlight Stream";
};
buildConfigurationList = FB290E2919B37A4E004C83CF /* Build configuration list for PBXProject "moonlight-common_mac" */;
compatibilityVersion = "Xcode 8.0";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
en,
);
mainGroup = FB290E2519B37A4E004C83CF;
productRefGroup = FB290E2F19B37A4E004C83CF /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
FB290E2D19B37A4E004C83CF /* moonlight-common */,
);
};
/* End PBXProject section */
/* Begin PBXSourcesBuildPhase section */
FB290E2A19B37A4E004C83CF /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
98AB2E401CAD425A0089BB98 /* AudioStream.c in Sources */,
98AB2E411CAD425A0089BB98 /* ByteBuffer.c in Sources */,
98AB2E421CAD425A0089BB98 /* Connection.c in Sources */,
98AB2E431CAD425A0089BB98 /* ControlStream.c in Sources */,
98AB2E441CAD425A0089BB98 /* FakeCallbacks.c in Sources */,
98AB2E451CAD425A0089BB98 /* InputStream.c in Sources */,
98AB2E461CAD425A0089BB98 /* LinkedBlockingQueue.c in Sources */,
98AB2E471CAD425A0089BB98 /* Misc.c in Sources */,
98AB2E481CAD425A0089BB98 /* Platform.c in Sources */,
98AB2E491CAD425A0089BB98 /* PlatformSockets.c in Sources */,
98AB2E4A1CAD425A0089BB98 /* RtpReorderQueue.c in Sources */,
98AB2E4B1CAD425A0089BB98 /* RtspConnection.c in Sources */,
98AB2E4C1CAD425A0089BB98 /* RtspParser.c in Sources */,
98AB2E4D1CAD425A0089BB98 /* SdpGenerator.c in Sources */,
98AB2E4E1CAD425A0089BB98 /* VideoDepacketizer.c in Sources */,
9857AEEA1EBE85A20084F99E /* RtpFecQueue.c in Sources */,
98AB2E4F1CAD425A0089BB98 /* VideoStream.c in Sources */,
98AB2E501CAD427A0089BB98 /* callbacks.c in Sources */,
98AB2E511CAD427A0089BB98 /* compress.c in Sources */,
98AB2E521CAD427A0089BB98 /* host.c in Sources */,
98AB2E531CAD427A0089BB98 /* list.c in Sources */,
98AB2E541CAD427A0089BB98 /* packet.c in Sources */,
98AB2E551CAD427A0089BB98 /* peer.c in Sources */,
98AB2E561CAD427A0089BB98 /* protocol.c in Sources */,
9857AEF01EBE85E10084F99E /* rs.c in Sources */,
98AB2E571CAD427A0089BB98 /* unix.c in Sources */,
98AB2E581CAD427A0089BB98 /* win32.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin XCBuildConfiguration section */
FB290E3019B37A4E004C83CF /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_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_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "Mac Developer";
COPY_PHASE_STRIP = NO;
DEFINES_MODULE = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
LC_DEBUG,
"DEBUG=1",
"$(inherited)",
);
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MACOSX_DEPLOYMENT_TARGET = 10.10;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
SKIP_INSTALL = YES;
};
name = Debug;
};
FB290E3119B37A4E004C83CF /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_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_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "3rd Party Mac Developer Application";
COPY_PHASE_STRIP = YES;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEFINES_MODULE = YES;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
MACOSX_DEPLOYMENT_TARGET = 10.10;
PROVISIONING_PROFILE = "";
SDKROOT = macosx;
SKIP_INSTALL = YES;
};
name = Release;
};
FB290E3319B37A4E004C83CF /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "Mac Developer";
EXECUTABLE_PREFIX = lib;
HEADER_SEARCH_PATHS = (
"moonlight-common-c/enet/include",
"../libs/**",
);
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MACOSX_DEPLOYMENT_TARGET = 10.13;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SUPPORTED_PLATFORMS = macosx;
};
name = Debug;
};
FB290E3419B37A4E004C83CF /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "Mac Developer";
EXECUTABLE_PREFIX = lib;
GCC_OPTIMIZATION_LEVEL = 0;
HEADER_SEARCH_PATHS = (
"moonlight-common-c/enet/include",
"../libs/**",
);
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
MACOSX_DEPLOYMENT_TARGET = 10.13;
ONLY_ACTIVE_ARCH = NO;
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
SUPPORTED_PLATFORMS = macosx;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
FB290E2919B37A4E004C83CF /* Build configuration list for PBXProject "moonlight-common_mac" */ = {
isa = XCConfigurationList;
buildConfigurations = (
FB290E3019B37A4E004C83CF /* Debug */,
FB290E3119B37A4E004C83CF /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
FB290E3219B37A4E004C83CF /* Build configuration list for PBXNativeTarget "moonlight-common" */ = {
isa = XCConfigurationList;
buildConfigurations = (
FB290E3319B37A4E004C83CF /* Debug */,
FB290E3419B37A4E004C83CF /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = FB290E2619B37A4E004C83CF /* Project object */;
}

View File

@@ -1,41 +0,0 @@
<?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>IDESourceControlProjectFavoriteDictionaryKey</key>
<false/>
<key>IDESourceControlProjectIdentifier</key>
<string>662F3EBE-A540-4F33-A434-3BBB22ECCB12</string>
<key>IDESourceControlProjectName</key>
<string>limelight-common</string>
<key>IDESourceControlProjectOriginsDictionary</key>
<dict>
<key>151E8452-E928-4FE9-BF31-5F5C490B9DD4</key>
<string>ssh://github.com/limelight-stream/limelight-common-c.git</string>
</dict>
<key>IDESourceControlProjectPath</key>
<string>limelight-common.xcodeproj/project.xcworkspace</string>
<key>IDESourceControlProjectRelativeInstallPathDictionary</key>
<dict>
<key>151E8452-E928-4FE9-BF31-5F5C490B9DD4</key>
<string>../..</string>
</dict>
<key>IDESourceControlProjectURL</key>
<string>ssh://github.com/limelight-stream/limelight-common-c.git</string>
<key>IDESourceControlProjectVersion</key>
<integer>110</integer>
<key>IDESourceControlProjectWCCIdentifier</key>
<string>151E8452-E928-4FE9-BF31-5F5C490B9DD4</string>
<key>IDESourceControlProjectWCConfigurations</key>
<array>
<dict>
<key>IDESourceControlRepositoryExtensionIdentifierKey</key>
<string>public.vcs.git</string>
<key>IDESourceControlWCCIdentifierKey</key>
<string>151E8452-E928-4FE9-BF31-5F5C490B9DD4</string>
<key>IDESourceControlWCCName</key>
<string>limelight-common-c</string>
</dict>
</array>
</dict>
</plist>

View File

@@ -1,37 +0,0 @@
{
"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "A4B0849259F9566B0CBA84A6D3D4A0F895C03123",
"DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
},
"DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
"584110FE5ABD5BCB5065B76A98D3F8000D0644EC" : 0,
"A4B0849259F9566B0CBA84A6D3D4A0F895C03123" : 0,
"EB99D631D5149240E91F8D168F0F298D7A5BAA89" : 0
},
"DVTSourceControlWorkspaceBlueprintIdentifierKey" : "40250820-914C-4FB3-9CF1-3DB8A02E7012",
"DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
"584110FE5ABD5BCB5065B76A98D3F8000D0644EC" : "moonlight-ios\/moonlight-common\/moonlight-common-c\/enet\/",
"A4B0849259F9566B0CBA84A6D3D4A0F895C03123" : "moonlight-ios\/",
"EB99D631D5149240E91F8D168F0F298D7A5BAA89" : "moonlight-ios\/moonlight-common\/moonlight-common-c\/"
},
"DVTSourceControlWorkspaceBlueprintNameKey" : "moonlight-common",
"DVTSourceControlWorkspaceBlueprintVersion" : 204,
"DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "moonlight-common\/moonlight-common.xcodeproj",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/cgutman\/enet.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "584110FE5ABD5BCB5065B76A98D3F8000D0644EC"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "github.com:moonlight-stream\/moonlight-ios.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "A4B0849259F9566B0CBA84A6D3D4A0F895C03123"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/moonlight-stream\/moonlight-common-c.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "EB99D631D5149240E91F8D168F0F298D7A5BAA89"
}
]
}