mirror of
https://github.com/opensim/opensim.git
synced 2026-08-09 18:55:58 +08:00
* Yet some more connectivity restructuring
* We now have CloseAllAgents( circuit ) and CloseAllCircuits( agentId ) for great justice ( but alas, still only closing on one single scene - be brave! ) * Login and ConnectionClosed now eventified and moveified awayified * Killed off unused NullClientAPI * Now the client is almost only responsible for its own closing. ( I will get that scene out of there ) * Lookin' good!
This commit is contained in:
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using libsecondlife.Packets;
|
||||
using OpenSim.Framework.Interfaces;
|
||||
using libsecondlife;
|
||||
|
||||
namespace OpenSim.Framework
|
||||
{
|
||||
@@ -24,7 +25,7 @@ namespace OpenSim.Framework
|
||||
m_clients = new Dictionary<uint, IClientAPI>();
|
||||
}
|
||||
|
||||
public void Remove(uint id)
|
||||
private void Remove(uint id)
|
||||
{
|
||||
m_clients.Remove(id);
|
||||
}
|
||||
@@ -44,19 +45,46 @@ namespace OpenSim.Framework
|
||||
}
|
||||
}
|
||||
|
||||
public void ConnectionClosed(uint circuitCode)
|
||||
public void CloseAllAgents(uint circuitCode)
|
||||
{
|
||||
IClientAPI client;
|
||||
|
||||
if (m_clients.TryGetValue(circuitCode, out client))
|
||||
{
|
||||
m_clients.Remove(circuitCode);
|
||||
client.Close();
|
||||
|
||||
// TODO: Now remove all local childagents too
|
||||
CloseAllCircuits(client.AgentId);
|
||||
}
|
||||
}
|
||||
|
||||
public void CloseAllCircuits( LLUUID agentId )
|
||||
{
|
||||
uint[] circuits = GetAllCircuits(agentId);
|
||||
foreach (uint circuit in circuits )
|
||||
{
|
||||
IClientAPI client;
|
||||
if (m_clients.TryGetValue(circuit, out client))
|
||||
{
|
||||
Remove(circuit);
|
||||
client.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private uint[] GetAllCircuits(LLUUID agentId)
|
||||
{
|
||||
List<uint> circuits = new List<uint>();
|
||||
|
||||
foreach (KeyValuePair<uint, IClientAPI> pair in m_clients)
|
||||
{
|
||||
if( pair.Value.AgentId == agentId )
|
||||
{
|
||||
circuits.Add( pair.Key );
|
||||
}
|
||||
}
|
||||
|
||||
return circuits.ToArray();
|
||||
}
|
||||
|
||||
|
||||
public void ViewerEffectHandler(IClientAPI sender, ViewerEffectPacket.EffectBlock[] effectBlock)
|
||||
{
|
||||
ViewerEffectPacket packet = new ViewerEffectPacket();
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*/
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using libsecondlife;
|
||||
@@ -192,6 +193,12 @@ namespace OpenSim.Framework.Interfaces
|
||||
get;
|
||||
}
|
||||
|
||||
uint CircuitCode
|
||||
{
|
||||
get;
|
||||
set;
|
||||
}
|
||||
|
||||
void OutPacket(Packet newPack);
|
||||
void SendWearables(AvatarWearable[] wearables);
|
||||
void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry);
|
||||
@@ -245,5 +252,7 @@ namespace OpenSim.Framework.Interfaces
|
||||
void InPacket(Packet NewPack);
|
||||
void Close();
|
||||
event ViewerEffectEventHandler OnViewerEffect;
|
||||
event Action<IClientAPI> OnLogout;
|
||||
event Action<IClientAPI> OnConnectionClosed;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,183 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Net;
|
||||
using OpenSim.Framework.Interfaces;
|
||||
using OpenSim.Framework.Types;
|
||||
using OpenSim.Framework.Data;
|
||||
using libsecondlife;
|
||||
using libsecondlife.Packets;
|
||||
|
||||
|
||||
namespace OpenSim.Framework
|
||||
{
|
||||
public class NullClientAPI : IClientAPI
|
||||
{
|
||||
#pragma warning disable 67
|
||||
public event ImprovedInstantMessage OnInstantMessage;
|
||||
public event ChatFromViewer OnChatFromViewer;
|
||||
public event RezObject OnRezObject;
|
||||
public event ModifyTerrain OnModifyTerrain;
|
||||
public event SetAppearance OnSetAppearance;
|
||||
public event StartAnim OnStartAnim;
|
||||
public event LinkObjects OnLinkObjects;
|
||||
public event RequestMapBlocks OnRequestMapBlocks;
|
||||
public event TeleportLocationRequest OnTeleportLocationRequest;
|
||||
public event DisconnectUser OnDisconnectUser;
|
||||
public event RequestAvatarProperties OnRequestAvatarProperties;
|
||||
|
||||
public event GenericCall4 OnDeRezObject;
|
||||
public event GenericCall OnRegionHandShakeReply;
|
||||
public event GenericCall OnRequestWearables;
|
||||
public event GenericCall2 OnCompleteMovementToRegion;
|
||||
public event UpdateAgent OnAgentUpdate;
|
||||
public event GenericCall OnRequestAvatarsData;
|
||||
public event AddNewPrim OnAddPrim;
|
||||
public event ObjectDuplicate OnObjectDuplicate;
|
||||
public event UpdateVector OnGrabObject;
|
||||
public event ObjectSelect OnDeGrabObject;
|
||||
public event MoveObject OnGrabUpdate;
|
||||
|
||||
public event UpdateShape OnUpdatePrimShape;
|
||||
public event ObjectExtraParams OnUpdateExtraParams;
|
||||
public event ObjectSelect OnObjectSelect;
|
||||
public event GenericCall7 OnObjectDescription;
|
||||
public event GenericCall7 OnObjectName;
|
||||
public event UpdatePrimFlags OnUpdatePrimFlags;
|
||||
public event UpdatePrimTexture OnUpdatePrimTexture;
|
||||
public event UpdateVector OnUpdatePrimGroupPosition;
|
||||
public event UpdateVector OnUpdatePrimSinglePosition;
|
||||
public event UpdatePrimRotation OnUpdatePrimGroupRotation;
|
||||
public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation;
|
||||
public event UpdatePrimGroupRotation OnUpdatePrimGroupMouseRotation;
|
||||
public event UpdateVector OnUpdatePrimScale;
|
||||
public event StatusChange OnChildAgentStatus;
|
||||
public event GenericCall2 OnStopMovement;
|
||||
public event GenericCall6 OnRemoveAvatar;
|
||||
public event ViewerEffectEventHandler OnViewerEffect;
|
||||
|
||||
public event CreateNewInventoryItem OnCreateNewInventoryItem;
|
||||
public event CreateInventoryFolder OnCreateNewInventoryFolder;
|
||||
public event FetchInventoryDescendents OnFetchInventoryDescendents;
|
||||
public event FetchInventory OnFetchInventory;
|
||||
public event RequestTaskInventory OnRequestTaskInventory;
|
||||
public event UpdateInventoryItemTransaction OnUpdateInventoryItem;
|
||||
public event UDPAssetUploadRequest OnAssetUploadRequest;
|
||||
public event XferReceive OnXferReceive;
|
||||
public event RequestXfer OnRequestXfer;
|
||||
public event ConfirmXfer OnConfirmXfer;
|
||||
public event RezScript OnRezScript;
|
||||
public event UpdateTaskInventory OnUpdateTaskInventory;
|
||||
public event RemoveTaskInventory OnRemoveTaskItem;
|
||||
|
||||
public event UUIDNameRequest OnNameFromUUIDRequest;
|
||||
|
||||
public event ParcelPropertiesRequest OnParcelPropertiesRequest;
|
||||
public event ParcelDivideRequest OnParcelDivideRequest;
|
||||
public event ParcelJoinRequest OnParcelJoinRequest;
|
||||
public event ParcelPropertiesUpdateRequest OnParcelPropertiesUpdateRequest;
|
||||
public event ParcelSelectObjects OnParcelSelectObjects;
|
||||
public event ParcelObjectOwnerRequest OnParcelObjectOwnerRequest;
|
||||
public event ObjectDeselect OnObjectDeselect;
|
||||
|
||||
|
||||
public event EstateOwnerMessageRequest OnEstateOwnerMessage;
|
||||
#pragma warning restore 67
|
||||
|
||||
private LLUUID m_uuid = LLUUID.Random();
|
||||
public virtual LLVector3 StartPos
|
||||
{
|
||||
get { return new LLVector3(); }
|
||||
set { }
|
||||
}
|
||||
|
||||
public virtual LLUUID AgentId
|
||||
{
|
||||
get { return m_uuid; }
|
||||
}
|
||||
|
||||
public LLUUID SessionId
|
||||
{
|
||||
get { return LLUUID.Zero; }
|
||||
}
|
||||
|
||||
public virtual string FirstName
|
||||
{
|
||||
get { return ""; }
|
||||
}
|
||||
|
||||
public virtual string LastName
|
||||
{
|
||||
get { return ""; }
|
||||
}
|
||||
|
||||
public NullClientAPI()
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void OutPacket(Packet newPack){}
|
||||
public virtual void SendWearables(AvatarWearable[] wearables){}
|
||||
public virtual void SendAppearance(LLUUID agentID, byte[] visualParams, byte[] textureEntry) { }
|
||||
public virtual void SendStartPingCheck(byte seq){}
|
||||
public virtual void SendKillObject(ulong regionHandle, uint localID){}
|
||||
public virtual void SendAnimation(LLUUID animID, int seq, LLUUID sourceAgentId){}
|
||||
public virtual void SendRegionHandshake(RegionInfo regionInfo){}
|
||||
public virtual void SendChatMessage(string message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) { }
|
||||
public virtual void SendChatMessage(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID){}
|
||||
public virtual void SendInstantMessage(LLUUID fromAgent, LLUUID fromAgentSession, string message, LLUUID toAgent, LLUUID imSessionID, string fromName, byte dialog, uint timeStamp){}
|
||||
public virtual void SendLayerData(float[] map){}
|
||||
public virtual void SendLayerData(int px, int py, float[] map){}
|
||||
public virtual void MoveAgentIntoRegion(RegionInfo regInfo, LLVector3 pos, LLVector3 look){}
|
||||
public virtual void InformClientOfNeighbour(ulong neighbourHandle, IPEndPoint neighbourExternalEndPoint){}
|
||||
public virtual AgentCircuitData RequestClientInfo() { return new AgentCircuitData(); }
|
||||
public virtual void CrossRegion(ulong newRegionHandle, LLVector3 pos, LLVector3 lookAt, IPEndPoint newRegionExternalEndPoint, string capsURL){}
|
||||
public virtual void SendMapBlock(List<MapBlockData> mapBlocks){}
|
||||
public virtual void SendLocalTeleport(LLVector3 position, LLVector3 lookAt, uint flags){}
|
||||
public virtual void SendRegionTeleport(ulong regionHandle, byte simAccess, IPEndPoint regionExternalEndPoint, uint locationID, uint flags, string capsURL){}
|
||||
public virtual void SendTeleportCancel(){}
|
||||
public virtual void SendTeleportLocationStart(){}
|
||||
public virtual void SendMoneyBalance(LLUUID transaction, bool success, byte[] description, int balance){}
|
||||
|
||||
public virtual void SendAvatarData(ulong regionHandle, string firstName, string lastName, LLUUID avatarID, uint avatarLocalID, LLVector3 Pos, byte[] textureEntry){}
|
||||
public virtual void SendAvatarTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLVector3 velocity, LLQuaternion rotation){}
|
||||
public virtual void SendCoarseLocationUpdate(List<LLVector3> CoarseLocations) { }
|
||||
|
||||
public virtual void AttachObject(uint localID, LLQuaternion rotation, byte attachPoint){}
|
||||
public virtual void SendPrimitiveToClient(ulong regionHandle, ushort timeDilation, uint localID, PrimitiveBaseShape primShape, LLVector3 pos, uint flags, LLUUID objectID, LLUUID ownerID, string text, uint parentID, byte[] particleSystem, LLQuaternion rotation){}
|
||||
public virtual void SendPrimTerseUpdate(ulong regionHandle, ushort timeDilation, uint localID, LLVector3 position, LLQuaternion rotation){}
|
||||
|
||||
public virtual void SendInventoryFolderDetails(LLUUID ownerID, LLUUID folderID, List<InventoryItemBase> items){}
|
||||
public virtual void SendInventoryItemDetails(LLUUID ownerID, InventoryItemBase item){}
|
||||
public virtual void SendInventoryItemUpdate(InventoryItemBase Item) { }
|
||||
public virtual void SendRemoveInventoryItem(LLUUID itemID) { }
|
||||
public virtual void SendTaskInventory(LLUUID taskID, short serial, byte[] fileName) { }
|
||||
public virtual void SendXferPacket(ulong xferID, uint packet, byte[] data) { }
|
||||
|
||||
public virtual void SendPreLoadSound(LLUUID objectID, LLUUID ownerID, LLUUID soundID) { }
|
||||
public virtual void SendPlayAttachedSound(LLUUID soundID, LLUUID objectID, LLUUID ownerID, float gain, byte flags) { }
|
||||
|
||||
public virtual void SendNameReply(LLUUID profileId, string firstname, string lastname){}
|
||||
public void SendAlertMessage(string message) { }
|
||||
public void SendAgentAlertMessage(string message, bool modal) { }
|
||||
public void SendLoadURL(string objectname, LLUUID objectID, LLUUID ownerID, bool groupOwned, string message, string url) { }
|
||||
|
||||
|
||||
public bool AddMoney(int debit)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
public void SendViewerTime(int phase) { }
|
||||
public void SendAvatarProperties(LLUUID avatarID, string aboutText, string bornOn, string charterMember, string flAbout, uint flags, LLUUID flImageID, LLUUID imageID, string profileURL, LLUUID partnerID) { }
|
||||
public void SetDebug(int newDebug) { }
|
||||
|
||||
public void InPacket(Packet NewPack)
|
||||
{
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user