Interprozesskomunikation - WOW

Dieser Artikel ist ein archivierter Beitrag aus einer meiner früheren Blogiterationen, dadurch fehlen leider oft die Bilder. Außerdem wurde die Rechtschreibung und Grammatik mit Absicht nicht korrigiert. Für mehr Information lies hier nach… =)

Nachdem heute nun mein neues Netzteil angekommen bin habe ich mich mal wieder mit der Programmierung beschäftigt.

Dabei kam wieder die Situation das ich bestimmte dinge als root ausführen muss aber nicht das ganze Programm selbst als root laufen lasse.

Apple bietet so-genante "Entferne Objekte" an. Im Prinzip exportiert man auf der Serverseite ein Objekt und der Client kann es benutzen als ob es im gleichen Programm wäre.

1
2
3
4
5
6
7
8
9
connection = [NSConnection defaultConnection];
[connection setRootObject:RootObjekt];
if (![connection registerName:@"server"]) {
    NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain
                                         code:1002
                                     userInfo:Nil];
    [NSApp presentError:error];
    [NSApp terminate:self];
}

Mit dem Code wird der Server erstellt und RootObjekt exportiert. (Sollte das nicht gehen wird das Programm mit ner Meldung quittiert).

Nun kann man im Client mit folgendem Code zugreifen:

1
2
3
4
5
6
NSConnection *theConnection;
id theProxy;

theConnection = [NSConnection connectionWithRegisteredName:@"server"
                                                      host:nil];
theProxy = [[theConnection rootProxy] retain];

TheProxy kann nun wie ein normales Objekt verwendet werden. Genauso als wäre es ein stinknormales Objekt welches via alloc und init erzeugt wurde.

Cool nicht?