/** * 退出群 * * @param iq * @return */ private IQ quitGroup(IQ iq) { String member_jid = iq.getFrom().toBareJID(); JID group = iq.getTo(); IQ reply = IQ.createResultIQ(iq); long group_id = -1; LocalGroup localGroup = null; try { group_id = Long.parseLong(group.getNode()); localGroup = service.getGroup(group_id); } catch (Exception e) { reply.setError(PacketError.Condition.bad_request); return reply; } // 删除群成员 try { Map<String, LocalGroupRole> members = localGroup.getGroupMembers(); if (members != null && !members.isEmpty()) { int delete = groupDbManager.deleteGroupMember(group_id, member_jid); // 有记录被删除,通知群成员 if (delete > 0) { // 如果群主退出,删除群 if (localGroup.isOwner(member_jid)) groupDbManager.deleteGroupById(group_id); // 发送消息 sendPacket(members.keySet(), packetUtil.createQuitPresence(member_jid, group_id)); } } localGroup.removeMember(member_jid); } catch (SQLException e) { reply.setError(PacketError.Condition.internal_server_error); return reply; } return null; }