* Committing some stuff I'm working to make it so I can commit an upcoming patch from Dahlia. IM type stuff. No big deal, not done.

0.6.0-stable
Teravus Ovares 2008-06-01 02:43:50 +00:00
parent fbaeb081aa
commit ff6c89f199
1 changed files with 169 additions and 3 deletions

View File

@ -24,10 +24,12 @@
* (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.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using libsecondlife; using libsecondlife;
using Nini.Config; using Nini.Config;
using Nwc.XmlRpc;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
@ -40,6 +42,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage
#region IRegionModule Members #region IRegionModule Members
private bool gridmode = false;
public void Initialise(Scene scene, IConfigSource config) public void Initialise(Scene scene, IConfigSource config)
{ {
lock (m_scenes) lock (m_scenes)
@ -47,6 +51,8 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage
if (m_scenes.Count == 0) if (m_scenes.Count == 0)
{ {
//scene.AddXmlRPCHandler("avatar_location_update", processPresenceUpdate); //scene.AddXmlRPCHandler("avatar_location_update", processPresenceUpdate);
scene.AddXmlRPCHandler("grid_instant_message", processXMLRPCGridInstantMessage);
ReadConfig(config);
} }
if (!m_scenes.Contains(scene)) if (!m_scenes.Contains(scene))
@ -58,6 +64,15 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage
} }
} }
private void ReadConfig(IConfigSource config)
{
IConfig cnf = config.Configs["Startup"];
if (cnf != null)
{
gridmode = cnf.GetBoolean("gridmode", false);
}
}
public void PostInitialise() public void PostInitialise()
{ {
} }
@ -137,9 +152,12 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage
} }
} }
if (gridmode)
{
// Still here, try send via Grid
// TODO
// Still here, try send via Grid }
// TODO
} }
// Trusty OSG1 called method. This method also gets called from the FriendsModule // Trusty OSG1 called method. This method also gets called from the FriendsModule
@ -154,5 +172,153 @@ namespace OpenSim.Region.Environment.Modules.Avatar.InstantMessage
new LLVector3(msg.Position.x, msg.Position.y, msg.Position.z), new LLUUID(msg.RegionID), new LLVector3(msg.Position.x, msg.Position.y, msg.Position.z), new LLUUID(msg.RegionID),
msg.binaryBucket); msg.binaryBucket);
} }
protected virtual XmlRpcResponse processXMLRPCGridInstantMessage(XmlRpcRequest request)
{
// various rational defaults
LLUUID fromAgentID = LLUUID.Zero;
LLUUID fromAgentSession = LLUUID.Zero;
LLUUID toAgentID = LLUUID.Zero;
LLUUID imSessionID = LLUUID.Zero;
uint timestamp = 0;
string fromAgentName = "";
string message = "";
byte dialog = (byte)0;
bool fromGroup = false;
byte offline = (byte)0;
uint ParentEstateID;
LLVector3 Position = LLVector3.Zero;
LLUUID RegionID = LLUUID.Zero ;
byte[] binaryBucket = new byte[0];
float pos_x = 0;
float pos_y = 0;
float pos_z = 0;
Hashtable requestData = (Hashtable)request.Params[0];
if (requestData.ContainsKey("from_agent_id") && requestData.ContainsKey("from_agent_session")
&& requestData.ContainsKey("to_agent_id") && requestData.ContainsKey("im_session_id")
&& requestData.ContainsKey("timestamp") && requestData.ContainsKey("from_agent_name")
&& requestData.ContainsKey("message") && requestData.ContainsKey("dialog")
&& requestData.ContainsKey("from_group")
&& requestData.ContainsKey("offline") && requestData.ContainsKey("parent_estate_id")
&& requestData.ContainsKey("position_x") && requestData.ContainsKey("position_y")
&& requestData.ContainsKey("position_z") && requestData.ContainsKey("region_id")
&& requestData.ContainsKey("binary_bucket") && requestData.ContainsKey("region_handle"))
{
Helpers.TryParse((string)requestData["from_agent_id"], out fromAgentID);
Helpers.TryParse((string)requestData["from_agent_session"], out fromAgentSession);
Helpers.TryParse((string)requestData["to_agent_id"], out toAgentID);
Helpers.TryParse((string)requestData["im_session_id"], out imSessionID);
Helpers.TryParse((string)requestData["region_id"], out RegionID);
# region timestamp
try
{
timestamp = (uint)Convert.ToInt32((string)requestData["timestamp"]);
}
catch (ArgumentException)
{
}
catch (FormatException)
{
}
catch (OverflowException)
{
}
# endregion
fromAgentName = (string)requestData["from_agent_name"];
message = (string)requestData["message"];
dialog = (byte)requestData["dialog"];
if ((string)requestData["from_group"] == "TRUE")
fromGroup = true;
offline = (byte)requestData["offline"];
# region ParentEstateID
try
{
ParentEstateID = (uint)Convert.ToInt32((string)requestData["parent_estate_id"]);
}
catch (ArgumentException)
{
}
catch (FormatException)
{
}
catch (OverflowException)
{
}
# endregion
# region pos_x
try
{
pos_x = (uint)Convert.ToInt32((string)requestData["position_x"]);
}
catch (ArgumentException)
{
}
catch (FormatException)
{
}
catch (OverflowException)
{
}
# endregion
# region pos_y
try
{
pos_y = (uint)Convert.ToInt32((string)requestData["position_y"]);
}
catch (ArgumentException)
{
}
catch (FormatException)
{
}
catch (OverflowException)
{
}
# endregion
# region pos_z
try
{
pos_z = (uint)Convert.ToInt32((string)requestData["position_z"]);
}
catch (ArgumentException)
{
}
catch (FormatException)
{
}
catch (OverflowException)
{
}
# endregion
Position = new LLVector3(pos_x, pos_y, pos_z);
binaryBucket = (byte[])requestData["binary_bucket"];
}
return new XmlRpcResponse();
//(string)
//(string)requestData["message"];
}
protected virtual void SendGridInstantMessageViaXMLRPC(IClientAPI client, LLUUID fromAgentID,
LLUUID fromAgentSession, LLUUID toAgentID,
LLUUID imSessionID, uint timestamp, string fromAgentName,
string message, byte dialog, bool fromGroup, byte offline,
uint ParentEstateID, LLVector3 Position, LLUUID RegionID,
byte[] binaryBucket)
{
}
} }
} }