Update svn properties.

0.6.5-rc1
Jeff Ames 2009-04-21 15:30:03 +00:00
parent d2d0b9877f
commit 13f5dd5f35
9 changed files with 2702 additions and 2702 deletions

View File

@ -1,85 +1,85 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSim Project nor the * * Neither the name of the OpenSim Project nor the
* names of its contributors may be used to endorse or promote products * names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission. * derived from this software without specific prior written permission.
* *
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using OpenMetaverse; using OpenMetaverse;
using OpenSim.Framework; using OpenSim.Framework;
namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
{ {
interface IGroupDataProvider interface IGroupDataProvider
{ {
UUID CreateGroup(string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish, UUID founderID); UUID CreateGroup(string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish, UUID founderID);
void UpdateGroup(UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish); void UpdateGroup(UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish);
GroupRecord GetGroupRecord(UUID GroupID, string GroupName); GroupRecord GetGroupRecord(UUID GroupID, string GroupName);
List<DirGroupsReplyData> FindGroups(string search); List<DirGroupsReplyData> FindGroups(string search);
List<GroupMembersData> GetGroupMembers(UUID GroupID); List<GroupMembersData> GetGroupMembers(UUID GroupID);
void AddGroupRole(UUID groupID, UUID roleID, string name, string description, string title, ulong powers); void AddGroupRole(UUID groupID, UUID roleID, string name, string description, string title, ulong powers);
void UpdateGroupRole(UUID groupID, UUID roleID, string name, string description, string title, ulong powers); void UpdateGroupRole(UUID groupID, UUID roleID, string name, string description, string title, ulong powers);
void RemoveGroupRole(UUID groupID, UUID roleID); void RemoveGroupRole(UUID groupID, UUID roleID);
List<GroupRolesData> GetGroupRoles(UUID GroupID); List<GroupRolesData> GetGroupRoles(UUID GroupID);
List<GroupRoleMembersData> GetGroupRoleMembers(UUID GroupID); List<GroupRoleMembersData> GetGroupRoleMembers(UUID GroupID);
void AddAgentToGroup(UUID AgentID, UUID GroupID, UUID RoleID); void AddAgentToGroup(UUID AgentID, UUID GroupID, UUID RoleID);
void RemoveAgentFromGroup(UUID AgentID, UUID GroupID); void RemoveAgentFromGroup(UUID AgentID, UUID GroupID);
void AddAgentToGroupInvite(UUID inviteID, UUID groupID, UUID roleID, UUID agentID); void AddAgentToGroupInvite(UUID inviteID, UUID groupID, UUID roleID, UUID agentID);
GroupInviteInfo GetAgentToGroupInvite(UUID inviteID); GroupInviteInfo GetAgentToGroupInvite(UUID inviteID);
void RemoveAgentToGroupInvite(UUID inviteID); void RemoveAgentToGroupInvite(UUID inviteID);
void AddAgentToGroupRole(UUID AgentID, UUID GroupID, UUID RoleID); void AddAgentToGroupRole(UUID AgentID, UUID GroupID, UUID RoleID);
void RemoveAgentFromGroupRole(UUID AgentID, UUID GroupID, UUID RoleID); void RemoveAgentFromGroupRole(UUID AgentID, UUID GroupID, UUID RoleID);
List<GroupRolesData> GetAgentGroupRoles(UUID AgentID, UUID GroupID); List<GroupRolesData> GetAgentGroupRoles(UUID AgentID, UUID GroupID);
void SetAgentActiveGroup(UUID AgentID, UUID GroupID); void SetAgentActiveGroup(UUID AgentID, UUID GroupID);
GroupMembershipData GetAgentActiveMembership(UUID AgentID); GroupMembershipData GetAgentActiveMembership(UUID AgentID);
void SetAgentActiveGroupRole(UUID AgentID, UUID GroupID, UUID RoleID); void SetAgentActiveGroupRole(UUID AgentID, UUID GroupID, UUID RoleID);
void SetAgentGroupInfo(UUID AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile); void SetAgentGroupInfo(UUID AgentID, UUID GroupID, bool AcceptNotices, bool ListInProfile);
GroupMembershipData GetAgentGroupMembership(UUID AgentID, UUID GroupID); GroupMembershipData GetAgentGroupMembership(UUID AgentID, UUID GroupID);
List<GroupMembershipData> GetAgentGroupMemberships(UUID AgentID); List<GroupMembershipData> GetAgentGroupMemberships(UUID AgentID);
void AddGroupNotice(UUID groupID, UUID noticeID, string fromName, string subject, string message, byte[] binaryBucket); void AddGroupNotice(UUID groupID, UUID noticeID, string fromName, string subject, string message, byte[] binaryBucket);
GroupNoticeInfo GetGroupNotice(UUID noticeID); GroupNoticeInfo GetGroupNotice(UUID noticeID);
List<GroupNoticeData> GetGroupNotices(UUID GroupID); List<GroupNoticeData> GetGroupNotices(UUID GroupID);
} }
public class GroupInviteInfo public class GroupInviteInfo
{ {
public UUID GroupID = UUID.Zero; public UUID GroupID = UUID.Zero;
public UUID RoleID = UUID.Zero; public UUID RoleID = UUID.Zero;
public UUID AgentID = UUID.Zero; public UUID AgentID = UUID.Zero;
public UUID InviteID = UUID.Zero; public UUID InviteID = UUID.Zero;
} }
} }

View File

@ -1,430 +1,430 @@
/* /*
* Copyright (c) Contributors, http://opensimulator.org/ * Copyright (c) Contributors, http://opensimulator.org/
* See CONTRIBUTORS.TXT for a full list of copyright holders. * See CONTRIBUTORS.TXT for a full list of copyright holders.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright * * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer. * notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright * * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the * notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution. * documentation and/or other materials provided with the distribution.
* * Neither the name of the OpenSim Project nor the * * Neither the name of the OpenSim Project nor the
* names of its contributors may be used to endorse or promote products * names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission. * derived from this software without specific prior written permission.
* *
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
using System; using System;
//using System.Collections; //using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
using log4net; using log4net;
using Nini.Config; using Nini.Config;
using OpenMetaverse; using OpenMetaverse;
using OpenMetaverse.StructuredData; using OpenMetaverse.StructuredData;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Region.CoreModules.Framework.EventQueue; using OpenSim.Region.CoreModules.Framework.EventQueue;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
using Caps = OpenSim.Framework.Communications.Capabilities.Caps; using Caps = OpenSim.Framework.Communications.Capabilities.Caps;
namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups
{ {
public class XmlRpcGroupsMessaging : INonSharedRegionModule public class XmlRpcGroupsMessaging : INonSharedRegionModule
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private List<Scene> m_SceneList = new List<Scene>(); private List<Scene> m_SceneList = new List<Scene>();
// must be NonShared for this to work, otherewise we may actually get multiple active clients // must be NonShared for this to work, otherewise we may actually get multiple active clients
private Dictionary<Guid, IClientAPI> m_ActiveClients = new Dictionary<Guid, IClientAPI>(); private Dictionary<Guid, IClientAPI> m_ActiveClients = new Dictionary<Guid, IClientAPI>();
private IMessageTransferModule m_MsgTransferModule = null; private IMessageTransferModule m_MsgTransferModule = null;
private IGroupsModule m_GroupsModule = null; private IGroupsModule m_GroupsModule = null;
// Config Options // Config Options
private bool m_GroupMessagingEnabled = true; private bool m_GroupMessagingEnabled = true;
private bool m_debugEnabled = true; private bool m_debugEnabled = true;
#region IRegionModule Members #region IRegionModule Members
public void Initialise(IConfigSource config) public void Initialise(IConfigSource config)
{ {
IConfig groupsConfig = config.Configs["Groups"]; IConfig groupsConfig = config.Configs["Groups"];
m_log.Info("[GROUPS-MESSAGING]: Initializing XmlRpcGroupsMessaging"); m_log.Info("[GROUPS-MESSAGING]: Initializing XmlRpcGroupsMessaging");
if (groupsConfig == null) if (groupsConfig == null)
{ {
// Do not run this module by default. // Do not run this module by default.
m_log.Info("[GROUPS-MESSAGING]: No config found in OpenSim.ini -- not enabling XmlRpcGroupsMessaging"); m_log.Info("[GROUPS-MESSAGING]: No config found in OpenSim.ini -- not enabling XmlRpcGroupsMessaging");
return; return;
} }
else else
{ {
if (!groupsConfig.GetBoolean("Enabled", false)) if (!groupsConfig.GetBoolean("Enabled", false))
{ {
m_log.Info("[GROUPS-MESSAGING]: Groups disabled in configuration"); m_log.Info("[GROUPS-MESSAGING]: Groups disabled in configuration");
return; return;
} }
if (groupsConfig.GetString("Module", "Default") != "XmlRpcGroups") if (groupsConfig.GetString("Module", "Default") != "XmlRpcGroups")
{ {
m_log.Info("[GROUPS-MESSAGING]: Config Groups Module not set to XmlRpcGroups"); m_log.Info("[GROUPS-MESSAGING]: Config Groups Module not set to XmlRpcGroups");
m_GroupMessagingEnabled = false; m_GroupMessagingEnabled = false;
return; return;
} }
m_GroupMessagingEnabled = groupsConfig.GetBoolean("XmlRpcMessagingEnabled", true); m_GroupMessagingEnabled = groupsConfig.GetBoolean("XmlRpcMessagingEnabled", true);
if (!m_GroupMessagingEnabled) if (!m_GroupMessagingEnabled)
{ {
m_log.Info("[GROUPS-MESSAGING]: XmlRpcGroups Messaging disabled."); m_log.Info("[GROUPS-MESSAGING]: XmlRpcGroups Messaging disabled.");
return; return;
} }
m_debugEnabled = groupsConfig.GetBoolean("XmlRpcDebugEnabled", true); m_debugEnabled = groupsConfig.GetBoolean("XmlRpcDebugEnabled", true);
} }
m_log.Info("[GROUPS-MESSAGING]: XmlRpcGroupsMessaging starting up"); m_log.Info("[GROUPS-MESSAGING]: XmlRpcGroupsMessaging starting up");
} }
public void AddRegion(Scene scene) public void AddRegion(Scene scene)
{ {
} }
public void RegionLoaded(Scene scene) public void RegionLoaded(Scene scene)
{ {
if (!m_GroupMessagingEnabled) if (!m_GroupMessagingEnabled)
return; return;
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
m_GroupsModule = scene.RequestModuleInterface<IGroupsModule>(); m_GroupsModule = scene.RequestModuleInterface<IGroupsModule>();
// No groups module, no groups messaging // No groups module, no groups messaging
if (m_GroupsModule == null) if (m_GroupsModule == null)
{ {
m_GroupMessagingEnabled = false; m_GroupMessagingEnabled = false;
m_log.Info("[GROUPS-MESSAGING]: Could not get IGroupsModule, XmlRpcGroupsMessaging is now disabled."); m_log.Info("[GROUPS-MESSAGING]: Could not get IGroupsModule, XmlRpcGroupsMessaging is now disabled.");
Close(); Close();
return; return;
} }
m_MsgTransferModule = scene.RequestModuleInterface<IMessageTransferModule>(); m_MsgTransferModule = scene.RequestModuleInterface<IMessageTransferModule>();
// No message transfer module, no groups messaging // No message transfer module, no groups messaging
if (m_MsgTransferModule == null) if (m_MsgTransferModule == null)
{ {
m_GroupMessagingEnabled = false; m_GroupMessagingEnabled = false;
m_log.Info("[GROUPS-MESSAGING]: Could not get MessageTransferModule"); m_log.Info("[GROUPS-MESSAGING]: Could not get MessageTransferModule");
Close(); Close();
return; return;
} }
m_SceneList.Add(scene); m_SceneList.Add(scene);
scene.EventManager.OnNewClient += OnNewClient; scene.EventManager.OnNewClient += OnNewClient;
scene.EventManager.OnClientClosed += OnClientClosed; scene.EventManager.OnClientClosed += OnClientClosed;
scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage;
} }
public void RemoveRegion(Scene scene) public void RemoveRegion(Scene scene)
{ {
if (!m_GroupMessagingEnabled) if (!m_GroupMessagingEnabled)
return; return;
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
m_SceneList.Remove(scene); m_SceneList.Remove(scene);
} }
public void Close() public void Close()
{ {
if (!m_GroupMessagingEnabled) if (!m_GroupMessagingEnabled)
return; return;
m_log.Debug("[GROUPS-MESSAGING]: Shutting down XmlRpcGroupsMessaging module."); m_log.Debug("[GROUPS-MESSAGING]: Shutting down XmlRpcGroupsMessaging module.");
foreach (Scene scene in m_SceneList) foreach (Scene scene in m_SceneList)
{ {
scene.EventManager.OnNewClient -= OnNewClient; scene.EventManager.OnNewClient -= OnNewClient;
scene.EventManager.OnClientClosed -= OnClientClosed; scene.EventManager.OnClientClosed -= OnClientClosed;
scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage; scene.EventManager.OnIncomingInstantMessage -= OnGridInstantMessage;
} }
m_SceneList.Clear(); m_SceneList.Clear();
m_GroupsModule = null; m_GroupsModule = null;
m_MsgTransferModule = null; m_MsgTransferModule = null;
} }
public string Name public string Name
{ {
get { return "XmlRpcGroupsMessaging"; } get { return "XmlRpcGroupsMessaging"; }
} }
#endregion #endregion
#region SimGridEventHandlers #region SimGridEventHandlers
private void OnNewClient(IClientAPI client) private void OnNewClient(IClientAPI client)
{ {
RegisterClientAgent(client); RegisterClientAgent(client);
} }
private void OnClientClosed(UUID AgentId) private void OnClientClosed(UUID AgentId)
{ {
UnregisterClientAgent(AgentId); UnregisterClientAgent(AgentId);
} }
private void OnGridInstantMessage(GridInstantMessage msg) private void OnGridInstantMessage(GridInstantMessage msg)
{ {
m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
DebugGridInstantMessage(msg); DebugGridInstantMessage(msg);
// Incoming message from a group // Incoming message from a group
if ((msg.dialog == (byte)InstantMessageDialog.SessionSend) && (msg.fromGroup == true)) if ((msg.dialog == (byte)InstantMessageDialog.SessionSend) && (msg.fromGroup == true))
{ {
if (m_ActiveClients.ContainsKey(msg.toAgentID)) if (m_ActiveClients.ContainsKey(msg.toAgentID))
{ {
UUID GroupID = new UUID(msg.fromAgentID); UUID GroupID = new UUID(msg.fromAgentID);
// SendMessageToGroup(im); // SendMessageToGroup(im);
GroupRecord GroupInfo = m_GroupsModule.GetGroupRecord(GroupID); GroupRecord GroupInfo = m_GroupsModule.GetGroupRecord(GroupID);
if (GroupInfo != null) if (GroupInfo != null)
{ {
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] Sending chatterbox invite instant message"); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] Sending chatterbox invite instant message");
// Force? open the group session dialog??? // Force? open the group session dialog???
IEventQueue eq = m_ActiveClients[msg.toAgentID].Scene.RequestModuleInterface<IEventQueue>(); IEventQueue eq = m_ActiveClients[msg.toAgentID].Scene.RequestModuleInterface<IEventQueue>();
eq.ChatterboxInvitation( eq.ChatterboxInvitation(
GroupID GroupID
, GroupInfo.GroupName , GroupInfo.GroupName
, new UUID(msg.fromAgentID) , new UUID(msg.fromAgentID)
, msg.message, new UUID(msg.toAgentID) , msg.message, new UUID(msg.toAgentID)
, msg.fromAgentName , msg.fromAgentName
, msg.dialog , msg.dialog
, msg.timestamp , msg.timestamp
, msg.offline==1 , msg.offline==1
, (int)msg.ParentEstateID , (int)msg.ParentEstateID
, msg.Position , msg.Position
, 1 , 1
, new UUID(msg.imSessionID) , new UUID(msg.imSessionID)
, msg.fromGroup , msg.fromGroup
, Utils.StringToBytes(GroupInfo.GroupName) , Utils.StringToBytes(GroupInfo.GroupName)
); );
eq.ChatterBoxSessionAgentListUpdates( eq.ChatterBoxSessionAgentListUpdates(
new UUID(GroupID) new UUID(GroupID)
, new UUID(msg.fromAgentID) , new UUID(msg.fromAgentID)
, new UUID(msg.toAgentID) , new UUID(msg.toAgentID)
, false //canVoiceChat , false //canVoiceChat
, false //isModerator , false //isModerator
, false //text mute , false //text mute
); );
} }
} }
} }
} }
#endregion #endregion
#region ClientEvents #region ClientEvents
private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im)
{ {
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
DebugGridInstantMessage(im); DebugGridInstantMessage(im);
// Start group IM session // Start group IM session
if ((im.dialog == (byte)InstantMessageDialog.SessionGroupStart)) if ((im.dialog == (byte)InstantMessageDialog.SessionGroupStart))
{ {
UUID GroupID = new UUID(im.toAgentID); UUID GroupID = new UUID(im.toAgentID);
GroupRecord GroupInfo = m_GroupsModule.GetGroupRecord(GroupID); GroupRecord GroupInfo = m_GroupsModule.GetGroupRecord(GroupID);
if (GroupInfo != null) if (GroupInfo != null)
{ {
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] Start Group Session for {0}", GroupInfo.GroupName); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] Start Group Session for {0}", GroupInfo.GroupName);
// remoteClient.SendInstantMessage(new GridInstantMessage(remoteClient.Scene, GroupID, GroupProfile.Name, remoteClient.AgentId, (byte)OpenMetaverse.InstantMessageDialog.SessionSend, true, "Welcome", GroupID, false, new Vector3(), new byte[0])); // remoteClient.SendInstantMessage(new GridInstantMessage(remoteClient.Scene, GroupID, GroupProfile.Name, remoteClient.AgentId, (byte)OpenMetaverse.InstantMessageDialog.SessionSend, true, "Welcome", GroupID, false, new Vector3(), new byte[0]));
ChatterBoxSessionStartReplyViaCaps(remoteClient, GroupInfo.GroupName, GroupID); ChatterBoxSessionStartReplyViaCaps(remoteClient, GroupInfo.GroupName, GroupID);
IEventQueue queue = remoteClient.Scene.RequestModuleInterface<IEventQueue>(); IEventQueue queue = remoteClient.Scene.RequestModuleInterface<IEventQueue>();
queue.ChatterBoxSessionAgentListUpdates( queue.ChatterBoxSessionAgentListUpdates(
new UUID(GroupID) new UUID(GroupID)
, new UUID(im.fromAgentID) , new UUID(im.fromAgentID)
, new UUID(im.toAgentID) , new UUID(im.toAgentID)
, false //canVoiceChat , false //canVoiceChat
, false //isModerator , false //isModerator
, false //text mute , false //text mute
); );
} }
} }
// Send a message to a group // Send a message to a group
if ((im.dialog == (byte)InstantMessageDialog.SessionSend)) if ((im.dialog == (byte)InstantMessageDialog.SessionSend))
{ {
UUID GroupID = new UUID(im.toAgentID); UUID GroupID = new UUID(im.toAgentID);
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] Send message to session for group {0}", GroupID); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] Send message to session for group {0}", GroupID);
SendMessageToGroup(im, GroupID); SendMessageToGroup(im, GroupID);
} }
// Incoming message from a group // Incoming message from a group
if ((im.dialog == (byte)InstantMessageDialog.SessionSend) && (im.fromGroup == true)) if ((im.dialog == (byte)InstantMessageDialog.SessionSend) && (im.fromGroup == true))
{ {
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] Message from group session {0} going to agent {1}", im.fromAgentID, im.toAgentID); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] Message from group session {0} going to agent {1}", im.fromAgentID, im.toAgentID);
} }
} }
#endregion #endregion
private void RegisterClientAgent(IClientAPI client) private void RegisterClientAgent(IClientAPI client)
{ {
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
lock (m_ActiveClients) lock (m_ActiveClients)
{ {
if (!m_ActiveClients.ContainsKey(client.AgentId.Guid)) if (!m_ActiveClients.ContainsKey(client.AgentId.Guid))
{ {
client.OnInstantMessage += OnInstantMessage; client.OnInstantMessage += OnInstantMessage;
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] OnInstantMessage registered for {0}", client.Name); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] OnInstantMessage registered for {0}", client.Name);
m_ActiveClients.Add(client.AgentId.Guid, client); m_ActiveClients.Add(client.AgentId.Guid, client);
} }
else else
{ {
// Remove old client connection for this agent // Remove old client connection for this agent
UnregisterClientAgent(client.AgentId); UnregisterClientAgent(client.AgentId);
// Add new client connection // Add new client connection
RegisterClientAgent(client); RegisterClientAgent(client);
} }
} }
} }
private void UnregisterClientAgent(UUID agentID) private void UnregisterClientAgent(UUID agentID)
{ {
lock (m_ActiveClients) lock (m_ActiveClients)
{ {
if (m_ActiveClients.ContainsKey(agentID.Guid)) if (m_ActiveClients.ContainsKey(agentID.Guid))
{ {
IClientAPI client = m_ActiveClients[agentID.Guid]; IClientAPI client = m_ActiveClients[agentID.Guid];
client.OnInstantMessage -= OnInstantMessage; client.OnInstantMessage -= OnInstantMessage;
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] OnInstantMessage unregistered for {0}", client.Name); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] OnInstantMessage unregistered for {0}", client.Name);
m_ActiveClients.Remove(agentID.Guid); m_ActiveClients.Remove(agentID.Guid);
} }
else else
{ {
m_log.InfoFormat("[GROUPS-MESSAGING] Client closed that wasn't registered here."); m_log.InfoFormat("[GROUPS-MESSAGING] Client closed that wasn't registered here.");
} }
} }
} }
private void SendMessageToGroup(GridInstantMessage im, UUID groupID) private void SendMessageToGroup(GridInstantMessage im, UUID groupID)
{ {
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
GridInstantMessage msg = new GridInstantMessage(); GridInstantMessage msg = new GridInstantMessage();
msg.imSessionID = im.imSessionID; msg.imSessionID = im.imSessionID;
msg.fromAgentID = im.imSessionID; // GroupID msg.fromAgentID = im.imSessionID; // GroupID
msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); msg.timestamp = (uint)Util.UnixTimeSinceEpoch();
msg.fromAgentName = im.fromAgentName; msg.fromAgentName = im.fromAgentName;
msg.message = im.message; msg.message = im.message;
msg.dialog = im.dialog; msg.dialog = im.dialog;
msg.fromGroup = true; msg.fromGroup = true;
msg.offline = (byte)0; msg.offline = (byte)0;
msg.ParentEstateID = im.ParentEstateID; msg.ParentEstateID = im.ParentEstateID;
msg.Position = im.Position; msg.Position = im.Position;
msg.RegionID = im.RegionID; msg.RegionID = im.RegionID;
msg.binaryBucket = new byte[1] { 0 }; msg.binaryBucket = new byte[1] { 0 };
foreach (GroupMembersData member in m_GroupsModule.GroupMembersRequest(null, groupID)) foreach (GroupMembersData member in m_GroupsModule.GroupMembersRequest(null, groupID))
{ {
msg.toAgentID = member.AgentID.Guid; msg.toAgentID = member.AgentID.Guid;
m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { }); m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { });
} }
} }
void ChatterBoxSessionStartReplyViaCaps(IClientAPI remoteClient, string groupName, UUID groupID) void ChatterBoxSessionStartReplyViaCaps(IClientAPI remoteClient, string groupName, UUID groupID)
{ {
if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); if (m_debugEnabled) m_log.InfoFormat("[GROUPS-MESSAGING] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);
OSDMap moderatedMap = new OSDMap(4); OSDMap moderatedMap = new OSDMap(4);
moderatedMap.Add("voice", OSD.FromBoolean(false)); moderatedMap.Add("voice", OSD.FromBoolean(false));
OSDMap sessionMap = new OSDMap(4); OSDMap sessionMap = new OSDMap(4);
sessionMap.Add("moderated_mode", moderatedMap); sessionMap.Add("moderated_mode", moderatedMap);
sessionMap.Add("session_name", OSD.FromString(groupName)); sessionMap.Add("session_name", OSD.FromString(groupName));
sessionMap.Add("type", OSD.FromInteger(0)); sessionMap.Add("type", OSD.FromInteger(0));
sessionMap.Add("voice_enabled", OSD.FromBoolean(false)); sessionMap.Add("voice_enabled", OSD.FromBoolean(false));
OSDMap bodyMap = new OSDMap(4); OSDMap bodyMap = new OSDMap(4);
bodyMap.Add("session_id", OSD.FromUUID(groupID)); bodyMap.Add("session_id", OSD.FromUUID(groupID));
bodyMap.Add("temp_session_id", OSD.FromUUID(groupID)); bodyMap.Add("temp_session_id", OSD.FromUUID(groupID));
bodyMap.Add("success", OSD.FromBoolean(true)); bodyMap.Add("success", OSD.FromBoolean(true));
bodyMap.Add("session_info", sessionMap); bodyMap.Add("session_info", sessionMap);
IEventQueue queue = remoteClient.Scene.RequestModuleInterface<IEventQueue>(); IEventQueue queue = remoteClient.Scene.RequestModuleInterface<IEventQueue>();
if (queue != null) if (queue != null)
{ {
queue.Enqueue(EventQueueHelper.buildEvent("ChatterBoxSessionStartReply", bodyMap), remoteClient.AgentId); queue.Enqueue(EventQueueHelper.buildEvent("ChatterBoxSessionStartReply", bodyMap), remoteClient.AgentId);
} }
} }
private void DebugGridInstantMessage(GridInstantMessage im) private void DebugGridInstantMessage(GridInstantMessage im)
{ {
if (m_debugEnabled) if (m_debugEnabled)
{ {
m_log.WarnFormat("[GROUPS-MESSAGING] IM: fromGroup({0})", im.fromGroup ? "True" : "False"); m_log.WarnFormat("[GROUPS-MESSAGING] IM: fromGroup({0})", im.fromGroup ? "True" : "False");
m_log.WarnFormat("[GROUPS-MESSAGING] IM: Dialog({0})", ((InstantMessageDialog)im.dialog).ToString()); m_log.WarnFormat("[GROUPS-MESSAGING] IM: Dialog({0})", ((InstantMessageDialog)im.dialog).ToString());
m_log.WarnFormat("[GROUPS-MESSAGING] IM: fromAgentID({0})", im.fromAgentID.ToString()); m_log.WarnFormat("[GROUPS-MESSAGING] IM: fromAgentID({0})", im.fromAgentID.ToString());
m_log.WarnFormat("[GROUPS-MESSAGING] IM: fromAgentName({0})", im.fromAgentName.ToString()); m_log.WarnFormat("[GROUPS-MESSAGING] IM: fromAgentName({0})", im.fromAgentName.ToString());
m_log.WarnFormat("[GROUPS-MESSAGING] IM: imSessionID({0})", im.imSessionID.ToString()); m_log.WarnFormat("[GROUPS-MESSAGING] IM: imSessionID({0})", im.imSessionID.ToString());
m_log.WarnFormat("[GROUPS-MESSAGING] IM: message({0})", im.message.ToString()); m_log.WarnFormat("[GROUPS-MESSAGING] IM: message({0})", im.message.ToString());
m_log.WarnFormat("[GROUPS-MESSAGING] IM: offline({0})", im.offline.ToString()); m_log.WarnFormat("[GROUPS-MESSAGING] IM: offline({0})", im.offline.ToString());
m_log.WarnFormat("[GROUPS-MESSAGING] IM: toAgentID({0})", im.toAgentID.ToString()); m_log.WarnFormat("[GROUPS-MESSAGING] IM: toAgentID({0})", im.toAgentID.ToString());
m_log.WarnFormat("[GROUPS-MESSAGING] IM: binaryBucket({0})", OpenMetaverse.Utils.BytesToHexString(im.binaryBucket, "BinaryBucket")); m_log.WarnFormat("[GROUPS-MESSAGING] IM: binaryBucket({0})", OpenMetaverse.Utils.BytesToHexString(im.binaryBucket, "BinaryBucket"));
} }
} }
} }
} }

View File

@ -1,14 +1,14 @@
<Addin id="OpenSim.Region.OptionalModules" version="0.1"> <Addin id="OpenSim.Region.OptionalModules" version="0.1">
<Runtime> <Runtime>
<Import assembly="OpenSim.Region.OptionalModules.dll"/> <Import assembly="OpenSim.Region.OptionalModules.dll"/>
</Runtime> </Runtime>
<Dependencies> <Dependencies>
<Addin id="OpenSim" version="0.5" /> <Addin id="OpenSim" version="0.5" />
</Dependencies> </Dependencies>
<Extension path = "/OpenSim/RegionModules"> <Extension path = "/OpenSim/RegionModules">
<RegionModule id="XmlRpcGroups" type="OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.XmlRpcGroupsModule" /> <RegionModule id="XmlRpcGroups" type="OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.XmlRpcGroupsModule" />
<RegionModule id="XmlRpcGroupsMessaging" type="OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.XmlRpcGroupsMessaging" /> <RegionModule id="XmlRpcGroupsMessaging" type="OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups.XmlRpcGroupsMessaging" />
</Extension> </Extension>
</Addin> </Addin>

View File

@ -1,39 +1,39 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces; using OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces;
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{ {
class ExtensionHandler : IExtension class ExtensionHandler : IExtension
{ {
private readonly Dictionary<Type, object> m_instances; private readonly Dictionary<Type, object> m_instances;
public ExtensionHandler(Dictionary<Type, object> instances) public ExtensionHandler(Dictionary<Type, object> instances)
{ {
m_instances = instances; m_instances = instances;
} }
public T Get<T>() public T Get<T>()
{ {
return (T) m_instances[typeof (T)]; return (T) m_instances[typeof (T)];
} }
public bool TryGet<T>(out T extension) public bool TryGet<T>(out T extension)
{ {
if (!m_instances.ContainsKey(typeof(T))) if (!m_instances.ContainsKey(typeof(T)))
{ {
extension = default(T); extension = default(T);
return false; return false;
} }
extension = Get<T>(); extension = Get<T>();
return true; return true;
} }
public bool Has<T>() public bool Has<T>()
{ {
return m_instances.ContainsKey(typeof (T)); return m_instances.ContainsKey(typeof (T));
} }
} }
} }

View File

@ -1,7 +1,7 @@
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
{ {
public interface IMRMModule public interface IMRMModule
{ {
void RegisterExtension<T>(T instance); void RegisterExtension<T>(T instance);
} }
} }

View File

@ -1,13 +1,13 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Interfaces
{ {
public interface IExtension public interface IExtension
{ {
T Get<T>(); T Get<T>();
bool TryGet<T>(out T extension); bool TryGet<T>(out T extension);
bool Has<T>(); bool Has<T>();
} }
} }

View File

@ -1,48 +1,48 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using OpenMetaverse; using OpenMetaverse;
namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Object namespace OpenSim.Region.OptionalModules.Scripting.Minimodule.Object
{ {
public enum SculptType public enum SculptType
{ {
Default = 1, Default = 1,
Sphere = 1, Sphere = 1,
Torus = 2, Torus = 2,
Plane = 3, Plane = 3,
Cylinder = 4 Cylinder = 4
} }
public enum HoleShape public enum HoleShape
{ {
Default = 0x00, Default = 0x00,
Circle = 0x10, Circle = 0x10,
Square = 0x20, Square = 0x20,
Triangle = 0x30 Triangle = 0x30
} }
public enum PrimType public enum PrimType
{ {
NotPrimitive = 255, NotPrimitive = 255,
Box = 0, Box = 0,
Cylinder = 1, Cylinder = 1,
Prism = 2, Prism = 2,
Sphere = 3, Sphere = 3,
Torus = 4, Torus = 4,
Tube = 5, Tube = 5,
Ring = 6, Ring = 6,
Sculpt = 7 Sculpt = 7
} }
public interface IObjectShape public interface IObjectShape
{ {
UUID SculptMap { get; set; } UUID SculptMap { get; set; }
SculptType SculptType { get; set; } SculptType SculptType { get; set; }
HoleShape HoleType { get; set; } HoleShape HoleType { get; set; }
Double HoleSize { get; set; } Double HoleSize { get; set; }
PrimType PrimType { get; set; } PrimType PrimType { get; set; }
} }
} }