我正在为大学的游戏项目编码,我们正在使用GWT和GWT EventService。
一开始,客户进入主大厅。监听器和UnlistenListener将注册到服务器。 UnlistenerListener注册一个包含用户名的UnlistenEvent。 “用户加入”被解雇了。
在服务器端,我们有一个所有活动用户的列表(“加入的用户”)。当用户关闭浏览器时,UnlistenEvent将在90秒后触发。其他用户收到该事件,但现在的问题是:我如何在服务器端处理这个时间?该事件将由EventService本身触发,并将被其他客户端接收,但我不知道如何抓住这一时刻并在服务器端手动处理它以从“活动用户”列表中取消用户。当服务器检测到超时时,应该触发“用户离开”等事件。
活动用户列表保留在服务器端,所以我想要的是一个删除活动用户列表中“time time”用户的过程。
有人可以帮忙吗?
答案 0 :(得分:0)
我们现在有服务器的框架和HTML5 websockets将信息推送到客户端。
我建议您使用Atmosphere,或检查this thread以获得更多选择。
答案 1 :(得分:0)
我解决了这个问题:
EventRegistry er = EventRegistryFactory.getInstance()。getEventRegistry();
public MessagesRpcServiceImpl() {
super();
theUserManager = UserManagerFactory.getInstance().getUserManager();
theUserManager.getUserActivityScheduler().addTimeoutListener(new UserTimeoutListener() {
@Override
public void onTimeout(UserInfo arg0) {
List<String> ids = new ArrayList<String>();
for (Domain d : er.getListenDomains()) {
ids.add(d.getName());
}
ids.remove("GLOBAL");
}
});
}
答案 2 :(得分:-1)
正如我从库文档/ javadoc中可以理解的那样,它是客户端之间的桥梁,并且不提供服务器端的监听。作为确认,javadoc仅指客户端代码。
也许你可以修改这个库并为EventRegistry添加一个监听器,看起来很适合听事件流。