Пример #1
0
        Packet TeleportHandler(Packet packet, IPEndPoint endPoint)
        {
            Console.WriteLine("\n>> TeleportRequest for agent at " + MainAgent.regionEndPoint.ToString());

            TeleportLocationRequestPacket tppack = (TeleportLocationRequestPacket)packet;
            ulong handle = tppack.Info.RegionHandle;
            if (MainAgent.TheRegion.RegionHandle == handle)
                // Let it pass. Let the region deal with it, it's safe.
                return packet;

            // else we deal with it
            string url = "http://" + MainAgent.TheRegion.ExternalHostName + ":" + MainAgent.TheRegion.HttpPort + "/";
            RegionInfo regInfo = OpenSimComms.GetRegionInfo(url, string.Empty, handle);
            Console.WriteLine("[Grider]: Got region info " + regInfo.RegionName + " in " + regInfo.RegionLocX + "-" + regInfo.RegionLocY);

            Vector3 pos = tppack.Info.Position;
            Vector3 lookat = tppack.Info.LookAt;
            Agent newAgent = new Agent(regInfo, pos, lookat);
            newAgent.Go();

            string capsPathOrig = "http://" + regInfo.ExternalHostName + ":" + regInfo.HttpPort
                + "/CAPS/" + /*Agent.agentCircuitData.CapsPath*/ newAgent.CapsSeed + "0000/";
            string capsPath = proxy.loginURI + capsPathOrig;

            IPEndPoint fakeSim = proxy.ProxySim(newAgent.regionEndPoint);

            CapInfo info = new CapInfo(capsPathOrig, newAgent.regionEndPoint, "SeedCapability");
            info.AddDelegate(new CapsDelegate(SeedCapHandler));
            lock (this)
            {
                proxy.KnownCaps[capsPathOrig] = info;
            }

            EventQueueEvent mapES = LLEvents.EnableSimulator(regInfo.RegionHandle, fakeSim);
            EventQueueEvent mapEAC = LLEvents.EstablishAgentCommunication(Agent.agentCircuitData.AgentID, fakeSim.ToString(), capsPath);
            List<EventQueueEvent> l = new List<EventQueueEvent>();
            l.Add(mapES);
            //l.Add(mapEAC);
            EventQueue eq = MainAgent.EQ;
            Console.WriteLine("    >>> Posting events to queue " + eq.id + " related to agent at " + MainAgent.regionEndPoint.ToString());
            eq.SendEvents(l);

            //Thread.Sleep(5);
            EventQueueEvent mapTF = LLEvents.TeleportFinishEvent(regInfo.RegionHandle, 13, fakeSim, 4, 16, capsPath, Agent.agentCircuitData.AgentID);
            eq.SendEvent(mapTF);

            //Thread.Sleep(7000);
            //DisableSimulatorPacket ds = new DisableSimulatorPacket();
            //proxy.InjectPacket(ds, Direction.Incoming);
            //CloseCircuitPacket cc = new CloseCircuitPacket();
            //proxy.InjectPacket(cc, Direction.Incoming);

            oldAgent = MainAgent;
            MainAgent = newAgent;
            proxy.activeCircuit = MainAgent.regionEndPoint;

            Console.WriteLine("[Grider]: MainAgent now at " + MainAgent.regionEndPoint.ToString());
            return null;
        }
Пример #2
0
 public void Update(Agent oldAgent)
 {
     // Eventually we will copy the data from the oldAgent to this one, appearance, attachments, etc
     Update();
 }
Пример #3
0
        void CreateAgentForRegion(Hashtable hash)
        {
            string gridServerURL = string.Empty, gridserverkey = string.Empty;
            if (hash["grid_service"] != null)
                gridServerURL = (string)hash["grid_service"];
            if (hash["grid_service_send_key"] != null)
                gridserverkey = (string)hash["grid_service_send_key"];

            int port = 9000;
            string ip = "127.0.0.1";
            IPAddress ipaddr = IPAddress.Parse(ip);
            if (hash["real_sim_port"] != null)
                port = (Int32)hash["real_sim_port"];
            else
                Console.WriteLine("[Grider]: region port not present");
            if (hash["real_sim_ip"] != null)
            {
                ip = (string)hash["real_sim_ip"];
                Console.WriteLine("  >> " + ip);
            }
            else
                Console.WriteLine("[Grider]: region IP not present");
            IPAddress.TryParse(ip, out ipaddr);
            IPEndPoint regionEndPoint = new IPEndPoint(ipaddr, port);
            Console.WriteLine("[Grider]: IPEndPoint of region is " + regionEndPoint.ToString());

            ulong regionHandle = 0;
            if (hash["region_handle"] != null)
            {
                if (!UInt64.TryParse((string)hash["region_handle"], out regionHandle))
                    Console.WriteLine("[Grider]: Unable to parse region handle from " + (string)hash["region_handle"]);
            }
            if (regionHandle == 0)
            {
                Console.WriteLine("[Grider]: Unable to detect Region Handle in login message");
                return ;
            }

            uint httpPort = 9000;
            if (hash["http_port"] != null)
            {
                //Console.WriteLine("  >> type of http_port: " + hash["http_port"].GetType().ToString());
                httpPort = (uint)((Int32)hash["http_port"]);
            }

            MainAgent = new Agent(gridServerURL, gridserverkey, regionHandle, regionEndPoint, httpPort);
        }