⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 impschatgroupmanager.java

📁 Android平台上即时通讯聊天工具源代码。 支持手机聊天。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    @Override    protected void removeGroupMemberAsync(final ChatGroup group, final Contact contact) {        Primitive request = buildRemoveGroupMemberRequest(group, contact);        AsyncTransaction tx = new AsyncTransaction(mTransactionManager) {            @Override            public void onResponseError(ImpsErrorInfo error) {                notifyGroupMemberError(group, error);            }            @Override            public void onResponseOk(Primitive response) {                notifyMemberLeft(group, contact);            }        };        tx.sendRequest(request);    }    /**     * Loads the members of a ChatGroup asynchronously. This method will create     * a ChatGroup and return immediately. After the members are fetched from     * the server,     * {@link GroupMemberListener#onMemberJoined(ChatGroup, Contact)}} will be     * called.     *     * @param address     */    ChatGroup loadGroupMembersAsync(ImpsGroupAddress address) {        //FIXME: NowIMP Server doesn't support this primitive.//        Primitive request = new Primitive(ImpsTags.GetJoinedUsers_Request);//        request.addElement(ImpsTags.GroupID, address.getFullName());//        Primitive response = mConnection.sendRequest(request);//        ImpsUtils.checkResult(response);////        ChatGroup group = new ChatGroup(address, address.getScreenName(), this);        throw new RuntimeException("Not implemented yet");    }    public void notifyServerTransaction(ServerTransaction tx) {        final Primitive primitive = tx.getRequest();        String type = primitive.getType();        if (ImpsTags.GroupChangeNotice.equals(type)) {            tx.sendStatusResponse(ImpsConstants.SUCCESS_CODE);            handleGroupChange(primitive);        } else if (ImpsTags.InviteUser_Request.equals(type)) {            tx.sendStatusResponse(ImpsConstants.SUCCESS_CODE);            String inviteType = primitive.getElementContents(ImpsTags.InviteType);            // We only handle Group invitation right now.            if (ImpsConstants.GROUP_INVITATION.equals(inviteType)) {                handleInvitation(primitive);            }        } else if (ImpsTags.LeaveGroup_Response.equals(type)) {            tx.sendStatusResponse(ImpsConstants.SUCCESS_CODE);            String groupId = primitive.getElementContents(ImpsTags.GroupID);            ChatGroup group = mGroups.get(new ImpsGroupAddress(groupId));            if(group != null) {                notifyLeftGroup(group);            } else {                ImpsLog.log("Leave unknown group:" + groupId);            }        } else if (ImpsTags.Invite_Response.equals(type)) {            tx.sendStatusResponse(ImpsConstants.SUCCESS_CODE);            //TODO: notify the user?        }    }    void handleGroupChange(final Primitive primitive) {        String groupId = primitive.getElementContents(ImpsTags.GroupID);        ImpsGroupAddress address = new ImpsGroupAddress(groupId);        ArrayList<Contact> joined = new ArrayList<Contact>();        PrimitiveElement joinedElem = primitive.getElement(ImpsTags.Joined);        if (joinedElem != null) {            extractUserMapList(joinedElem.getFirstChild(), joined);        }        ArrayList<Contact> left = new ArrayList<Contact>();        PrimitiveElement leftElem = primitive.getElement(ImpsTags.Left);        if (leftElem != null) {            extractUserMapList(leftElem.getFirstChild(), left);        }        notifyGroupChanged(address, joined, left);    }    void handleInvitation(final Primitive primitive) {        String inviteId = primitive.getElementContents(ImpsTags.InviteID);        PrimitiveElement sender = primitive.getElement(ImpsTags.Sender);        ImpsAddress senderAddress = ImpsAddress.fromPrimitiveElement(sender                .getFirstChild());        String groupId = primitive.getElementContents(ImpsTags.GroupID);        Address groupAddress = new ImpsGroupAddress(groupId);        String inviteNote = primitive.getElementContents(ImpsTags.InviteNote);        Invitation invitation = new Invitation(inviteId, groupAddress,                senderAddress, inviteNote);        notifyGroupInvitation(invitation);    }    private Primitive buildAddGroupMemberRequest(final ChatGroup group, final Contact contact) {        Primitive request = new Primitive(ImpsTags.AddGroupMembers_Request);        request.addElement(ImpsTags.GroupID, group.getAddress().getFullName());        // FIXME: It's UserIDList in 1.3        PrimitiveElement userList = request.addElement(ImpsTags.UserList);        PrimitiveElement user = userList.addChild(ImpsTags.User);        user.addChild(ImpsTags.UserID, contact.getAddress().getFullName());        return request;    }    private Primitive buildCreateGroupRequest(String name, ImpsAddress groupAddress) {        Primitive primitive = new Primitive(ImpsTags.CreateGroup_Request);        primitive.addElement(ImpsTags.GroupID, groupAddress.getFullName());        PrimitiveElement propertiesElem = primitive.addElement(ImpsTags.GroupProperties);        propertiesElem.addPropertyChild(ImpsTags.Name, name);        propertiesElem.addPropertyChild(ImpsTags.Accesstype, ImpsConstants.Open);        propertiesElem.addPropertyChild(ImpsTags.PrivateMessaging, false);        propertiesElem.addPropertyChild(ImpsTags.Searchable, false);        propertiesElem.addPropertyChild(ImpsTags.AutoDelete, true);        // TODO: welcome note?        primitive.addElement(ImpsTags.JoinGroup, true);        PrimitiveElement screenName = primitive.addElement(ImpsTags.ScreenName);        screenName.addChild(ImpsTags.SName, mConnection.getLoginUserName());        screenName.addChild(ImpsTags.GroupID, groupAddress.getFullName());        primitive.addElement(ImpsTags.SubscribeNotification, true);        return primitive;    }    private Primitive buildInviteUserRequest(ChatGroup group, Contact contact) {        String inviteId = nextInviteID();        Primitive request = new Primitive(ImpsTags.Invite_Request);        request.addElement(ImpsTags.InviteID, inviteId);        request.addElement(ImpsTags.InviteType, ImpsConstants.GROUP_INVITATION);        // FIXME: <Sender> is only required in IMPS1.3        // ImpsGroupAddress groupAddress = (ImpsGroupAddress)group.getAddress();        // groupAddress.setScreenName(mConnection.getLoginUser());        // request.addElement(ImpsTags.Sender).addChild(groupAddress.toPrimitiveElement());        request.addElement(ImpsTags.Recipient).addChild(                ((ImpsAddress)contact.getAddress()).toPrimitiveElement());        request.addElement(ImpsTags.GroupID, group.getAddress().getFullName());        // FIXME: <ScreenName> is only needed in IMPS1.2        PrimitiveElement screenName = request.addElement(ImpsTags.ScreenName);        screenName.addChild(ImpsTags.SName, mConnection.getLoginUserName());        screenName.addChild(ImpsTags.GroupID, group.getAddress().getFullName());        return request;    }    private Primitive buildJoinGroupRequest(Address address) {        Primitive request = new Primitive(ImpsTags.JoinGroup_Request);        request.addElement(ImpsTags.GroupID, address.getFullName());        PrimitiveElement screenName = request.addElement(ImpsTags.ScreenName);        screenName.addChild(ImpsTags.SName, mConnection.getLoginUserName());        screenName.addChild(ImpsTags.GroupID, address.getFullName());        request.addElement(ImpsTags.JoinedRequest, true);        request.addElement(ImpsTags.SubscribeNotification, true);        return request;    }    private Primitive buildLeaveGroupRequest(ChatGroup group) {        Primitive leaveRequest = new Primitive(ImpsTags.LeaveGroup_Request);        leaveRequest.addElement(ImpsTags.GroupID, group.getAddress().getFullName());        return leaveRequest;    }    private Primitive buildRemoveGroupMemberRequest(ChatGroup group, Contact contact) {        Primitive request = new Primitive(ImpsTags.RemoveGroupMembers_Request);        request.addElement(ImpsTags.GroupID, group.getAddress().getFullName());        // FIXME: It's UserIDList in 1.3        PrimitiveElement userList = request.addElement(ImpsTags.UserList);        PrimitiveElement user = userList.addChild(ImpsTags.User);        user.addChild(ImpsTags.UserID, contact.getAddress().getFullName());        return request;    }    private void extractUserMapList(PrimitiveElement userMapList,            ArrayList<Contact> list) {        // FIXME: UserMapping is the child of UserMapList in version 1.3        PrimitiveElement userMapping = userMapList;        if (userMapping != null) {            for (PrimitiveElement mapping : userMapping.getChildren()) {                String name = mapping.getChildContents(ImpsTags.SName);                String id = mapping.getChildContents(ImpsTags.UserID);                if (id == null) {                    id = name;                }                list.add((Contact)(new ImpsUserAddress(id)).getEntity(mConnection));            }        }    }    private static int sInviteID = 0;    private synchronized String nextInviteID() {        return "invite" + System.currentTimeMillis() + (sInviteID++);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -