Revert "Fix for hanging on "Connecting to region".. caused by packets being processed before the presence has bound to receive events. Fixed this by adding packets to a queue and then processing them when the presence is ready."

This reverts commit 91b1d17e5b.

Conflicts:

	OpenSim/Client/Sirikata/ClientStack/SirikataClientView.cs
	OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
	OpenSim/Region/Framework/Scenes/ScenePresence.cs
avinationmerge
Melanie 2010-11-05 14:27:14 +01:00
parent 654814d563
commit f985775962
9 changed files with 63 additions and 88 deletions

View File

@ -820,10 +820,6 @@ namespace OpenSim.Client.MXP.ClientStack
//throw new System.NotImplementedException();
}
public void ProcessPendingPackets()
{
}
public void ProcessInPacket(Packet NewPack)
{
//throw new System.NotImplementedException();

View File

@ -446,10 +446,6 @@ namespace OpenSim.Client.VWoHTTP.ClientStack
throw new System.NotImplementedException();
}
public void ProcessPendingPackets()
{
}
public void ProcessInPacket(Packet NewPack)
{
throw new System.NotImplementedException();

View File

@ -944,7 +944,6 @@ namespace OpenSim.Framework
void SetDebugPacketLevel(int newDebug);
void InPacket(object NewPack);
void ProcessPendingPackets();
void ProcessInPacket(Packet NewPack);
void Close();
void Close(bool sendStop);

View File

@ -342,7 +342,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private AgentUpdateArgs lastarg;
private bool m_IsActive = true;
private bool m_IsLoggingOut = false;
private bool m_IsPresenceReady = false;
protected Dictionary<PacketType, PacketProcessor> m_packetHandlers = new Dictionary<PacketType, PacketProcessor>();
protected Dictionary<string, GenericMessage> m_genericPacketHandlers = new Dictionary<string, GenericMessage>(); //PauPaw:Local Generic Message handlers
@ -365,7 +364,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
private Timer m_propertiesPacketTimer;
private List<ObjectPropertiesPacket.ObjectDataBlock> m_propertiesBlocks = new List<ObjectPropertiesPacket.ObjectDataBlock>();
private List<Packet> m_pendingPackets;
#endregion Class Members
@ -418,7 +416,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP
get { return m_IsActive; }
set { m_IsActive = value; }
}
public bool IsLoggingOut
{
get { return m_IsLoggingOut; }
@ -11354,48 +11351,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP
}
}
/// <summary>
/// This processes packets which have accumulated while the presence was still in the process of initialising.
/// </summary>
public void ProcessPendingPackets()
{
m_IsPresenceReady = true;
if (m_pendingPackets == null)
return;
foreach (Packet p in m_pendingPackets)
{
ProcessInPacket(p);
}
m_pendingPackets.Clear();
}
/// <summary>
/// Entryway from the client to the simulator. All UDP packets from the client will end up here
/// </summary>
/// <param name="Pack">OpenMetaverse.packet</param>
public void ProcessInPacket(Packet packet)
{
if (m_debugPacketLevel > 0)
{
bool outputPacket = true;
if (m_debugPacketLevel >= 255)
m_log.DebugFormat("[CLIENT]: Packet IN {0}", Pack.Type);
if (m_debugPacketLevel <= 255 && packet.Type == PacketType.AgentUpdate)
outputPacket = false;
if (!ProcessPacketMethod(Pack))
m_log.Warn("[CLIENT]: unhandled packet " + Pack.Type);
if (m_debugPacketLevel <= 200 && packet.Type == PacketType.RequestImage)
outputPacket = false;
if (m_debugPacketLevel <= 100 && (packet.Type == PacketType.ViewerEffect || packet.Type == PacketType.AgentAnimation))
outputPacket = false;
if (outputPacket)
m_log.DebugFormat("[CLIENT]: Packet IN {0}", packet.Type);
}
if (!ProcessPacketMethod(packet))
m_log.Warn("[CLIENT]: unhandled packet " + packet.Type);
PacketPool.Instance.ReturnPacket(packet);
PacketPool.Instance.ReturnPacket(Pack);
}
private static PrimitiveBaseShape GetShapeFromAddPacket(ObjectAddPacket addPacket)

View File

@ -821,10 +821,6 @@ namespace OpenSim.Region.Examples.SimpleModule
{
}
public void ProcessPendingPackets()
{
}
public void ProcessInPacket(Packet NewPack)
{
}

View File

@ -127,7 +127,7 @@ namespace OpenSim.Region.Framework.Scenes
private Vector3 m_avInitialPos; // used to calculate unscripted sit rotation
private Vector3 m_avUnscriptedSitPos; // for non-scripted prims
private Vector3 m_lastPosition;
private Vector3 m_lastPosition;
private Vector3 m_lastWorldPosition;
private Quaternion m_lastRotation;
private Vector3 m_lastVelocity;
@ -766,11 +766,8 @@ namespace OpenSim.Region.Framework.Scenes
// MIC: This gets called again in CompleteMovement
SendInitialFullUpdateToAllClients();
RegisterToEvents();
if (m_controllingClient != null)
{
m_controllingClient.ProcessPendingPackets();
}
SetDirectionVectors();
}
@ -895,7 +892,11 @@ namespace OpenSim.Region.Framework.Scenes
m_rootRegionHandle = m_scene.RegionInfo.RegionHandle;
<<<<<<< HEAD
m_scene.EventManager.TriggerSetRootAgentScene(m_uuid, m_scene);
=======
m_scene.SetRootAgentScene(m_uuid);
>>>>>>> 91b1d17... Fix for hanging on "Connecting to region".. caused by packets being processed before the presence has bound to receive events. Fixed this by adding packets to a queue and then processing them when the presence is ready.
// Moved this from SendInitialData to ensure that m_appearance is initialized
// before the inventory is processed in MakeRootAgent. This fixes a race condition
@ -911,6 +912,7 @@ namespace OpenSim.Region.Framework.Scenes
{
Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.N);
pos.Y = crossedBorder.BorderLine.Z - 1;
<<<<<<< HEAD
}
//If they're TP'ing in or logging in, we haven't had time to add any known child regions yet.
@ -927,6 +929,24 @@ namespace OpenSim.Region.Framework.Scenes
pos = land.LandData.UserLocation;
}
}
=======
}
//If they're TP'ing in or logging in, we haven't had time to add any known child regions yet.
//This has the unfortunate consequence that if somebody is TP'ing who is already a child agent,
//they'll bypass the landing point. But I can't think of any decent way of fixing this.
if (KnownChildRegionHandles.Count == 0)
{
ILandObject land = m_scene.LandChannel.GetLandObject(pos.X, pos.Y);
if (land != null)
{
//Don't restrict gods, estate managers, or land owners to the TP point. This behaviour mimics agni.
if (land.LandData.LandingType == (byte)1 && land.LandData.UserLocation != Vector3.Zero && m_userLevel < 200 && !m_scene.RegionInfo.EstateSettings.IsEstateManager(m_uuid) && land.LandData.OwnerID != m_uuid)
{
pos = land.LandData.UserLocation;
}
}
>>>>>>> 91b1d17... Fix for hanging on "Connecting to region".. caused by packets being processed before the presence has bound to receive events. Fixed this by adding packets to a queue and then processing them when the presence is ready.
}
if (pos.X < 0 || pos.Y < 0 || pos.Z < 0)
@ -1110,8 +1130,8 @@ namespace OpenSim.Region.Framework.Scenes
bool isFlying = false;
if (m_physicsActor != null)
isFlying = m_physicsActor.Flying;
isFlying = m_physicsActor.Flying;
RemoveFromPhysicalScene();
Velocity = Vector3.Zero;
AbsolutePosition = pos;
@ -1122,7 +1142,7 @@ namespace OpenSim.Region.Framework.Scenes
SetHeight(m_appearance.AvatarHeight);
}
SendTerseUpdateToAllClients();
SendTerseUpdateToAllClients();
}
@ -1240,6 +1260,7 @@ namespace OpenSim.Region.Framework.Scenes
pos.Z = ground + 1.5f;
AbsolutePosition = pos;
}
m_isChildAgent = false;
bool m_flying = ((m_AgentControlFlags & AgentManager.ControlFlags.AGENT_CONTROL_FLY) != 0);
MakeRootAgent(AbsolutePosition, m_flying);
@ -1827,14 +1848,14 @@ namespace OpenSim.Region.Framework.Scenes
// else
// { // single or child prim
// }
if (part == null) //CW: Part may be gone. llDie() for example.
{
partRot = new Quaternion(0.0f, 0.0f, 0.0f, 1.0f);
}
else
{
partRot = part.GetWorldRotation();
// }
if (part == null) //CW: Part may be gone. llDie() for example.
{
partRot = new Quaternion(0.0f, 0.0f, 0.0f, 1.0f);
}
else
{
partRot = part.GetWorldRotation();
}
Quaternion partIRot = Quaternion.Inverse(partRot);
@ -1842,6 +1863,7 @@ namespace OpenSim.Region.Framework.Scenes
Quaternion avatarRot = Quaternion.Inverse(Quaternion.Inverse(Rotation) * partIRot); // world or. of the av
Vector3 avStandUp = new Vector3(1.0f, 0f, 0f) * avatarRot; // 1M infront of av
<<<<<<< HEAD
if (m_physicsActor == null)
{
@ -1854,11 +1876,24 @@ namespace OpenSim.Region.Framework.Scenes
AbsolutePosition = avWorldStandUp; //KF: Fix stand up.
part.IsOccupied = false;
part.ParentGroup.DeleteAvatar(ControllingClient.AgentId);
=======
if (m_physicsActor == null)
{
AddToPhysicalScene(false);
>>>>>>> 91b1d17... Fix for hanging on "Connecting to region".. caused by packets being processed before the presence has bound to receive events. Fixed this by adding packets to a queue and then processing them when the presence is ready.
}
else
{
//CW: Since the part doesn't exist, a coarse standup position isn't an issue
AbsolutePosition = m_lastWorldPosition;
//CW: If the part isn't null then we can set the current position
if (part != null)
{
Vector3 avWorldStandUp = avStandUp + part.GetWorldPosition() + (m_pos * partRot); // + av sit offset!
AbsolutePosition = avWorldStandUp; //KF: Fix stand up.
part.IsOccupied = false;
}
else
{
//CW: Since the part doesn't exist, a coarse standup position isn't an issue
AbsolutePosition = m_lastWorldPosition;
}
m_parentPosition = Vector3.Zero;
@ -2022,7 +2057,7 @@ namespace OpenSim.Region.Framework.Scenes
// if (Util.GetDistanceTo(AbsolutePosition, autopilotTarget) < 4.5)
if( (Math.Abs(AbsolutePosition.X - autopilotTarget.X) < 256.0f) && (Math.Abs(AbsolutePosition.Y - autopilotTarget.Y) < 256.0f) )
{
autopilot = false; // close enough
autopilot = false; // close enough
m_lastWorldPosition = m_pos; /* CW - This give us a position to return the avatar to if the part is killed before standup.
Not using the part's position because returning the AV to the last known standing
position is likely to be more friendly, isn't it? */
@ -2032,7 +2067,7 @@ namespace OpenSim.Region.Framework.Scenes
} // else the autopilot will get us close
}
else
{ // its a scripted sit
{ // its a scripted sit
m_lastWorldPosition = part.AbsolutePosition; /* CW - This give us a position to return the avatar to if the part is killed before standup.
I *am* using the part's position this time because we have no real idea how far away
the avatar is from the sit target. */
@ -3993,10 +4028,7 @@ if (m_animator.m_jumping) force.Z = m_animator.m_jumpVelocity; // add for ju
m_scene = scene;
RegisterToEvents();
if (m_controllingClient != null)
{
m_controllingClient.ProcessPendingPackets();
}
/*
AbsolutePosition = client.StartPos;

View File

@ -877,10 +877,6 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
}
public void ProcessPendingPackets()
{
}
public void ProcessInPacket(Packet NewPack)
{

View File

@ -836,10 +836,6 @@ namespace OpenSim.Region.OptionalModules.World.NPC
{
}
public void ProcessPendingPackets()
{
}
public void ProcessInPacket(Packet NewPack)
{
}

View File

@ -879,10 +879,6 @@ namespace OpenSim.Tests.Common.Mock
{
}
public void ProcessPendingPackets()
{
}
public void ProcessInPacket(Packet NewPack)
{
}