Esempio n. 1
0
        private void ProcessMessageFromGroupSession(GridInstantMessage msg)
        {
            if (m_debugEnabled)
            {
                MainConsole.Instance.DebugFormat("[GROUPS-MESSAGING]: Session message from {0} going to agent {1}", msg.fromAgentName,
                                                 msg.toAgentID);
            }

            UUID AgentID = msg.toAgentID;
            UUID GroupID = msg.imSessionID;

            switch (msg.dialog)
            {
            case (byte)InstantMessageDialog.SessionAdd:
                ChatSession chatSession = m_groupData.GetSession(msg.imSessionID);
                if (chatSession != null)
                {
                    chatSession.Members.Add(new ChatSessionMember
                    {
                        AvatarKey    = AgentID,
                        CanVoiceChat = false,
                        HasBeenAdded = true,
                        IsModerator  = GetIsModerator(AgentID, GroupID),
                        MuteVoice    = false,
                        MuteText     = false
                    });
                }
                break;

            case (byte)InstantMessageDialog.SessionDrop:
            case 212:
                DropMemberFromSession(GetActiveClient(AgentID), msg, false);
                break;

            case 213:     //Special for muting/unmuting a user
                IClientAPI         client     = GetActiveClient(AgentID);
                IEventQueueService eq         = client.Scene.RequestModuleInterface <IEventQueueService>();
                ChatSessionMember  thismember = m_groupData.FindMember(msg.imSessionID, AgentID);
                if (thismember == null)
                {
                    return;
                }
                string[] brokenMessage = msg.message.Split(',');
                bool     mutedText = false, mutedVoice = false;
                bool.TryParse(brokenMessage[0], out mutedText);
                bool.TryParse(brokenMessage[1], out mutedVoice);
                thismember.MuteText  = mutedText;
                thismember.MuteVoice = mutedVoice;
                MuteUser(msg.imSessionID, eq, AgentID, thismember, false);
                break;

            case (byte)InstantMessageDialog.SessionSend:
                EnsureGroupChatIsStarted(msg.imSessionID);     //Make sure one exists
                ChatSession session = m_groupData.GetSession(msg.imSessionID);
                if (session != null)
                {
                    ChatSessionMember member = m_groupData.FindMember(msg.imSessionID, AgentID);
                    if (member.AvatarKey == AgentID && !member.MuteText)
                    {
                        IClientAPI msgclient = GetActiveClient(msg.toAgentID);
                        if (msgclient != null)
                        {
                            if (!member.HasBeenAdded)
                            {
                                msgclient.Scene.RequestModuleInterface <IEventQueueService>().ChatterboxInvitation(
                                    session.SessionID
                                    , session.Name
                                    , msg.fromAgentID
                                    , msg.message
                                    , member.AvatarKey
                                    , msg.fromAgentName
                                    , msg.dialog
                                    , msg.timestamp
                                    , msg.offline == 1
                                    , (int)msg.ParentEstateID
                                    , msg.Position
                                    , 1
                                    , msg.imSessionID
                                    , true
                                    , Utils.StringToBytes(session.Name)
                                    , msgclient.Scene.RegionInfo.RegionHandle
                                    );
                            }
                            // Deliver locally, directly
                            if (m_debugEnabled)
                            {
                                MainConsole.Instance.DebugFormat("[GROUPS-MESSAGING]: Delivering to {0} locally", msgclient.Name);
                            }
                            msgclient.SendInstantMessage(msg);
                        }
                    }
                }
                break;

            default:
                MainConsole.Instance.WarnFormat("[GROUPS-MESSAGING]: I don't know how to proccess a {0} message.",
                                                ((InstantMessageDialog)msg.dialog).ToString());
                break;
            }
        }