在应用程序周围发送关闭消息
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)
{
....
}
Event
是 org.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));
我有一个 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)
{
....
}
Event
是 org.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));