server disconnect people who are connected already.
{
if ([networkController isConnectedToServer]) {
[statusItem setMenu:[menuController menu]];
+ if ([[networkController networkObject] remote] == nil) {
+ [self networkError:nil];
+ }
}
if ( [self songChanged] && (timerUpdating != YES) ) {
if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) {
ITDebugLog(@"Remote server found.");
[timer invalidate];
- if (![networkController isConnectedToServer]) {
+ if (![networkController isServerOn] && ![networkController isConnectedToServer]) {
[[StatusWindowController sharedController] showReconnectQueryWindow];
}
} else {
[service stop];
[serverConnection registerName:nil];
[serverConnection release];
- [clientProxy release];
ITDebugLog(@"Stopped server.");
serverOn = NO;
}
NSConnection *testConnection;
NSSocketPort *testPort;
NetworkObject *tempProxy;
+ BOOL valid;
ITDebugLog(@"Checking for shared remote at %@.", host);
if (fullPass) {
[fullPass getBytes:&buffer range:NSMakeRange(6, 4)];
[testConnection setReplyTimeout:2];
tempProxy = (NetworkObject *)[testConnection rootProxy];
[tempProxy serverName];
+ valid = [tempProxy isValid];
NS_HANDLER
ITDebugLog(@"Connection to host failed: %@", host);
[testConnection release];
}
[testConnection release];
[testPort release];
- return YES;
+ return valid;
}
- (BOOL)isServerOn
@interface NetworkObject : NSObject
{
- BOOL _authenticated;
+ BOOL _authenticated, _valid;
}
- (ITMTRemote *)remote;
- (NSString *)serverName;
- (BOOL)requiresPassword;
- (BOOL)sendPassword:(NSData *)password;
+
+- (void)invalidate;
+- (BOOL)isValid;
@end
- (id)init
{
if ( (self = [super init]) ) {
+ _valid = YES;
if (![self requiresPassword]) {
_authenticated = YES;
} else {
- (ITMTRemote *)remote
{
- if (_authenticated) {
+ if (_authenticated && _valid) {
return [[MainController sharedController] currentRemote];
} else {
return nil;
}
}
+- (void)invalidate
+{
+ _valid = NO;
+}
+
+- (BOOL)isValid
+{
+ return _valid;
+}
+
@end