Example #1
0
        /// <summary>
        /// Add this member to the friend conference
        /// </summary>
        /// <param name="member"></param>
        /// <param name="SessionID"></param>
        public void AddMemberToGroup(ChatSessionMember member, UUID SessionID)
        {
            ChatSession session;

            ChatSessions.TryGetValue(SessionID, out session);
            session.Members.Add(member);
        }
Example #2
0
        void UpdateParticipantList()
        {
            if (InvokeRequired)
            {
                if (!instance.MonoRuntime || IsHandleCreated)
                {
                    BeginInvoke(new MethodInvoker(UpdateParticipantList));
                }
                return;
            }

            try
            {
                lock (AvatarListSyncRoot)
                {
                    Participants.BeginUpdate();
                    Participants.Items.Clear();

                    List <ChatSessionMember> participants;

                    if (client.Self.GroupChatSessions.TryGetValue(SessionId, out participants))
                    {
                        ChatSessionMember[] members = participants.ToArray();
                        for (int i = 0; i < members.Length; i++)
                        {
                            ChatSessionMember participant = members[i];
                            ListViewItem      item        = new ListViewItem();
                            item.Name = participant.AvatarKey.ToString();
                            item.Text = instance.Names.Get(participant.AvatarKey);
                            item.Tag  = participant.AvatarKey;

                            if (participant.IsModerator)
                            {
                                item.Font = new Font(item.Font, FontStyle.Bold);
                            }
                            Participants.Items.Add(item);
                        }
                    }

                    Participants.Sort();
                    Participants.EndUpdate();
                }
            }
            catch (Exception)
            {
                Participants.EndUpdate();
            }
        }
Example #3
0
        /// <summary>
        /// Remove the member from this session
        /// </summary>
        /// <param name="client"></param>
        /// <param name="im"></param>
        public void DropMemberFromSession(IClientAPI client, GridInstantMessage im)
        {
            ChatSession session;

            ChatSessions.TryGetValue(UUID.Parse(im.imSessionID.ToString()), out session);
            if (session == null)
            {
                return;
            }
            ChatSessionMember member = new ChatSessionMember()
            {
                AvatarKey = UUID.Zero
            };

            foreach (ChatSessionMember testmember in session.Members)
            {
                if (member.AvatarKey == UUID.Parse(im.fromAgentID.ToString()))
                {
                    member = testmember;
                }
            }

            if (member.AvatarKey != UUID.Zero)
            {
                session.Members.Remove(member);
            }

            if (session.Members.Count == 0)
            {
                ChatSessions.Remove(session.SessionID);
                return;
            }

            OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block = new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock();
            block.AgentID      = member.AvatarKey;
            block.CanVoiceChat = member.CanVoiceChat;
            block.IsModerator  = member.IsModerator;
            block.MuteText     = member.MuteText;
            block.MuteVoice    = member.MuteVoice;
            block.Transition   = "LEAVE";
            IEventQueueService eq = client.Scene.RequestModuleInterface <IEventQueueService>();

            foreach (ChatSessionMember sessionMember in session.Members)
            {
                eq.ChatterBoxSessionAgentListUpdates(session.SessionID, new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock[] { block }, sessionMember.AvatarKey, "LEAVE", findScene(sessionMember.AvatarKey).RegionInfo.RegionHandle);
            }
        }
Example #4
0
        /// <summary>
        /// Add the agent to the in-memory session lists and give them the default permissions
        /// </summary>
        /// <param name="AgentID"></param>
        /// <param name="SessionID"></param>
        private void AddDefaultPermsMemberToSession(UUID AgentID, UUID SessionID)
        {
            ChatSession session;

            ChatSessions.TryGetValue(SessionID, out session);
            ChatSessionMember member = new ChatSessionMember()
            {
                AvatarKey    = AgentID,
                CanVoiceChat = true,
                IsModerator  = false,
                MuteText     = false,
                MuteVoice    = false,
                HasBeenAdded = false
            };

            session.Members.Add(member);
        }
Example #5
0
        /// <summary>
        /// Check whether the user has moderator permissions
        /// </summary>
        /// <param name="Agent"></param>
        /// <param name="sessionid"></param>
        /// <returns></returns>
        public bool CheckModeratorPermission(UUID Agent, UUID sessionid)
        {
            ChatSession session;

            ChatSessions.TryGetValue(sessionid, out session);
            ChatSessionMember thismember = new ChatSessionMember()
            {
                AvatarKey = UUID.Zero
            };

            foreach (ChatSessionMember testmember in session.Members)
            {
                if (testmember.AvatarKey == Agent)
                {
                    thismember = testmember;
                }
            }
            if (thismember == null)
            {
                return(false);
            }
            return(thismember.IsModerator);
        }
Example #6
0
        /// <summary>
        /// Find the member from X sessionID
        /// </summary>
        /// <param name="sessionid"></param>
        /// <param name="Agent"></param>
        /// <returns></returns>
        private ChatSessionMember FindMember(UUID sessionid, UUID Agent)
        {
            ChatSession session;

            ChatSessions.TryGetValue(sessionid, out session);
            if (session == null)
            {
                return(null);
            }
            ChatSessionMember thismember = new ChatSessionMember()
            {
                AvatarKey = UUID.Zero
            };

            foreach (ChatSessionMember testmember in session.Members)
            {
                if (testmember.AvatarKey == Agent)
                {
                    thismember = testmember;
                }
            }
            return(thismember);
        }
Example #7
0
 /// <summary>
 /// Find the member from X sessionID 
 /// </summary>
 /// <param name="sessionid"></param>
 /// <param name="Agent"></param>
 /// <returns></returns>
 private ChatSessionMember FindMember(UUID sessionid, UUID Agent)
 {
     ChatSession session;
     ChatSessions.TryGetValue(sessionid, out session);
     if (session == null)
         return null;
     ChatSessionMember thismember = new ChatSessionMember() { AvatarKey = UUID.Zero };
     foreach (ChatSessionMember testmember in session.Members)
     {
         if (testmember.AvatarKey == Agent)
             thismember = testmember;
     }
     return thismember;
 }
Example #8
0
 /// <summary>
 /// Add the agent to the in-memory session lists and give them the default permissions
 /// </summary>
 /// <param name="AgentID"></param>
 /// <param name="SessionID"></param>
 private void AddDefaultPermsMemberToSession(UUID AgentID, UUID SessionID)
 {
     ChatSession session;
     ChatSessions.TryGetValue(SessionID, out session);
     ChatSessionMember member = new ChatSessionMember()
     {
         AvatarKey = AgentID,
         CanVoiceChat = true,
         IsModerator = false,
         MuteText = false,
         MuteVoice = false,
         HasBeenAdded = false
     };
     session.Members.Add(member);
 }
Example #9
0
 /// <summary>
 /// Add this member to the friend conference
 /// </summary>
 /// <param name="member"></param>
 /// <param name="SessionID"></param>
 public void AddMemberToGroup(ChatSessionMember member, UUID SessionID)
 {
     ChatSession session;
     ChatSessions.TryGetValue(SessionID, out session);
     session.Members.Add(member);
 }
Example #10
0
        /// <summary>
        /// Remove the member from this session
        /// </summary>
        /// <param name="client"></param>
        /// <param name="im"></param>
        public void DropMemberFromSession(IClientAPI client, GridInstantMessage im)
        {
            ChatSession session;
            ChatSessions.TryGetValue(im.imSessionID, out session);
            if (session == null)
                return;
            ChatSessionMember member = new ChatSessionMember() { AvatarKey = UUID.Zero };
            foreach (ChatSessionMember testmember in session.Members)
            {
                if (member.AvatarKey == im.fromAgentID)
                    member = testmember;
            }

            if (member.AvatarKey != UUID.Zero)
                session.Members.Remove(member);

            if (session.Members.Count == 0)
            {
                ChatSessions.Remove(session.SessionID);
                return;
            }

            OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block = new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock();
            block.AgentID = member.AvatarKey;
            block.CanVoiceChat = member.CanVoiceChat;
            block.IsModerator = member.IsModerator;
            block.MuteText = member.MuteText;
            block.MuteVoice = member.MuteVoice;
            block.Transition = "LEAVE";
            IEventQueueService eq = client.Scene.RequestModuleInterface<IEventQueueService>();
            foreach (ChatSessionMember sessionMember in session.Members)
            {
                eq.ChatterBoxSessionAgentListUpdates(session.SessionID, new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock[] { block }, sessionMember.AvatarKey, "LEAVE", findScene(sessionMember.AvatarKey).RegionInfo.RegionHandle);
            }
        }
Example #11
0
 /// <summary>
 /// Check whether the user has moderator permissions
 /// </summary>
 /// <param name="Agent"></param>
 /// <param name="sessionid"></param>
 /// <returns></returns>
 public bool CheckModeratorPermission(UUID Agent, UUID sessionid)
 {
     ChatSession session;
     ChatSessions.TryGetValue(sessionid, out session);
     ChatSessionMember thismember = new ChatSessionMember() { AvatarKey = UUID.Zero };
     foreach (ChatSessionMember testmember in session.Members)
     {
         if (testmember.AvatarKey == Agent)
             thismember = testmember;
     }
     if (thismember == null)
         return false;
     return thismember.IsModerator;
 }
Example #12
0
        private Hashtable ProcessChatSessionRequest(Hashtable mDhttpMethod, UUID Agent)
        {
            OSDMap rm     = (OSDMap)OSDParser.DeserializeLLSDXml((string)mDhttpMethod["requestbody"]);
            string method = rm["method"].AsString();

            UUID sessionid = UUID.Parse(rm["session-id"].AsString());

            IScenePresence     SP = findScenePresence(Agent);
            IEventQueueService eq = SP.Scene.RequestModuleInterface <IEventQueueService>();

            if (method == "start conference")
            {
                //Create the session.
                CreateSession(new ChatSession()
                {
                    Members   = new List <ChatSessionMember>(),
                    SessionID = sessionid,
                    Name      = SP.Name + " Conference"
                });

                OSDArray parameters = (OSDArray)rm["params"];
                //Add other invited members.
                foreach (OSD param in parameters)
                {
                    AddDefaultPermsMemberToSession(param.AsUUID(), sessionid);
                }

                //Add us to the session!
                AddMemberToGroup(new ChatSessionMember()
                {
                    AvatarKey    = Agent,
                    CanVoiceChat = true,
                    IsModerator  = true,
                    MuteText     = false,
                    MuteVoice    = false,
                    HasBeenAdded = true
                }, sessionid);


                //Inform us about our room
                OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block = new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock();
                block.AgentID      = Agent;
                block.CanVoiceChat = true;
                block.IsModerator  = true;
                block.MuteText     = false;
                block.MuteVoice    = false;
                block.Transition   = "ENTER";
                eq.ChatterBoxSessionAgentListUpdates(sessionid, new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock[] { block }, Agent, "ENTER", findScene(Agent).RegionInfo.RegionHandle);

                OpenMetaverse.Messages.Linden.ChatterBoxSessionStartReplyMessage cs = new OpenMetaverse.Messages.Linden.ChatterBoxSessionStartReplyMessage();
                cs.VoiceEnabled   = true;
                cs.TempSessionID  = UUID.Random();
                cs.Type           = 1;
                cs.Success        = true;
                cs.SessionID      = sessionid;
                cs.SessionName    = SP.Name + " Conference";
                cs.ModeratedVoice = true;

                Hashtable responsedata = new Hashtable();
                responsedata["int_response_code"] = 200; //501; //410; //404;
                responsedata["content_type"]      = "text/plain";
                responsedata["keepalive"]         = false;
                OSDMap map = cs.Serialize();
                responsedata["str_response_string"] = map.ToString();
                return(responsedata);
            }
            else if (method == "accept invitation")
            {
                //They would like added to the group conversation
                List <OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock> Us          = new List <OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock>();
                List <OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock> NotUsAgents = new List <OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock>();

                ChatSession session = GetSession(sessionid);
                if (session != null)
                {
                    ChatSessionMember thismember = FindMember(sessionid, Agent);
                    //Tell all the other members about the incoming member
                    foreach (ChatSessionMember sessionMember in session.Members)
                    {
                        OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block = new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock();
                        block.AgentID      = sessionMember.AvatarKey;
                        block.CanVoiceChat = sessionMember.CanVoiceChat;
                        block.IsModerator  = sessionMember.IsModerator;
                        block.MuteText     = sessionMember.MuteText;
                        block.MuteVoice    = sessionMember.MuteVoice;
                        block.Transition   = "ENTER";
                        if (sessionMember.AvatarKey == thismember.AvatarKey)
                        {
                            Us.Add(block);
                        }
                        else
                        {
                            if (sessionMember.HasBeenAdded) // Don't add not joined yet agents. They don't watn to be here.
                            {
                                NotUsAgents.Add(block);
                            }
                        }
                    }
                    thismember.HasBeenAdded = true;
                    foreach (ChatSessionMember member in session.Members)
                    {
                        if (member.AvatarKey == thismember.AvatarKey)
                        {
                            //Tell 'us' about all the other agents in the group
                            eq.ChatterBoxSessionAgentListUpdates(session.SessionID, NotUsAgents.ToArray(), member.AvatarKey, "ENTER", findScene(Agent).RegionInfo.RegionHandle);
                        }
                        else
                        {
                            //Tell 'other' agents about the new agent ('us')
                            eq.ChatterBoxSessionAgentListUpdates(session.SessionID, Us.ToArray(), member.AvatarKey, "ENTER", findScene(Agent).RegionInfo.RegionHandle);
                        }
                    }
                }
                Hashtable responsedata = new Hashtable();
                responsedata["int_response_code"]   = 200; //501; //410; //404;
                responsedata["content_type"]        = "text/plain";
                responsedata["keepalive"]           = false;
                responsedata["str_response_string"] = "Accepted";
                return(responsedata);
            }
            else if (method == "mute update")
            {
                //Check if the user is a moderator
                Hashtable responsedata = new Hashtable();
                if (!CheckModeratorPermission(Agent, sessionid))
                {
                    responsedata["int_response_code"]   = 200; //501; //410; //404;
                    responsedata["content_type"]        = "text/plain";
                    responsedata["keepalive"]           = false;
                    responsedata["str_response_string"] = "Accepted";
                    return(responsedata);
                }

                OSDMap parameters  = (OSDMap)rm["params"];
                UUID   AgentID     = parameters["agent_id"].AsUUID();
                OSDMap muteInfoMap = (OSDMap)parameters["mute_info"];

                ChatSessionMember thismember = FindMember(sessionid, Agent);
                if (muteInfoMap.ContainsKey("text"))
                {
                    thismember.MuteText = muteInfoMap["text"].AsBoolean();
                }
                if (muteInfoMap.ContainsKey("voice"))
                {
                    thismember.MuteVoice = muteInfoMap["voice"].AsBoolean();
                }

                OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock block = new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock();
                block.AgentID      = thismember.AvatarKey;
                block.CanVoiceChat = thismember.CanVoiceChat;
                block.IsModerator  = thismember.IsModerator;
                block.MuteText     = thismember.MuteText;
                block.MuteVoice    = thismember.MuteVoice;
                block.Transition   = "ENTER";

                // Send an update to the affected user
                eq.ChatterBoxSessionAgentListUpdates(sessionid, new OpenMetaverse.Messages.Linden.ChatterBoxSessionAgentListUpdatesMessage.AgentUpdatesBlock[] { block }, AgentID, "", findScene(Agent).RegionInfo.RegionHandle);

                responsedata["int_response_code"]   = 200; //501; //410; //404;
                responsedata["content_type"]        = "text/plain";
                responsedata["keepalive"]           = false;
                responsedata["str_response_string"] = "Accepted";
                return(responsedata);
            }
            else
            {
                m_log.Warn("ChatSessionRequest : " + method);
                Hashtable responsedata = new Hashtable();
                responsedata["int_response_code"]   = 200; //501; //410; //404;
                responsedata["content_type"]        = "text/plain";
                responsedata["keepalive"]           = false;
                responsedata["str_response_string"] = "Accepted";
                return(responsedata);
            }
        }