DistibutedObjects und Errorhandling

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • DistibutedObjects und Errorhandling

    hallo zusammen,

    ich kommuniziere mit mit meinem server Programm (ob auf dem gleichen Rechner oder auf einem im Netzwerk ist egal) via Distributed Objects.
    ich bin mir nur noch nicht so richtig im klaren über das error handling wenn der server unter der angegeben Adresse nicht zu finden ist oder schlicht nicht läuft.
    im moment sieht mein code für den Aufbau der Verbindung so aus:

    Quellcode

    1. + (id) serverRootProxyWithAddress: (NSString*) anAddress andConnection: (NSConnection**) aConnection {
    2. BOOL success = YES;
    3. id rootProxy = nil;
    4. NSConnection *connection;
    5. NSString *address = (anAddress) ? anAddress : [preferences objectForKey:@"ServerIP"];
    6. NSSocketPort *port = [[[NSSocketPort alloc] initRemoteWithTCPPort:SERVER_PORT host:address] autorelease];
    7. connection = [NSConnection connectionWithReceivePort:nil sendPort:port];
    8. [connection enableMultipleThreads];
    9. [connection setReplyTimeout:10];
    10. if (connection) {
    11. @try {
    12. rootProxy = [connection rootProxy];
    13. } @catch (NSException *ne) {
    14. NSLog(@"NSDistantObject: Caught %@: %@", [ne name], [ne reason]);
    15. success = NO;
    16. } @finally { }
    17. } else {
    18. success = NO;
    19. }
    20. if (!success) {
    21. NSRunAlertPanel(@"Achtung!", @"Es wurde kein VIP Server gefunden.", @"Ok", nil, nil);
    22. [[NSNotificationCenter defaultCenter] postNotificationName:NOSERVERFOUND_NOTIFICATION object:nil];
    23. }
    24. if (aConnection && rootProxy)
    25. *aConnection = connection;
    26. return (success) ? rootProxy : nil;
    27. }
    Alles anzeigen


    ich fange den nicht laufenden server im @try ab. aber ich habe festgestellt das es eher Zufall ist das die Methode in den @catch Zweig springt.
    oft bleibt das Programm einfach bei rootProxy = [connection rootProxy]; hängen und tut nix mehr. nicht mal eine Fehlermeldung kommt.

    gibt es andere Lösungen einen nicht laufenden server abzufangen? wie löst ihr das problem?

    viele grüße
    sascha

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von macuser ()

  • Ich hab' zwar auf die Schnelle nichts gefunden, dass DO deprecated ist, aber neu anfangen würde ich mit XPC.

    Der Sinn des Try-Blocks wird mir nicht ganz klar:
    In den Docs zu rootProxy steht nichts davon, dass überhaupt eine Exception geworden werden kann (aber die Docs sind eh etwas dürftig und in dem Punkt womöglich unvollständig); dass dieselbe Methode direkt davor schon mal aufgerufen wird, finde ich aber ziemlich merkwürdig.

    Zum Schluss dann doch noch etwas (vielleicht) hilfreiches:
    Hast du es schon mal mit "setRequestTimeout" versucht?
  • Das DO deprecated ist wäre mir neu.
    XPC hab ich mir angesehen aber ich kann damit keine connection zu einer bestimmten IP aufbauen.

    das rootproxy ausserhalb des trys aufgerufen wird wahr ein Fehler bzw ein Test den ich vergessen habe zu löschen.
    das try ist nötig da [connection rootProxy] eine timeout exception wirft wenn kein server läuft.