在应用程序周围发送关闭消息

Send close message around application

我有一个 Eclipse E4 应用程序,它与不同的服务器有多个连接。现在,当打开一个 MPart 时,该部分将调用服务器来接收他的数据。此外,当 MPart 关闭时,客户端将关闭发送到服务器,以便客户端知道客户端不需要更新数据。

现在我需要找到一种方法让 MPart 知道客户端正在关闭。这样他们就不会向服务器发送任何消息。这将加速客户端的关闭。

如何在用户点击关闭按钮时向Mpart发送关机命令?

使用事件代理向部件发送消息。

在关机代码中发送一个事件:

@Inject
IEventBroker eventBroker;

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

其中 data 是您要与关机事件关联的任何数据。

"my/topic/shutdown" 只是事件的唯一 ID。

使用send方法同步发送事件,使用post异步发送。

每个部分都可以通过以下方式订阅事件:

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

Eventorg.osgi.service.event.Event

如果你希望方法在UI线程中保证运行,你也可以使用@UIEventTopic

要处理对应用程序 'close' 按钮的点击,您需要将 org.eclipse.e4.ui.workbench.modeling.IWindowCloseHandler 的实现放入主 window 的 Eclipse 上下文中。您可以在您的生命周期 class 中执行此操作(如果您有的话)。应用启动完成事件适用于此:

@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));