Scripts now run when the player switches to no song playing.
[MenuTunes.git] / NetworkController.m
index 49b8321..ce19757 100755 (executable)
@@ -33,6 +33,8 @@ static NetworkController *sharedController;
         sharedController = self;
         browser = [[NSNetServiceBrowser alloc] init];
         [browser setDelegate:self];
         sharedController = self;
         browser = [[NSNetServiceBrowser alloc] init];
         [browser setDelegate:self];
+        rootObject = [[NetworkObject alloc] init];
+        serverPort = [[NSSocketPort alloc] initWithTCPPort:SERVER_PORT];
     }
     return self;
 }
     }
     return self;
 }
@@ -45,6 +47,8 @@ static NetworkController *sharedController;
     }
     [serverPass release];
     [clientPass release];
     }
     [serverPass release];
     [clientPass release];
+    [serverPort release];
+    [rootObject release];
     [clientProxy release];
     [remoteServices release];
     [browser release];
     [clientProxy release];
     [remoteServices release];
     [browser release];
@@ -69,19 +73,16 @@ static NetworkController *sharedController;
 {
     if (!serverOn && status) {
         NSString *name = [[NSUserDefaults standardUserDefaults] stringForKey:@"sharedPlayerName"];
 {
     if (!serverOn && status) {
         NSString *name = [[NSUserDefaults standardUserDefaults] stringForKey:@"sharedPlayerName"];
-        NSPort *serverPort;
         unsigned char buffer;
         NSData *fullPass;
         //Turn on
         NS_DURING
         unsigned char buffer;
         NSData *fullPass;
         //Turn on
         NS_DURING
-            serverPort = [[[NSSocketPort alloc] initWithTCPPort:SERVER_PORT] autorelease];
             serverConnection = [[NSConnection alloc] initWithReceivePort:serverPort
                                                      sendPort:serverPort];
             serverConnection = [[NSConnection alloc] initWithReceivePort:serverPort
                                                      sendPort:serverPort];
-            clientProxy = [[NetworkObject alloc] init];
-            [serverConnection setRootObject:[clientProxy autorelease]];
+            [serverConnection setRootObject:rootObject];
+            [rootObject makeValid];
             [serverConnection registerName:@"ITMTPlayerHost"];
         NS_HANDLER
             [serverConnection registerName:@"ITMTPlayerHost"];
         NS_HANDLER
-            [[serverConnection rootObject] release];
             [serverConnection setRootObject:nil];
             [serverConnection release];
             [serverPort release];
             [serverConnection setRootObject:nil];
             [serverConnection release];
             [serverPort release];
@@ -97,7 +98,7 @@ static NetworkController *sharedController;
                                         name:name
                                         port:SERVER_PORT];
         fullPass = [[NSUserDefaults standardUserDefaults] dataForKey:@"sharedPlayerPassword"];
                                         name:name
                                         port:SERVER_PORT];
         fullPass = [[NSUserDefaults standardUserDefaults] dataForKey:@"sharedPlayerPassword"];
-        if (fullPass) {
+        if ([fullPass length]) {
             [fullPass getBytes:&buffer range:NSMakeRange(6, 4)];
             [serverPass release];
             serverPass = [[NSData alloc] initWithBytes:&buffer length:strlen(&buffer)];
             [fullPass getBytes:&buffer range:NSMakeRange(6, 4)];
             [serverPass release];
             serverPass = [[NSData alloc] initWithBytes:&buffer length:strlen(&buffer)];
@@ -110,9 +111,13 @@ static NetworkController *sharedController;
     } else if (serverOn && !status && [serverConnection isValid]) {
         //Turn off
         [service stop];
     } else if (serverOn && !status && [serverConnection isValid]) {
         //Turn off
         [service stop];
+        [service release];
+        [rootObject invalidate];
         [serverConnection registerName:nil];
         [serverConnection registerName:nil];
+        [serverConnection invalidate];
+        //[serverConnection setRootObject:nil];
+        //[[serverConnection sendPort] autorelease];
         [serverConnection release];
         [serverConnection release];
-        [clientProxy release];
         ITDebugLog(@"Stopped server.");
         serverOn = NO;
     }
         ITDebugLog(@"Stopped server.");
         serverOn = NO;
     }
@@ -200,6 +205,7 @@ static NetworkController *sharedController;
     NSConnection *testConnection;
     NSSocketPort *testPort;
     NetworkObject *tempProxy;
     NSConnection *testConnection;
     NSSocketPort *testPort;
     NetworkObject *tempProxy;
+    BOOL valid;
     ITDebugLog(@"Checking for shared remote at %@.", host);
     if (fullPass) {
         [fullPass getBytes:&buffer range:NSMakeRange(6, 4)];
     ITDebugLog(@"Checking for shared remote at %@.", host);
     if (fullPass) {
         [fullPass getBytes:&buffer range:NSMakeRange(6, 4)];
@@ -216,6 +222,7 @@ static NetworkController *sharedController;
         [testConnection setReplyTimeout:2];
         tempProxy = (NetworkObject *)[testConnection rootProxy];
         [tempProxy serverName];
         [testConnection setReplyTimeout:2];
         tempProxy = (NetworkObject *)[testConnection rootProxy];
         [tempProxy serverName];
+        valid = [tempProxy isValid];
     NS_HANDLER
         ITDebugLog(@"Connection to host failed: %@", host);
         [testConnection release];
     NS_HANDLER
         ITDebugLog(@"Connection to host failed: %@", host);
         [testConnection release];
@@ -231,7 +238,19 @@ static NetworkController *sharedController;
     }
     [testConnection release];
     [testPort release];
     }
     [testConnection release];
     [testPort release];
-    return YES;
+    return valid;
+}
+
+- (void)resetServerName
+{
+    if ([self isServerOn]) {
+        [service stop];
+        [service release];
+        service = [[NSNetService alloc] initWithDomain:@""
+                                        type:@"_mttp._tcp."
+                                        name:[[NSUserDefaults standardUserDefaults] stringForKey:@"sharedPlayerName"]
+                                        port:SERVER_PORT];
+    }
 }
 
 - (BOOL)isServerOn
 }
 
 - (BOOL)isServerOn