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; }
public void Update(Agent oldAgent) { // Eventually we will copy the data from the oldAgent to this one, appearance, attachments, etc Update(); }
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); }