Java群聊应用程序:了解群当前是否有活动用户



在过去的两周里,我一直在开发一个java群聊应用程序。到目前为止,用户可以登录并加入其他用户创建的组。用户还可以在每个群组内相互发送聊天消息。消息分发由服务器处理,服务器只将聊天消息发送给发送消息的组的客户端。还显示了用户所属的组的列表,我希望有一个小的绿色标记(或任何其他通知用户的内容),让用户知道该聊天室组中是否有其他用户当前处于活动状态。

以下是我的组如何存储在数据库中

**TABLE groups**
 - id
 - user_count
**TABLE group_members**
 - groupid
 - userid

聊天消息的发送和接收是使用套接字处理的,并且发送的消息都不存储在数据库中。我想在groups表中有一个字段,每次用户加入时,该字段中的值都会增加1,每次用户离开时,该值都会减少1。这样,如果此字段中存储的数字为0,则此处没有当前用户。不过,我认为可能有更好的方法来处理这个问题。

您可以为每个组创建一个数组列表,其中包含该组中每个玩家的名称。然后你可以很容易地得到小组中的人名和人数。所以,如果你有一个名为group的类,你可以有这样的东西:

class Group {
    private ArrayList<String> users; // or instead of String if you have a User class use that
    public Group(Type par) {
        users = new ArrayList<String>();
    }
    public static void addUser(String userName) {
        users.add(userName);
            updateUsers();
    }
    public static void removeUser(String userName) {
        for(int i = 0; i < users.size(); i++) {
            if(users.get(i).equalsIgnoreCase(userName)) {
                users.remove(i);
            }
    }
            updateUsers();
    }
    public static int getNumberOfUsers() {
        return users.size();
    }
    public static void updateUsers() {
        for(String e : users) {
            // send the user the necessary info to all users in the group
        }
    }

}

我只是按照问题中所述的想法去做。工作良好,速度足够快,满足我的需要。以下是数据库的外观表格组

  • id
  • 用户计数
  • 活动<---这是数值增加或减少的地方

TABLE group_members

  • groupid
  • userid

最新更新