0

我目前正在为大学编写一个游戏项目,我们正在使用 GWT 和 GWT EventService。

一开始,客户进入主大厅。一个 Listener 和一个 UnlistenListener 将被注册到服务器。UnlistenerListener 注册一个包含用户名的 UnlistenEvent。“用户加入”被触发。

在服务器端,我们有一个所有活动用户(“加入用户”)的列表。当用户关闭浏览器时,UnlistenEvent 将在 90 秒后触发。其他用户收到事件,但现在的问题是:我如何在服务器端处理这个超时?该事件将由 EventService 本身触发,并将被其他客户端接收,但我不知道如何捕捉这一时刻并在服务器端手动处理以将用户从“活动用户”列表中删除。当服务器检测到超时时,应触发诸如“用户离开”之类的事件。

活动用户列表保留在服务器端,所以我想要的只是有一个程序删除活动用户列表中的“超时”用户。

有人可以帮忙吗?

4

3 回答 3

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


        }
    });
}
于 2014-07-23T16:11:19.720 回答
0

我们现在有框架和 HTML5 websocket 供服务器将信息推送到客户端。

我建议使用Atmosphere,或检查此线程以获得更多选择。

于 2013-11-06T12:52:33.917 回答
-1

正如我从库文档/javadoc 中可以理解的那样,它是客户端之间的桥梁,并且不提供服务器端的监听。作为确认,javadoc 仅指客户端代码。

也许您可以修改库并向 EventRegistry 添加一个侦听器,它看起来是侦听事件流的好点。

于 2013-11-06T07:33:04.823 回答