* Completed conceptual LlsdMethod - everything resides in SimpleApp pending guru approval.
parent
315a49e7fd
commit
73a5ec391a
|
@ -0,0 +1,13 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Servers
|
||||||
|
{
|
||||||
|
public interface ILlsdMethodHandler
|
||||||
|
{
|
||||||
|
string Handle(string request, string path);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -4,6 +4,5 @@ using System.Text;
|
||||||
|
|
||||||
namespace OpenSim.Framework.Servers
|
namespace OpenSim.Framework.Servers
|
||||||
{
|
{
|
||||||
public delegate object LlsdMethod(object request, string path, string param);
|
|
||||||
public delegate TResponse LlsdMethod<TResponse, TRequest>( TRequest request );
|
public delegate TResponse LlsdMethod<TResponse, TRequest>( TRequest request );
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,6 +96,9 @@
|
||||||
<Compile Include="CheckSumServer.cs">
|
<Compile Include="CheckSumServer.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
<Compile Include="ILlsdMethodHandler.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="LlsdMethod.cs">
|
<Compile Include="LlsdMethod.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
<sources failonempty="true">
|
<sources failonempty="true">
|
||||||
<include name="BaseHttpServer.cs" />
|
<include name="BaseHttpServer.cs" />
|
||||||
<include name="CheckSumServer.cs" />
|
<include name="CheckSumServer.cs" />
|
||||||
|
<include name="ILlsdMethodHandler.cs" />
|
||||||
<include name="LlsdMethod.cs" />
|
<include name="LlsdMethod.cs" />
|
||||||
<include name="RestMethod.cs" />
|
<include name="RestMethod.cs" />
|
||||||
<include name="UDPServerBase.cs" />
|
<include name="UDPServerBase.cs" />
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
using OpenSim.Framework.Servers;
|
||||||
|
using OpenSim.Region.Capabilities;
|
||||||
|
using libsecondlife;
|
||||||
|
using System.Collections;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Servers
|
||||||
|
{
|
||||||
|
public class LlsdMethodEntry<TResponse, TRequest> : ILlsdMethodHandler
|
||||||
|
where TRequest : new()
|
||||||
|
{
|
||||||
|
private LlsdMethod<TResponse, TRequest> m_method;
|
||||||
|
|
||||||
|
|
||||||
|
public LlsdMethodEntry( )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public LlsdMethodEntry(LlsdMethod<TResponse, TRequest> method)
|
||||||
|
{
|
||||||
|
m_method = method;
|
||||||
|
}
|
||||||
|
|
||||||
|
#region ILlsdMethodHandler Members
|
||||||
|
|
||||||
|
public string Handle(string body, string path)
|
||||||
|
{
|
||||||
|
Encoding _enc = System.Text.Encoding.UTF8;
|
||||||
|
Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(_enc.GetBytes( body ));
|
||||||
|
TRequest request = new TRequest();
|
||||||
|
|
||||||
|
LLSDHelpers.DeserialiseLLSDMap(hash, request );
|
||||||
|
|
||||||
|
TResponse response = m_method(request);
|
||||||
|
|
||||||
|
return LLSDHelpers.SerialiseLLSDReply( response );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
|
@ -17,13 +17,11 @@ namespace SimpleApp
|
||||||
{
|
{
|
||||||
public class MyWorld : Scene
|
public class MyWorld : Scene
|
||||||
{
|
{
|
||||||
private RegionInfo m_regionInfo;
|
|
||||||
private List<OpenSim.Region.Environment.Scenes.ScenePresence> m_avatars;
|
private List<OpenSim.Region.Environment.Scenes.ScenePresence> m_avatars;
|
||||||
|
|
||||||
public MyWorld(Dictionary<uint, IClientAPI> clientThreads, RegionInfo regionInfo, AuthenticateSessionsBase authen, CommunicationsManager commsMan, AssetCache assetCach, BaseHttpServer httpServer)
|
public MyWorld(Dictionary<uint, IClientAPI> clientThreads, RegionInfo regionInfo, AuthenticateSessionsBase authen, CommunicationsManager commsMan, AssetCache assetCach, BaseHttpServer httpServer)
|
||||||
: base(clientThreads, regionInfo, authen, commsMan, assetCach, httpServer)
|
: base(clientThreads, regionInfo, authen, commsMan, assetCach, httpServer)
|
||||||
{
|
{
|
||||||
m_regionInfo = regionInfo;
|
|
||||||
m_avatars = new List<Avatar>();
|
m_avatars = new List<Avatar>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,12 +66,12 @@ namespace SimpleApp
|
||||||
|
|
||||||
client.OnCompleteMovementToRegion += delegate()
|
client.OnCompleteMovementToRegion += delegate()
|
||||||
{
|
{
|
||||||
client.MoveAgentIntoRegion(m_regionInfo, pos, LLVector3.Zero );
|
client.MoveAgentIntoRegion(m_regInfo, pos, LLVector3.Zero );
|
||||||
};
|
};
|
||||||
|
|
||||||
client.OnCompleteMovementToRegion += delegate()
|
client.OnCompleteMovementToRegion += delegate()
|
||||||
{
|
{
|
||||||
client.SendAvatarData(m_regionInfo.RegionHandle, client.FirstName,
|
client.SendAvatarData(m_regInfo.RegionHandle, client.FirstName,
|
||||||
client.LastName, client.AgentId, 0,
|
client.LastName, client.AgentId, 0,
|
||||||
pos, null);
|
pos, null);
|
||||||
|
|
||||||
|
@ -83,7 +81,7 @@ namespace SimpleApp
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
client.SendRegionHandshake(m_regionInfo);
|
client.SendRegionHandshake(m_regInfo);
|
||||||
|
|
||||||
CreateAndAddScenePresence(client);
|
CreateAndAddScenePresence(client);
|
||||||
|
|
||||||
|
@ -94,23 +92,6 @@ namespace SimpleApp
|
||||||
client.SendWearables( AvatarWearable.DefaultWearables );
|
client.SendWearables( AvatarWearable.DefaultWearables );
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegionInfo RegionInfo
|
|
||||||
{
|
|
||||||
get { return m_regionInfo; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public object SyncRoot
|
|
||||||
{
|
|
||||||
get { return this; }
|
|
||||||
}
|
|
||||||
|
|
||||||
private uint m_nextLocalId = 1;
|
|
||||||
|
|
||||||
public uint NextLocalId
|
|
||||||
{
|
|
||||||
get { return m_nextLocalId++; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,7 +64,9 @@ namespace SimpleApp
|
||||||
udpServer.LocalWorld = world;
|
udpServer.LocalWorld = world;
|
||||||
|
|
||||||
httpServer.AddXmlRPCHandler("login_to_simulator", communicationsManager.UserServices.XmlRpcLoginMethod );
|
httpServer.AddXmlRPCHandler("login_to_simulator", communicationsManager.UserServices.XmlRpcLoginMethod );
|
||||||
httpServer.AddLlsdMethod<LLSDMapLayerResponse, LLSDMapRequest>("/Caps/test/", LlsdMethodDemo);
|
|
||||||
|
RegisterLlsdHandler<LLSDMapLayerResponse, LLSDMapRequest>("/Caps/test/", LlsdMethodDemo);
|
||||||
|
|
||||||
httpServer.Start();
|
httpServer.Start();
|
||||||
|
|
||||||
m_log.WriteLine( LogPriority.NORMAL, "Press enter to quit.");
|
m_log.WriteLine( LogPriority.NORMAL, "Press enter to quit.");
|
||||||
|
@ -82,6 +84,22 @@ namespace SimpleApp
|
||||||
return new LLSDMapLayerResponse();
|
return new LLSDMapLayerResponse();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ILlsdMethodHandler m_handler;
|
||||||
|
|
||||||
|
private void RegisterLlsdHandler<TResponse, TRequest>( string path, LlsdMethod<TResponse, TRequest> method )
|
||||||
|
where TRequest : new()
|
||||||
|
{
|
||||||
|
// path should be handler key, but for now just conceptually store it.
|
||||||
|
m_handler = new LlsdMethodEntry<TResponse, TRequest>( method );
|
||||||
|
}
|
||||||
|
|
||||||
|
private string ProcessLlsdMethod( string request,string path )
|
||||||
|
{
|
||||||
|
LlsdMethodEntry<LLSDMapLayerResponse, LLSDMapRequest> concreteHandler = new LlsdMethodEntry<LLSDMapLayerResponse, LLSDMapRequest>( LlsdMethodDemo );
|
||||||
|
|
||||||
|
return m_handler.Handle(request, path);
|
||||||
|
}
|
||||||
|
|
||||||
private bool AddNewSessionHandler(ulong regionHandle, Login loginData)
|
private bool AddNewSessionHandler(ulong regionHandle, Login loginData)
|
||||||
{
|
{
|
||||||
m_log.WriteLine(LogPriority.NORMAL, "Region [{0}] recieved Login from [{1}] [{2}]", regionHandle, loginData.First, loginData.Last);
|
m_log.WriteLine(LogPriority.NORMAL, "Region [{0}] recieved Login from [{1}] [{2}]", regionHandle, loginData.First, loginData.Last);
|
||||||
|
|
|
@ -154,6 +154,9 @@
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="LlsdMethodEntry.cs">
|
||||||
|
<SubType>Code</SubType>
|
||||||
|
</Compile>
|
||||||
<Compile Include="MyWorld.cs">
|
<Compile Include="MyWorld.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
<resources prefix="SimpleApp" dynamicprefix="true" >
|
<resources prefix="SimpleApp" dynamicprefix="true" >
|
||||||
</resources>
|
</resources>
|
||||||
<sources failonempty="true">
|
<sources failonempty="true">
|
||||||
|
<include name="LlsdMethodEntry.cs" />
|
||||||
<include name="MyWorld.cs" />
|
<include name="MyWorld.cs" />
|
||||||
<include name="Program.cs" />
|
<include name="Program.cs" />
|
||||||
<include name="Properties/AssemblyInfo.cs" />
|
<include name="Properties/AssemblyInfo.cs" />
|
||||||
|
|
Loading…
Reference in New Issue