/// <summary> /// /// </summary> /// <param name="regionHandle"></param> /// <param name="item"></param> /// <param name="layer"></param> public void RequestMapItems(ulong regionHandle, GridItemType item, GridLayerType layer) { MapItemRequestPacket request = new MapItemRequestPacket(); request.AgentData.AgentID = Client.Self.AgentID; request.AgentData.SessionID = Client.Self.SessionID; request.AgentData.Flags = (uint)layer; request.AgentData.Godlike = false; // Filled in on the sim request.AgentData.EstateID = 0; // Filled in on the sim request.RequestData.ItemType = (uint)item; request.RequestData.RegionHandle = regionHandle; Client.Network.SendPacket(request); }
/// <summary> /// Get grid region information using the region name, this function /// will block until it can find the region or gives up /// </summary> /// <param name="name">Name of sim you're looking for</param> /// <param name="layer">Layer that you are requesting</param> /// <param name="region">Will contain a GridRegion for the sim you're /// looking for if successful, otherwise an empty structure</param> /// <returns>True if the GridRegion was successfully fetched, otherwise /// false</returns> public bool GetGridRegion(string name, GridLayerType layer, out GridRegion region) { if (String.IsNullOrEmpty(name)) { Logger.Log("GetGridRegion called with a null or empty region name", Helpers.LogLevel.Error, Client); region = new GridRegion(); return(false); } if (Regions.ContainsKey(name)) { // We already have this GridRegion structure region = Regions[name]; return(true); } else { AutoResetEvent regionEvent = new AutoResetEvent(false); EventHandler <GridRegionEventArgs> callback = delegate(object sender, GridRegionEventArgs e) { if (e.Region.Name == name) { regionEvent.Set(); } }; GridRegion += callback; RequestMapRegion(name, layer); regionEvent.WaitOne(Client.Settings.MAP_REQUEST_TIMEOUT, false); GridRegion -= callback; if (Regions.ContainsKey(name)) { // The region was found after our request region = Regions[name]; return(true); } else { Logger.Log("Couldn't find region " + name, Helpers.LogLevel.Warning, Client); region = new GridRegion(); return(false); } } }
/// <summary> /// /// </summary> /// <param name="layer"></param> /// <param name="minX"></param> /// <param name="minY"></param> /// <param name="maxX"></param> /// <param name="maxY"></param> /// <param name="returnNonExistent"></param> public void RequestMapBlocks(GridLayerType layer, ushort minX, ushort minY, ushort maxX, ushort maxY, bool returnNonExistent) { MapBlockRequestPacket request = new MapBlockRequestPacket(); request.AgentData.AgentID = Client.Self.AgentID; request.AgentData.SessionID = Client.Self.SessionID; request.AgentData.Flags = (uint)layer; request.AgentData.Flags |= (uint)(returnNonExistent ? 0x10000 : 0); request.AgentData.EstateID = 0; // Filled in at the simulator request.AgentData.Godlike = false; // Filled in at the simulator request.PositionData.MinX = minX; request.PositionData.MinY = minY; request.PositionData.MaxX = maxX; request.PositionData.MaxY = maxY; Client.Network.SendPacket(request); }
/// <summary> /// /// </summary> /// <param name="regionHandle"></param> /// <param name="item"></param> /// <param name="layer"></param> /// <param name="timeoutMS"></param> /// <returns></returns> public List <MapItem> MapItems(ulong regionHandle, GridItemType item, GridLayerType layer, int timeoutMS) { List <MapItem> itemList = null; AutoResetEvent itemsEvent = new AutoResetEvent(false); EventHandler <GridItemsEventArgs> callback = delegate(object sender, GridItemsEventArgs e) { if (e.Type == GridItemType.AgentLocations) { itemList = e.Items; itemsEvent.Set(); } }; GridItems += callback; RequestMapItems(regionHandle, item, layer); itemsEvent.WaitOne(timeoutMS, false); GridItems -= callback; return(itemList); }
/// <summary> /// /// </summary> /// <param name="regionHandle"></param> /// <param name="item"></param> /// <param name="layer"></param> /// <param name="timeoutMS"></param> /// <returns></returns> public List <GridItem> MapItems(ulong regionHandle, GridItemType item, GridLayerType layer, int timeoutMS) { List <GridItem> itemList = null; AutoResetEvent itemsEvent = new AutoResetEvent(false); GridItemsCallback callback = delegate(GridItemType type, List <GridItem> items) { if (type == GridItemType.AgentLocations) { itemList = items; itemsEvent.Set(); } }; OnGridItems += callback; RequestMapItems(regionHandle, item, layer); itemsEvent.WaitOne(timeoutMS, false); OnGridItems -= callback; return(itemList); }
/// <summary> /// /// </summary> /// <param name="regionHandle"></param> /// <param name="item"></param> /// <param name="layer"></param> /// <param name="timeoutMS"></param> /// <returns></returns> public List<GridItem> MapItems(ulong regionHandle, GridItemType item, GridLayerType layer, int timeoutMS) { List<GridItem> itemList = null; AutoResetEvent itemsEvent = new AutoResetEvent(false); GridItemsCallback callback = delegate(GridItemType type, List<GridItem> items) { if (type == GridItemType.AgentLocations) { itemList = items; itemsEvent.Set(); } }; OnGridItems += callback; RequestMapItems(regionHandle, item, layer); itemsEvent.WaitOne(timeoutMS, false); OnGridItems -= callback; return itemList; }
/// <summary> /// /// </summary> /// <param name="regionName"></param> /// <param name="layer"></param> public void RequestMapRegion(string regionName, GridLayerType layer) { MapNameRequestPacket request = new MapNameRequestPacket(); request.AgentData.AgentID = Client.Self.AgentID; request.AgentData.SessionID = Client.Self.SessionID; request.AgentData.Flags = (uint)layer; request.AgentData.EstateID = 0; // Filled in on the sim request.AgentData.Godlike = false; // Filled in on the sim request.NameData.Name = Helpers.StringToField(regionName.ToLower()); Client.Network.SendPacket(request); }
/// <summary> /// /// </summary> /// <param name="layer"></param> public void RequestMapLayer(GridLayerType layer) { Uri url = Client.Network.CurrentSim.Caps.CapabilityURI("MapLayer"); if (url != null) { LLSDMap body = new LLSDMap(); body["Flags"] = LLSD.FromInteger((int)layer); CapsClient request = new CapsClient(url); request.OnComplete += new CapsClient.CompleteCallback(MapLayerResponseHandler); request.StartRequest(body); } }
/// <summary> /// Get grid region information using the region name, this function /// will block until it can find the region or gives up /// </summary> /// <param name="name">Name of sim you're looking for</param> /// <param name="layer">Layer that you are requesting</param> /// <param name="region">Will contain a GridRegion for the sim you're /// looking for if successful, otherwise an empty structure</param> /// <returns>True if the GridRegion was successfully fetched, otherwise /// false</returns> public bool GetGridRegion(string name, GridLayerType layer, out GridRegion region) { if (String.IsNullOrEmpty(name)) { Logger.Log("GetGridRegion called with a null or empty region name", Helpers.LogLevel.Error, Client); region = new GridRegion(); return false; } if (Regions.ContainsKey(name)) { // We already have this GridRegion structure region = Regions[name]; return true; } else { AutoResetEvent regionEvent = new AutoResetEvent(false); EventHandler<GridRegionEventArgs> callback = delegate(object sender, GridRegionEventArgs e) { if (e.Region.Name == name) regionEvent.Set(); }; GridRegion += callback; RequestMapRegion(name, layer); regionEvent.WaitOne(Client.Settings.MAP_REQUEST_TIMEOUT, false); GridRegion -= callback; if (Regions.ContainsKey(name)) { // The region was found after our request region = Regions[name]; return true; } else { Logger.Log("Couldn't find region " + name, Helpers.LogLevel.Warning, Client); region = new GridRegion(); return false; } } }
public void RequestMapLayer(GridLayerType layer) { string url = Client.Network.CurrentSim.Caps.CapabilityURI("MapLayer"); if (!String.IsNullOrEmpty(url)) { Hashtable body = new Hashtable(); body["Flags"] = (int)layer; Client.Network.SendCapsRequest(url, body, new CapsRequest.CapsResponseCallback(MapLayerResponseHandler)); } }
/// <summary> /// /// </summary> /// <param name="layer"></param> public void RequestMapLayer(GridLayerType layer) { Uri url = Client.Network.CurrentSim.Caps.CapabilityURI("MapLayer"); if (url != null) { OSDMap body = new OSDMap(); body["Flags"] = OSD.FromInteger((int)layer); CapsClient request = new CapsClient(url); request.OnComplete += new CapsClient.CompleteCallback(MapLayerResponseHandler); request.BeginGetResponse(body, OSDFormat.Xml, Client.Settings.CAPS_TIMEOUT); } }
/// <summary> /// Request data for all mainland (Linden managed) simulators /// </summary> public void RequestMainlandSims(GridLayerType layer) { RequestMapBlocks(layer, 0, 0, 65535, 65535, false); }
/// <summary> /// Get grid region information using the region name, this function /// will block until it can find the region or gives up /// </summary> /// <param name="name">Name of sim you're looking for</param> /// <param name="layer">Layer that you are requesting</param> /// <param name="region">Will contain a GridRegion for the sim you're /// looking for if successful, otherwise an empty structure</param> /// <returns>True if the GridRegion was successfully fetched, otherwise /// false</returns> public bool GetGridRegion(string name, GridLayerType layer, out GridRegion region) { name = name.ToLower(); if (Regions.ContainsKey(name)) { // We already have this GridRegion structure region = Regions[name]; return true; } else { ManualResetEvent requestEvent = new ManualResetEvent(false); if (RequestingRegions.ContainsKey(name)) { Client.Log("GetGridRegion called for " + name + " multiple times, ignoring", Helpers.LogLevel.Warning); region = new GridRegion(); return false; } else { // Add this region request to the list of requests we are tracking lock (RequestingRegions) RequestingRegions.Add(name, requestEvent); } // Make the request RequestMapRegion(name, layer); // Wait until an answer is retrieved requestEvent.WaitOne(Client.Settings.MAP_REQUEST_TIMEOUT, false); // Remove the dictionary entry for this lookup lock (RequestingRegions) RequestingRegions.Remove(name); if (Regions.ContainsKey(name)) { // The region was found after our request region = Regions[name]; return true; } else { Client.Log("Couldn't find region " + name, Helpers.LogLevel.Warning); region = new GridRegion(); return false; } } }
/// <summary> /// Get grid region information using the region name, this function /// will block until it can find the region or gives up /// </summary> /// <param name="name">Name of sim you're looking for</param> /// <param name="layer">Layer that you are requesting</param> /// <param name="region">Will contain a GridRegion for the sim you're /// looking for if successful, otherwise an empty structure</param> /// <returns>True if the GridRegion was successfully fetched, otherwise /// false</returns> public bool GetGridRegion(string name, GridLayerType layer, out GridRegion region) { if (String.IsNullOrEmpty(name)) { Logger.Log("GetGridRegion called with a null or empty region name", Helpers.LogLevel.Error, Client); region = new GridRegion(); return false; } // All lookups are done using lowercase sim names name = name.ToLower(); if (Regions.ContainsKey(name)) { // We already have this GridRegion structure region = Regions[name]; return true; } else { AutoResetEvent regionEvent = new AutoResetEvent(false); GridRegionCallback callback = delegate(GridRegion gridRegion) { if (gridRegion.Name == name) regionEvent.Set(); }; OnGridRegion += callback; RequestMapRegion(name, layer); regionEvent.WaitOne(Client.Settings.MAP_REQUEST_TIMEOUT, false); OnGridRegion -= callback; if (Regions.ContainsKey(name)) { // The region was found after our request region = Regions[name]; return true; } else { Logger.Log("Couldn't find region " + name, Helpers.LogLevel.Warning, Client); region = new GridRegion(); return false; } } }
/// <summary> /// /// </summary> /// <param name="regionHandle"></param> /// <param name="item"></param> /// <param name="layer"></param> /// <param name="timeoutMS"></param> /// <returns></returns> public List<MapItem> MapItems(ulong regionHandle, GridItemType item, GridLayerType layer, int timeoutMS) { List<MapItem> itemList = null; AutoResetEvent itemsEvent = new AutoResetEvent(false); EventHandler<GridItemsEventArgs> callback = delegate(object sender, GridItemsEventArgs e) { if (e.Type == GridItemType.AgentLocations) { itemList = e.Items; itemsEvent.Set(); } }; GridItems += callback; RequestMapItems(regionHandle, item, layer); itemsEvent.WaitOne(timeoutMS, false); GridItems -= callback; return itemList; }