From 68dce30ee215d5614aff29c67733f9d71cfd033a Mon Sep 17 00:00:00 2001 From: Kent Sutherland Date: Mon, 24 May 2004 12:56:57 +0000 Subject: [PATCH] Checking for a remote server runs in a separate thread, so it doesn't lock up the whole interface if the other machine is off. --- MainController.m | 43 +++++++++++++++++++++++++++++---- MenuTunes.xcode/project.pbxproj | 2 +- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/MainController.m b/MainController.m index c4fd253..8079f3b 100755 --- a/MainController.m +++ b/MainController.m @@ -89,9 +89,10 @@ static MainController *sharedController; if ([df boolForKey:@"enableSharing"]) { [self setServerStatus:YES]; } else if ([df boolForKey:@"useSharedPlayer"]) { - if ([self connectToServer] == 0) { + [self checkForRemoteServer:nil]; + /*if ([self connectToServer] == 0) { [NSTimer scheduledTimerWithTimeInterval:45 target:self selector:@selector(checkForRemoteServer:) userInfo:nil repeats:YES]; - } + }*/ } //Setup for notification of the remote player launching or quitting @@ -107,7 +108,7 @@ static MainController *sharedController; name:NSWorkspaceDidLaunchApplicationNotification object:nil]; - if ( ! [df objectForKey:@"menu"] ) { // If this is nil, defaults have never been registered. + if (![df objectForKey:@"menu"]) { // If this is nil, defaults have never been registered. [[PreferencesController sharedPrefs] registerDefaults]; } @@ -546,7 +547,7 @@ static MainController *sharedController; NSString *path; if ( (path = [df stringForKey:@"CustomPlayerPath"]) ) { } else { - path = [[self currentRemote] playerFullName]; + pathITDebugLog(@"Showing player interface."); = [[self currentRemote] playerFullName]; } if (![[NSWorkspace sharedWorkspace] launchApplication:path]) { ITDebugLog(@"Error Launching Player"); @@ -1137,7 +1138,13 @@ static MainController *sharedController; - (void)checkForRemoteServer:(NSTimer *)timer { ITDebugLog(@"Checking for remote server."); - if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) { + + //New code + [NSThread detachNewThreadSelector:@selector(runRemoteServerCheck:) toTarget:self withObject:nil]; + //[timer invalidate]; + // + + /*if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) { ITDebugLog(@"Remote server found."); [timer invalidate]; if (![networkController isServerOn] && ![networkController isConnectedToServer]) { @@ -1145,9 +1152,35 @@ static MainController *sharedController; } } else { ITDebugLog(@"Remote server not found."); + }*/ +} + +- (void)runRemoteServerCheck:(id)sender +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + ITDebugLog(@"Remote server check running."); + if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) { + ITDebugLog(@"Remote server found."); + [self performSelectorOnMainThread:@selector(remoteServerFound:) withObject:nil waitUntilDone:NO]; + } else { + ITDebugLog(@"Remote server not found."); + [self performSelectorOnMainThread:@selector(remoteServerNotFound:) withObject:nil waitUntilDone:NO]; + } + [pool release]; +} + +- (void)remoteServerFound:(id)sender +{ + if (![networkController isServerOn] && ![networkController isConnectedToServer]) { + [[StatusWindowController sharedController] showReconnectQueryWindow]; } } +- (void)remoteServerNotFound:(id)sender +{ + [NSTimer scheduledTimerWithTimeInterval:45 target:self selector:@selector(checkForRemoteServer:) userInfo:nil repeats:NO]; +} + - (void)networkError:(NSException *)exception { ITDebugLog(@"Remote exception thrown: %@: %@", [exception name], [exception reason]); diff --git a/MenuTunes.xcode/project.pbxproj b/MenuTunes.xcode/project.pbxproj index 0feee35..bfe6a22 100755 --- a/MenuTunes.xcode/project.pbxproj +++ b/MenuTunes.xcode/project.pbxproj @@ -1521,7 +1521,7 @@ GCC_WARN_ABOUT_MISSING_PROTOTYPES = NO; GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO; GCC_WARN_UNKNOWN_PRAGMAS = NO; - HEADER_SEARCH_PATHS = "../ITKit/build/ITKit.framework/PrivateHeaders ../ITFoundation/build/ITFoundation.framework/PrivateHeaders "; + HEADER_SEARCH_PATHS = "../ITKit/build/ITKit.framework/PrivateHeaders ../ITFoundation/build/ITFoundation.framework/PrivateHeaders"; INFOPLIST_FILE = Info.plist; INSTALL_PATH = "$(HOME)/Applications"; LIBRARY_SEARCH_PATHS = .; -- 2.20.1