OpenMetaverse.Messages.Linden.CrossedRegionMessage.Serialize C# (CSharp) Метод

Serialize() публичный Метод

Serialize the object
public Serialize ( ) : OSDMap
Результат OSDMap
        public OSDMap Serialize()
        {
            OSDMap map = new OSDMap(3);

            OSDArray infoArray = new OSDArray(1);
            OSDMap infoMap = new OSDMap(2);
            infoMap["LookAt"] = OSD.FromVector3(LookAt);
            infoMap["Position"] = OSD.FromVector3(Position);
            infoArray.Add(infoMap);
            map["Info"] = infoArray;

            OSDArray agentDataArray = new OSDArray(1);
            OSDMap agentDataMap = new OSDMap(2);
            agentDataMap["AgentID"] = OSD.FromUUID(AgentID);
            agentDataMap["SessionID"] = OSD.FromUUID(SessionID);
            agentDataArray.Add(agentDataMap);
            map["AgentData"] = agentDataArray;

            OSDArray regionDataArray = new OSDArray(1);
            OSDMap regionDataMap = new OSDMap(4);
            regionDataMap["RegionHandle"] = OSD.FromULong(RegionHandle);
            regionDataMap["SeedCapability"] = OSD.FromUri(SeedCapability);
            regionDataMap["SimIP"] = MessageUtils.FromIP(IP);
            regionDataMap["SimPort"] = OSD.FromInteger(Port);
            regionDataArray.Add(regionDataMap);
            map["RegionData"] = regionDataArray;

            return map;
        }

Usage Example

Пример #1
0
        private bool BorderCrossLLAgent(LLAgent agent, SceneInfo neighbor)
        {
            IPAddress simHost;
            int simPort;
            Uri seedCapability;

            // Send a rez_avatar/request message to create a root agent or upgrade a child agent
            if (SendRezAvatarRequest(agent, neighbor, false, out simHost, out simPort, out seedCapability))
            {
                // Demote this agent to a child agent
                agent.IsChildPresence = true;

                // Calculate our position relative to the new region
                Vector3 relativePosition = agent.ScenePosition - new Vector3(neighbor.MinPosition - m_scene.MinPosition);

                // Send the CrossedRegion message over the event queue to the client
                CrossedRegionMessage crossed = new CrossedRegionMessage();
                crossed.AgentID = agent.ID;
                crossed.SessionID = agent.SessionID;
                crossed.RegionHandle = Util.PositionToRegionHandle(neighbor.MinPosition);
                crossed.IP = simHost;
                crossed.Port = simPort;
                crossed.Position = relativePosition;
                crossed.LookAt = agent.CameraAtAxis; // TODO: Get LookAt from the agent's rotation
                crossed.SeedCapability = seedCapability;

                m_log.Info("Sending CrossedRegion to " + agent.Name + " from " + m_scene.Name + " to " + neighbor.Name +
                    ", pos=" + relativePosition + ", vel=" + agent.Velocity);
                agent.EventQueue.QueueEvent("CrossedRegion", crossed.Serialize());

                return true;
            }
            else
            {
                m_log.Warn("Border crossing " + agent.Name + " from " + m_scene.Name + " to " + neighbor.Name +
                    " failed, rez_avatar/request did not succeed");

                return false;
            }
        }
CrossedRegionMessage