2017-10-13 11 views
0

J'ai une application Eclipse E4 avec plusieurs connexions à différents serveurs. Maintenant, lors de l'ouverture d'un MPart, la partie appelle le serveur pour recevoir ses données. De même, lorsque le MPart est fermé, le client envoie la fermeture au serveur pour que le client sache que le client n'a pas besoin des données mises à jour.Envoyer un message de fermeture autour de l'application

Maintenant, je dois trouver un moyen de faire savoir aux MParts que le client est en train de s'arrêter. Afin qu'ils n'envoient aucun message au serveur. Cela permettra d'accélérer la fermeture du client.

Comment puis-je envoyer la commande shutdown au Mpart lorsque l'utilisateur clique sur le bouton de fermeture?

Répondre

1

Utilisez le courtier d'événements pour envoyer un message aux pièces.

Dans le code d'arrêt envoyer un événement:

@Inject 
IEventBroker eventBroker; 

eventBroker.send("my/topic/shutdown", data); 

data est les données que vous souhaitez associer à l'événement shudown.

"my/topic/shutdown" est juste un identifiant unique pour l'événement.

Utilisez la méthode send pour envoyer l'événement de manière synchrone, utilisez post pour envoyer de manière asynchrone.

Chaque partie peut souscrire à l'événement avec:

@Inject 
@Optional 
public void shutdown(@EventTopic("my/topic/shutdown") Event event) 
{ 
    .... 
} 

Event est org.osgi.service.event.Event

Vous pouvez également utiliser @UIEventTopic si vous voulez que la méthode soit garantie pour fonctionner dans le thread d'interface utilisateur.

Pour gérer un clic sur le bouton 'fermer' de l'application, vous devez mettre une implémentation de org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler dans le contexte Eclipse de la fenêtre principale. Vous pouvez le faire dans votre cycle de vie (si vous en avez un). L'événement de démarrage de l'application complète est approprié pour cela:

@Optional 
@Inject 
public void appStartupComplete(@UIEventTopic(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE) Event event, MApplication app, EModelService modelService) 
{ 
    MWindow window = (MWindow)modelService.find("window id", app); 

    IEclipseContext windowContext = window.getContext(); 

    windowContext.set(IWindowCloseHandler.class, ContextInjectionFactory.make(AppCloseHandler.class, windowContext)); 
+0

Comment puis-je me connecter au butun pour envoyer l'événement? – JimmyD

+0

Quel bouton de fermeture? –

+0

La croix rouge sur le côté droit de l'écran (dans Windows). – JimmyD