Communication inter-app
elf
Membre
Je suis en train de porgrammer un truc dans le même style que Growl et UpSoft: une système Helper-PrefPane-Framework dont le but resteras secret pour l'instant.
J'ai été fouiller dans les sources de Growl pour voire comment c'est mis en place, et je vois que Growl utilise CoreFundation pour envoyer des notification entre le Helper et le client (app utilisant le framework), voici le bout de code:
Je me demandais si il n'y avais aps un moyen plus Cocoa-eux car ce truc pue le carbon (CF=Carbon non?)!
En même temps si je veux permettre à des apps carbon d'utiliser mon truc ça serais mieux que j'utilise la méthode à Growl?
Ensuite je crois que il y aurrais un moyen en utilisant des NSNotifications, est-ce vrai? Il semblerais que iTunes implémente un truc dans le genre...
Ensuite je sais que Growl est sous licence BSD, si je reprens le système de notification qu'ils utilisent, ça m'obligeras à être open-source? Ou est-ce que la GNU GPL qui fais ça? Ques'que ça implique que Growl soit BSD?
Voilà pour aujourd'hui, et merci d'avance,
elf
J'ai été fouiller dans les sources de Growl pour voire comment c'est mis en place, et je vois que Growl utilise CoreFundation pour envoyer des notification entre le Helper et le client (app utilisant le framework), voici le bout de code:
void Growl_PostNotificationWithDictionary(CFDictionaryRef userInfo) {<br /> CFNotificationCenterPostNotification(CFNotificationCenterGetDistributedCenter(),<br /> GROWL_NOTIFICATION,<br /> /*object*/ NULL,<br /> userInfo,<br /> /*deliverImmediately*/ false);<br />}<br />
Je me demandais si il n'y avais aps un moyen plus Cocoa-eux car ce truc pue le carbon (CF=Carbon non?)!
En même temps si je veux permettre à des apps carbon d'utiliser mon truc ça serais mieux que j'utilise la méthode à Growl?
Ensuite je crois que il y aurrais un moyen en utilisant des NSNotifications, est-ce vrai? Il semblerais que iTunes implémente un truc dans le genre...
Ensuite je sais que Growl est sous licence BSD, si je reprens le système de notification qu'ils utilisent, ça m'obligeras à être open-source? Ou est-ce que la GNU GPL qui fais ça? Ques'que ça implique que Growl soit BSD?
Voilà pour aujourd'hui, et merci d'avance,
elf
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
L'utilisation de ces deux methodes est consignée dans GrowApplicationBridge et les fichiers qui tournent autour. Je te laisse regarder ...
NSDistributedNotificationCenter
Une notification est une notification, qu'elle soit envoyée d'une manière ou d'une autre, c'est le nom que tu lui donnes qui l'identifie, le tout est que l'application réceptrice soit bien configurée pour la recevoir.
ensuite fouf, le bout de code que j'ai mis est tout ce que j'ai trouvé dans GrowApplicationBridge qui se rapporte à des notifications.
Ensuite j'ai jamais utilisé de NSConnexion / NSProxi, y'a moyen de faire sans?
Mais oui, c'est ce que j'essaye de te dire plus haut...:P
Tu as un exemple de notifications utilisées avec Carbon ici. L'appli sensée utiliser ces notifications est elle en Cocoa.
Bien sûr, mais tout dépend des types d'informations que tu veux faire transiter.
Ce code est dans la méthode +notifyWithDictionary: .
Les distributed notifications ne permettent de faire transiter que des NSString alors que via les NSConnexion te permettent de faire appel à des méthodes à travers les applications, ce qui peut etre fort pratique, en particulier quand tu veux utiliser une valeur de retour.
Ensuite - je ne suis pas totalement sûr de ce que je vais dire - les traitement des NSConnection est immediat alors que celui des notifications distribues ne l'est pas.
A ta notification tu peux joindre un dictionary (userInfo), dans lequel tu peux très bien mettre des objets sérialisés (NSData), donc ça permet de faire transiter pas mal de types d'informations déjà . Mais encore une fois tout dépend de ce que elf veux faire...
Toutes les notifications distribuées que j'ai utilisées jusqu'à maintenant ont été transmises immédiatement, aucun temps de latence a remarquer.
Je vais jeter un oeuil à vos liens