Exemple #1
0
        private void ChatterBoxSessionStartReplyViaCaps(IClientAPI remoteClient, string groupName, UUID groupID)
        {
            if (m_debugEnabled)
            {
                MainConsole.Instance.DebugFormat("[GROUPS-MESSAGING]: {0} called", MethodBase.GetCurrentMethod().Name);
            }
            IEventQueueService queue = remoteClient.Scene.RequestModuleInterface <IEventQueueService>();

            if (queue != null)
            {
                queue.ChatterBoxSessionStartReply(groupName, groupID,
                                                  remoteClient.AgentId, remoteClient.Scene.RegionInfo.RegionHandle);
            }
        }
Exemple #2
0
        public void CreateGroupChat(UUID agentID, GridInstantMessage im)
        {
            if (m_doRemoteOnly)
            {
                DoRemoteCallPost(true, "InstantMessageServerURI", agentID, im);
                return;
            }

            UUID groupSessionID = im.SessionID;

            GroupRecord groupInfo = m_groupData.GetGroupRecord(agentID, groupSessionID, null);

            if (groupInfo != null)
            {
                if (!GroupPermissionCheck(agentID, groupSessionID, GroupPowers.JoinChat))
                {
                    return;     // They have to be able to join to create a group chat
                }
                // Create the session.
                if (!SessionExists(groupSessionID))
                {
                    CreateSession(new ChatSession {
                        Members   = new List <ChatSessionMember> (),
                        SessionID = groupSessionID,
                        Name      = groupInfo.GroupName
                    });
                    AddMemberToGroup(new ChatSessionMember {
                        AvatarKey    = agentID,
                        CanVoiceChat = false,
                        IsModerator  = GroupPermissionCheck(agentID, groupSessionID, GroupPowers.ModerateChat),
                        MuteText     = false,
                        MuteVoice    = false,
                        HasBeenAdded = true
                    }, groupSessionID);

                    foreach (
                        GroupMembersData gmd in
                        m_groupData.GetGroupMembers(agentID, groupSessionID)
                        .Where(gmd => gmd.AgentID != agentID)
                        .Where(gmd =>
                               (gmd.AgentPowers & (ulong)GroupPowers.JoinChat) == (ulong)GroupPowers.JoinChat))
                    {
                        AddMemberToGroup(new ChatSessionMember {
                            AvatarKey    = gmd.AgentID,
                            CanVoiceChat = false,
                            IsModerator  = GroupPermissionCheck(gmd.AgentID, groupSessionID, GroupPowers.ModerateChat),
                            MuteText     = false,
                            MuteVoice    = false,
                            HasBeenAdded = false
                        }, groupSessionID);
                    }
                    // Tell us that it was made successfully
                    m_eventQueueService.ChatterBoxSessionStartReply(groupInfo.GroupName, groupSessionID,
                                                                    agentID, findRegionID(agentID));
                }
                else
                {
                    ChatSession thisSession = GetSession(groupSessionID);
                    // A session already exists
                    // Add us
                    AddMemberToGroup(new ChatSessionMember {
                        AvatarKey    = agentID,
                        CanVoiceChat = false,
                        IsModerator  = GroupPermissionCheck(agentID, groupSessionID, GroupPowers.ModerateChat),
                        MuteText     = false,
                        MuteVoice    = false,
                        HasBeenAdded = true
                    }, groupSessionID);

                    // Tell us that we entered successfully
                    m_eventQueueService.ChatterBoxSessionStartReply(groupInfo.GroupName, groupSessionID,
                                                                    agentID, findRegionID(agentID));

                    var usAgents    = new List <ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock> ();
                    var notUsAgents = new List <ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock> ();

                    foreach (ChatSessionMember sessionMember in thisSession.Members)
                    {
                        ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block =
                            new ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock {
                            AgentID      = sessionMember.AvatarKey,
                            CanVoiceChat = sessionMember.CanVoiceChat,
                            IsModerator  = sessionMember.IsModerator,
                            MuteText     = sessionMember.MuteText,
                            MuteVoice    = sessionMember.MuteVoice,
                            Transition   = "ENTER"
                        };
                        if (agentID == sessionMember.AvatarKey)
                        {
                            usAgents.Add(block);
                        }
                        if (sessionMember.HasBeenAdded)
                        {
                            // Don't add not joined yet agents. They don't want to be here.
                            notUsAgents.Add(block);
                        }
                    }
                    foreach (ChatSessionMember member in thisSession.Members)
                    {
                        if (member.HasBeenAdded)    // Only send to those in the group
                        {
                            UUID regionID = findRegionID(member.AvatarKey);
                            if (regionID != UUID.Zero)
                            {
                                if (member.AvatarKey == agentID)
                                {
                                    // Tell 'us' about all the other agents in the group
                                    m_eventQueueService.ChatterBoxSessionAgentListUpdates(
                                        groupSessionID, notUsAgents.ToArray(), member.AvatarKey, "ENTER", regionID);
                                }
                                else
                                {
                                    // Tell 'other' agents about the new agent ('us')
                                    m_eventQueueService.ChatterBoxSessionAgentListUpdates(
                                        groupSessionID, usAgents.ToArray(), member.AvatarKey, "ENTER", regionID);
                                }
                            }
                        }
                    }
                }

                ChatSessionMember agentMember = FindMember(agentID, groupSessionID);
                if (agentMember != null)
                {
                    // Tell us that we entered
                    var ourblock =
                        new ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock {
                        AgentID      = agentID,
                        CanVoiceChat = agentMember.CanVoiceChat,
                        IsModerator  = agentMember.IsModerator,
                        MuteText     = agentMember.MuteText,
                        MuteVoice    = agentMember.MuteVoice,
                        Transition   = "ENTER"
                    };
                    m_eventQueueService.ChatterBoxSessionAgentListUpdates(
                        groupSessionID, new [] { ourblock }, agentID, "ENTER", findRegionID(agentID));
                }
            }
        }