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; } }