Added forwarding of teleport request, if the teleport is within the same region,
from CM to PSA. Both the hosting CM and PSA will trigger the same region teleport code, PSA will then sync the new position to other CMs.dsg
parent
384e39f225
commit
8fa03afb5c
|
@ -83,6 +83,9 @@ namespace OpenSim.Framework
|
|||
public delegate void TeleportLocationRequest(
|
||||
IClientAPI remoteClient, ulong regionHandle, Vector3 position, Vector3 lookAt, uint flags);
|
||||
|
||||
//DSG:
|
||||
public delegate void SameRegionTeleportlRequest(IClientAPI remoteClient, byte[] tpLocReq);
|
||||
|
||||
public delegate void TeleportLandmarkRequest(
|
||||
IClientAPI remoteClient, UUID regionID, Vector3 position);
|
||||
|
||||
|
@ -784,6 +787,9 @@ namespace OpenSim.Framework
|
|||
event RequestMapBlocks OnRequestMapBlocks;
|
||||
event RequestMapName OnMapNameRequest;
|
||||
event TeleportLocationRequest OnTeleportLocationRequest;
|
||||
//DSG:
|
||||
event SameRegionTeleportlRequest OnSameRegionTeleportlRequest;
|
||||
//end of DSG
|
||||
event DisconnectUser OnDisconnectUser;
|
||||
event RequestAvatarProperties OnRequestAvatarProperties;
|
||||
event SetAlwaysRun OnSetAlwaysRun;
|
||||
|
|
|
@ -143,6 +143,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
public event RequestMapBlocks OnRequestMapBlocks;
|
||||
public event RequestMapName OnMapNameRequest;
|
||||
public event TeleportLocationRequest OnTeleportLocationRequest;
|
||||
//DSG:
|
||||
public event SameRegionTeleportlRequest OnSameRegionTeleportlRequest;
|
||||
//end of DSG
|
||||
public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
|
||||
public event DisconnectUser OnDisconnectUser;
|
||||
public event RequestAvatarProperties OnRequestAvatarProperties;
|
||||
|
@ -8471,6 +8474,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
|||
#endregion
|
||||
|
||||
TeleportLocationRequest handlerTeleportLocationRequest = OnTeleportLocationRequest;
|
||||
|
||||
//DSG: KittyL -- added to support same region teleport
|
||||
if (tpLocReq.Info.RegionHandle == m_scene.RegionInfo.RegionHandle)
|
||||
{
|
||||
SameRegionTeleportlRequest handlerSameRegionTeleportlRequest = OnSameRegionTeleportlRequest;
|
||||
if (handlerSameRegionTeleportlRequest != null)
|
||||
{
|
||||
byte[] xb = new byte[tpLocReq.Length];
|
||||
int i = 0;
|
||||
xb = tpLocReq.ToBytes();
|
||||
handlerSameRegionTeleportlRequest(this, xb);
|
||||
//return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (handlerTeleportLocationRequest != null)
|
||||
{
|
||||
handlerTeleportLocationRequest(this, tpLocReq.Info.RegionHandle, tpLocReq.Info.Position,
|
||||
|
|
|
@ -79,6 +79,9 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
public event RequestMapBlocks OnRequestMapBlocks;
|
||||
public event RequestMapName OnMapNameRequest;
|
||||
public event TeleportLocationRequest OnTeleportLocationRequest;
|
||||
//DSG:
|
||||
public event SameRegionTeleportlRequest OnSameRegionTeleportlRequest;
|
||||
//end of DSG
|
||||
public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
|
||||
public event DisconnectUser OnDisconnectUser;
|
||||
public event RequestAvatarProperties OnRequestAvatarProperties;
|
||||
|
|
|
@ -202,6 +202,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
RemoveLocalClient(kvp.Key, m_scene);
|
||||
// Remove the agent update handler from the client
|
||||
kvp.Value.OnAgentUpdateRaw -= HandleAgentUpdateRaw;
|
||||
kvp.Value.OnSameRegionTeleportlRequest -= HandleAgentSameRegionTeleport;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
|
@ -848,6 +849,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
// Register for interesting client events which will be forwarded to auth sim
|
||||
// These are the raw packet data blocks from the client, intercepted and sent up to the sim
|
||||
client.OnAgentUpdateRaw += HandleAgentUpdateRaw;
|
||||
client.OnSameRegionTeleportlRequest += HandleAgentSameRegionTeleport;
|
||||
//DSG SYNC: do not subscribe to OnChatFromClientRaw: RegionSyncModule + Scene.EventManager will handle this.
|
||||
//client.OnChatFromClientRaw += HandleChatFromClientRaw;
|
||||
client.OnAgentRequestSit += HandleAgentRequestSit;
|
||||
|
@ -932,6 +934,12 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
Send(new RegionSyncMessage(RegionSyncMessage.MsgType.AgentUpdate, agentData));
|
||||
}
|
||||
|
||||
//KittyL: Added to support teleporting within the same region
|
||||
public void HandleAgentSameRegionTeleport(object sender, byte[] tpLocReq)
|
||||
{
|
||||
Send(new RegionSyncMessage(RegionSyncMessage.MsgType.AgentSameRegionTeleport, tpLocReq));
|
||||
}
|
||||
|
||||
public void HandleAgentRequestSit(object sender, UUID agentID, UUID targetID, Vector3 offset)
|
||||
{
|
||||
// m_log.DebugFormat("{0} HandleAgentRequestSit for {1}", LogHeader(), agentID.ToString());
|
||||
|
@ -1133,6 +1141,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
// These are the raw packet data blocks from the client, intercepted and sent up to the sim
|
||||
client.OnAgentUpdateRaw += HandleAgentUpdateRaw;
|
||||
client.OnChatFromClientRaw += HandleChatFromClientRaw;
|
||||
//KittyL: added to support same region teleport
|
||||
client.OnSameRegionTeleportlRequest += HandleAgentSameRegionTeleport;
|
||||
presence.IsSyncedAvatar = false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -420,6 +420,26 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
return;
|
||||
}
|
||||
}
|
||||
case RegionSyncMessage.MsgType.AgentSameRegionTeleport:
|
||||
//KittyL: added to support same region teleporting
|
||||
int lent = 0;
|
||||
TeleportLocationRequestPacket tpLocReq = new TeleportLocationRequestPacket(msg.Data, ref lent);
|
||||
|
||||
RegionSyncAvatar avatar;
|
||||
bool avFound;
|
||||
lock (m_syncRoot)
|
||||
{
|
||||
avFound = m_syncedAvatars.TryGetValue(tpLocReq.AgentData.AgentID, out avatar);
|
||||
}
|
||||
if (!avFound)
|
||||
{
|
||||
RegionSyncMessage.HandleWarning(LogHeader, msg, String.Format("Received agent update for avatar not owned by this client view {0}", tpLocReq.AgentData.AgentID));
|
||||
return;
|
||||
}
|
||||
|
||||
m_scene.RequestTeleportLocation(avatar, m_scene.RegionInfo.RegionHandle, tpLocReq.Info.Position,
|
||||
tpLocReq.Info.LookAt, 16);
|
||||
return;
|
||||
case RegionSyncMessage.MsgType.AgentRemove:
|
||||
{
|
||||
// Get the data from message and error check
|
||||
|
|
|
@ -66,6 +66,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
ActorConnect,
|
||||
AgentAdd,
|
||||
AgentUpdate,
|
||||
AgentSameRegionTeleport,
|
||||
AgentRemove,
|
||||
AgentRequestSit,
|
||||
AgentSit,
|
||||
|
|
|
@ -76,6 +76,9 @@ namespace OpenSim.Region.Examples.SimpleModule
|
|||
public event RequestMapBlocks OnRequestMapBlocks;
|
||||
public event RequestMapName OnMapNameRequest;
|
||||
public event TeleportLocationRequest OnTeleportLocationRequest;
|
||||
//DSG:
|
||||
public event SameRegionTeleportlRequest OnSameRegionTeleportlRequest;
|
||||
//end of DSG
|
||||
public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
|
||||
public event DisconnectUser OnDisconnectUser;
|
||||
public event RequestAvatarProperties OnRequestAvatarProperties;
|
||||
|
|
|
@ -676,6 +676,9 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
|||
public event RequestMapBlocks OnRequestMapBlocks;
|
||||
public event RequestMapName OnMapNameRequest;
|
||||
public event TeleportLocationRequest OnTeleportLocationRequest;
|
||||
//DSG:
|
||||
public event SameRegionTeleportlRequest OnSameRegionTeleportlRequest;
|
||||
//end of DSG
|
||||
public event DisconnectUser OnDisconnectUser;
|
||||
public event RequestAvatarProperties OnRequestAvatarProperties;
|
||||
public event SetAlwaysRun OnSetAlwaysRun;
|
||||
|
|
|
@ -184,6 +184,9 @@ namespace OpenSim.Region.OptionalModules.World.NPC
|
|||
public event RequestMapBlocks OnRequestMapBlocks;
|
||||
public event RequestMapName OnMapNameRequest;
|
||||
public event TeleportLocationRequest OnTeleportLocationRequest;
|
||||
//DSG:
|
||||
public event SameRegionTeleportlRequest OnSameRegionTeleportlRequest;
|
||||
//end of DSG
|
||||
public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
|
||||
public event DisconnectUser OnDisconnectUser;
|
||||
public event RequestAvatarProperties OnRequestAvatarProperties;
|
||||
|
|
|
@ -88,6 +88,9 @@ namespace OpenSim.Tests.Common.Mock
|
|||
public event RequestMapBlocks OnRequestMapBlocks;
|
||||
public event RequestMapName OnMapNameRequest;
|
||||
public event TeleportLocationRequest OnTeleportLocationRequest;
|
||||
//DSG:
|
||||
public event SameRegionTeleportlRequest OnSameRegionTeleportlRequest;
|
||||
//end of DSG
|
||||
public event TeleportLandmarkRequest OnTeleportLandmarkRequest;
|
||||
public event DisconnectUser OnDisconnectUser;
|
||||
public event RequestAvatarProperties OnRequestAvatarProperties;
|
||||
|
|
Loading…
Reference in New Issue