* Implementing first of the 0.6 IClientAPI Changes
* Introducing IClientCore - this will be the key replacement for IClientAPI in the long run, it has a very minimal set of methods designed to allow you to access specialist API's. * See https://lists.berlios.de/pipermail/opensim-dev/2008-September/003049.html for the early discussion on this.0.6.1-post-fixes
parent
5c0fd512e8
commit
6d5248441d
|
@ -0,0 +1,8 @@
|
|||
namespace OpenSim.Framework.Client
|
||||
{
|
||||
public interface IClientCore
|
||||
{
|
||||
bool TryGet<T>(out T iface);
|
||||
T Get<T>();
|
||||
}
|
||||
}
|
|
@ -1,86 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) Contributors, http://opensimulator.org/
|
||||
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * Neither the name of the OpenSim Project nor the
|
||||
* names of its contributors may be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* 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
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
using System;
|
||||
|
||||
namespace OpenSim.Framework
|
||||
{
|
||||
#region Args Classes
|
||||
public class ICA2_ConnectionArgs : EventArgs
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public class ICA2_DisconnectionArgs : EventArgs
|
||||
{
|
||||
public bool Forced;
|
||||
|
||||
// Static Constructor
|
||||
// Allows us to recycle these classes later more easily from a pool.
|
||||
public static ICA2_DisconnectionArgs Create(bool forced)
|
||||
{
|
||||
ICA2_DisconnectionArgs tmp = new ICA2_DisconnectionArgs();
|
||||
tmp.Forced = forced;
|
||||
|
||||
return tmp;
|
||||
}
|
||||
}
|
||||
|
||||
public class ICA2_PingArgs : EventArgs
|
||||
{
|
||||
}
|
||||
|
||||
public class ICA2_AvatarAppearanceArgs : EventArgs
|
||||
{
|
||||
}
|
||||
|
||||
public class ICA2_TerraformArgs : EventArgs
|
||||
{
|
||||
public double XMin;
|
||||
public double XMax;
|
||||
public double YMin;
|
||||
public double YMax;
|
||||
public Guid Action;
|
||||
public double Strength; // 0 .. 1
|
||||
public double Radius;
|
||||
}
|
||||
#endregion
|
||||
|
||||
public delegate void ICA2_OnTerraformDelegate(IClientAPI2 sender, ICA2_TerraformArgs e);
|
||||
|
||||
public interface IClientAPI2
|
||||
{
|
||||
// Connect / Disconnect
|
||||
void Connect(ICA2_ConnectionArgs e);
|
||||
void Disconnect(ICA2_DisconnectionArgs e);
|
||||
void Ping(ICA2_PingArgs e);
|
||||
|
||||
void SendAvatarAppearance(ICA2_AvatarAppearanceArgs e);
|
||||
|
||||
event ICA2_OnTerraformDelegate OnTerraform;
|
||||
}
|
||||
}
|
|
@ -37,6 +37,7 @@ using OpenMetaverse;
|
|||
using OpenMetaverse.Packets;
|
||||
using log4net;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Framework.Client;
|
||||
using OpenSim.Framework.Communications.Cache;
|
||||
using OpenSim.Framework.Statistics;
|
||||
using OpenSim.Region.Interfaces;
|
||||
|
@ -51,34 +52,25 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
/// Handles new client connections
|
||||
/// Constructor takes a single Packet and authenticates everything
|
||||
/// </summary>
|
||||
public class LLClientView : IClientAPI
|
||||
public class LLClientView : IClientAPI, IClientCore
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
// ~ClientView()
|
||||
// {
|
||||
// m_log.Info("[CLIENT]: LLClientView destructor called");
|
||||
// }
|
||||
|
||||
/* static variables */
|
||||
public static SynchronizeClientHandler SynchronizeClient;
|
||||
/* private variables */
|
||||
private readonly UUID m_sessionId;
|
||||
private readonly UUID m_secureSessionId = UUID.Zero;
|
||||
//private AgentAssetUpload UploadAssets;
|
||||
|
||||
private int m_debugPacketLevel;
|
||||
|
||||
private readonly AssetCache m_assetCache;
|
||||
// private InventoryCache m_inventoryCache;
|
||||
private int m_cachedTextureSerial;
|
||||
private Timer m_clientPingTimer;
|
||||
|
||||
private bool m_clientBlocked;
|
||||
|
||||
private int m_probesWithNoIngressPackets;
|
||||
//private int m_lastPacketsReceived = 0;
|
||||
//private byte[] ZeroOutBuffer = new byte[4096];
|
||||
|
||||
private readonly UUID m_agentId;
|
||||
private readonly uint m_circuitCode;
|
||||
|
@ -553,7 +545,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
m_PacketHandler.Clear();
|
||||
|
||||
m_clientPingTimer = new Timer(5000);
|
||||
m_clientPingTimer.Elapsed += new ElapsedEventHandler(CheckClientConnectivity);
|
||||
m_clientPingTimer.Elapsed += CheckClientConnectivity;
|
||||
m_clientPingTimer.Enabled = true;
|
||||
}
|
||||
|
||||
|
@ -608,7 +600,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
protected virtual bool ProcessPacketMethod(Packet packet)
|
||||
{
|
||||
bool result = false;
|
||||
bool found = false;
|
||||
bool found;
|
||||
PacketMethod method;
|
||||
if (m_packetHandlers.TryGetValue(packet.Type, out method))
|
||||
{
|
||||
|
@ -7676,5 +7668,40 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
KillPacket kp = new KillPacket();
|
||||
OutPacket(kp, ThrottleOutPacketType.Task | ThrottleOutPacketType.LowPriority);
|
||||
}
|
||||
|
||||
#region IClientCore
|
||||
|
||||
private readonly Dictionary<Type, object> m_clientInterfaces = new Dictionary<Type, object>();
|
||||
|
||||
/// <summary>
|
||||
/// Register an interface on this client, should only be called in the constructor.
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="iface"></param>
|
||||
protected void RegisterInterface<T>(T iface)
|
||||
{
|
||||
lock(m_clientInterfaces)
|
||||
{
|
||||
m_clientInterfaces.Add(typeof(T), iface);
|
||||
}
|
||||
}
|
||||
|
||||
public bool TryGet<T>(out T iface)
|
||||
{
|
||||
if (m_clientInterfaces.ContainsKey(typeof(T)))
|
||||
{
|
||||
iface = (T)m_clientInterfaces[typeof(T)];
|
||||
return true;
|
||||
}
|
||||
iface = default(T);
|
||||
return false;
|
||||
}
|
||||
|
||||
public T Get<T>()
|
||||
{
|
||||
return (T)m_clientInterfaces[typeof(T)];
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue