+ [NSApp terminate:self];
+}
+
+/*************************************************************************/
+#pragma mark -
+#pragma mark NETWORK HANDLERS
+/*************************************************************************/
+
+- (void)setServerStatus:(BOOL)newStatus
+{
+ if (newStatus) {
+ //Turn on
+ [networkController setServerStatus:YES];
+ } else {
+ //Tear down
+ [networkController setServerStatus:NO];
+ }
+}
+
+- (int)connectToServer
+{
+ int result;
+ ITDebugLog(@"Attempting to connect to shared remote.");
+ result = [networkController connectToHost:[df stringForKey:@"sharedPlayerHost"]];
+ //Connect
+ if (result == 1) {
+ [[PreferencesController sharedPrefs] resetRemotePlayerTextFields];
+ currentRemote = [[[networkController networkObject] remote] retain];
+
+ [self setupHotKeys];
+ //playerRunningState = ITMTRemotePlayerRunning;
+ playerRunningState = [[self currentRemote] playerRunningState];
+
+ [refreshTimer invalidate];
+ refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
+ target:self
+ selector:@selector(timerUpdate)
+ userInfo:nil
+ repeats:YES] retain];
+ [self timerUpdate];
+ ITDebugLog(@"Connection successful.");
+ return 1;
+ } else if (result == 0) {
+ ITDebugLog(@"Connection failed.");
+ currentRemote = [remoteArray objectAtIndex:0];
+ return 0;
+ } else {
+ //Do something about the password being invalid
+ ITDebugLog(@"Connection failed.");
+ currentRemote = [remoteArray objectAtIndex:0];
+ return -1;
+ }
+}
+
+- (BOOL)disconnectFromServer
+{
+ ITDebugLog(@"Disconnecting from shared remote.");
+ //Disconnect
+ [currentRemote release];
+ currentRemote = [remoteArray objectAtIndex:0];
+ [networkController disconnect];
+
+ if ([[self currentRemote] playerRunningState] == ITMTRemotePlayerRunning) {
+ [self applicationLaunched:nil];
+ } else {
+ [self applicationTerminated:nil];
+ }
+ [self timerUpdate];
+ return YES;
+}
+
+- (void)checkForRemoteServer:(NSTimer *)timer
+{
+ ITDebugLog(@"Checking for remote server.");
+ if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) {
+ ITDebugLog(@"Remote server found.");
+ [timer invalidate];
+ if (![networkController isServerOn] && ![networkController isConnectedToServer]) {
+ [[StatusWindowController sharedController] showReconnectQueryWindow];
+ }
+ } else {
+ ITDebugLog(@"Remote server not found.");
+ }
+}
+
+- (void)networkError:(NSException *)exception
+{
+ ITDebugLog(@"Remote exception thrown: %@: %@", [exception name], [exception reason]);
+ if ( ((exception == nil) || [[exception name] isEqualToString:NSPortTimeoutException]) && [networkController isConnectedToServer]) {
+ NSRunCriticalAlertPanel(@"Remote MenuTunes Disconnected", @"The MenuTunes server you were connected to stopped responding or quit. MenuTunes will revert back to the local player.", @"OK", nil, nil);
+ if ([self disconnectFromServer]) {
+ [[PreferencesController sharedPrefs] resetRemotePlayerTextFields];
+ [NSTimer scheduledTimerWithTimeInterval:45 target:self selector:@selector(checkForRemoteServer:) userInfo:nil repeats:YES];
+ } else {
+ ITDebugLog(@"CRITICAL ERROR, DISCONNECTING!");
+ }
+ }
+}
+
+- (void)reconnect
+{
+ if ([self connectToServer] == 0) {
+ [NSTimer scheduledTimerWithTimeInterval:45 target:self selector:@selector(checkForRemoteServer:) userInfo:nil repeats:YES];
+ }
+ [[StatusWindow sharedWindow] setLocked:NO];
+ [[StatusWindow sharedWindow] vanish:self];
+ [[StatusWindow sharedWindow] setIgnoresMouseEvents:YES];