mirror of
https://github.com/opensim/opensim.git
synced 2026-08-06 09:16:28 +08:00
Merge branch 'master' into careminster
Conflicts: OpenSim/Region/CoreModules/Avatar/Chat/ChatModule.cs OpenSim/Region/Framework/Scenes/Scene.cs
This commit is contained in:
@@ -525,6 +525,57 @@ namespace OpenSim.Services.Connectors
|
||||
return rinfos;
|
||||
}
|
||||
|
||||
public List<GridRegion> GetDefaultHypergridRegions(UUID scopeID)
|
||||
{
|
||||
Dictionary<string, object> sendData = new Dictionary<string, object>();
|
||||
|
||||
sendData["SCOPEID"] = scopeID.ToString();
|
||||
|
||||
sendData["METHOD"] = "get_default_hypergrid_regions";
|
||||
|
||||
List<GridRegion> rinfos = new List<GridRegion>();
|
||||
string reply = string.Empty;
|
||||
string uri = m_ServerURI + "/grid";
|
||||
try
|
||||
{
|
||||
reply = SynchronousRestFormsRequester.MakeRequest("POST",
|
||||
uri,
|
||||
ServerUtils.BuildQueryString(sendData));
|
||||
|
||||
//m_log.DebugFormat("[GRID CONNECTOR]: reply was {0}", reply);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.DebugFormat("[GRID CONNECTOR]: Exception when contacting grid server at {0}: {1}", uri, e.Message);
|
||||
return rinfos;
|
||||
}
|
||||
|
||||
if (reply != string.Empty)
|
||||
{
|
||||
Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(reply);
|
||||
|
||||
if (replyData != null)
|
||||
{
|
||||
Dictionary<string, object>.ValueCollection rinfosList = replyData.Values;
|
||||
foreach (object r in rinfosList)
|
||||
{
|
||||
if (r is Dictionary<string, object>)
|
||||
{
|
||||
GridRegion rinfo = new GridRegion((Dictionary<string, object>)r);
|
||||
rinfos.Add(rinfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
m_log.DebugFormat("[GRID CONNECTOR]: GetDefaultHypergridRegions {0} received null response",
|
||||
scopeID);
|
||||
}
|
||||
else
|
||||
m_log.DebugFormat("[GRID CONNECTOR]: GetDefaultHypergridRegions received null reply");
|
||||
|
||||
return rinfos;
|
||||
}
|
||||
|
||||
public List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y)
|
||||
{
|
||||
Dictionary<string, object> sendData = new Dictionary<string, object>();
|
||||
|
||||
@@ -341,6 +341,12 @@ namespace OpenSim.Services.Connectors.SimianGrid
|
||||
return new List<GridRegion>(0);
|
||||
}
|
||||
|
||||
public List<GridRegion> GetDefaultHypergridRegions(UUID scopeID)
|
||||
{
|
||||
// TODO: Allow specifying the default grid location
|
||||
return GetDefaultRegions(scopeID);
|
||||
}
|
||||
|
||||
public List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y)
|
||||
{
|
||||
GridRegion defRegion = GetNearestRegion(new Vector3d(x, y, 0.0), true);
|
||||
|
||||
@@ -265,8 +265,9 @@ namespace OpenSim.Services.GridService
|
||||
m_log.DebugFormat("[GRID SERVICE]: Database exception: {0}", e);
|
||||
}
|
||||
|
||||
m_log.DebugFormat("[GRID SERVICE]: Region {0} ({1}) registered successfully at {2}-{3}",
|
||||
regionInfos.RegionName, regionInfos.RegionID, regionInfos.RegionCoordX, regionInfos.RegionCoordY);
|
||||
m_log.DebugFormat("[GRID SERVICE]: Region {0} ({1}) registered successfully at {2}-{3} with flags {4}",
|
||||
regionInfos.RegionName, regionInfos.RegionID, regionInfos.RegionCoordX, regionInfos.RegionCoordY,
|
||||
(OpenSim.Framework.RegionFlags)flags);
|
||||
|
||||
return String.Empty;
|
||||
}
|
||||
@@ -478,6 +479,33 @@ namespace OpenSim.Services.GridService
|
||||
return ret;
|
||||
}
|
||||
|
||||
public List<GridRegion> GetDefaultHypergridRegions(UUID scopeID)
|
||||
{
|
||||
List<GridRegion> ret = new List<GridRegion>();
|
||||
|
||||
List<RegionData> regions = m_Database.GetDefaultHypergridRegions(scopeID);
|
||||
|
||||
foreach (RegionData r in regions)
|
||||
{
|
||||
if ((Convert.ToInt32(r.Data["flags"]) & (int)OpenSim.Framework.RegionFlags.RegionOnline) != 0)
|
||||
ret.Add(RegionData2RegionInfo(r));
|
||||
}
|
||||
|
||||
int hgDefaultRegionsFoundOnline = regions.Count;
|
||||
|
||||
// For now, hypergrid default regions will always be given precedence but we will also return simple default
|
||||
// regions in case no specific hypergrid regions are specified.
|
||||
ret.AddRange(GetDefaultRegions(scopeID));
|
||||
|
||||
int normalDefaultRegionsFoundOnline = ret.Count - hgDefaultRegionsFoundOnline;
|
||||
|
||||
m_log.DebugFormat(
|
||||
"[GRID SERVICE]: GetDefaultHypergridRegions returning {0} hypergrid default and {1} normal default regions",
|
||||
hgDefaultRegionsFoundOnline, normalDefaultRegionsFoundOnline);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y)
|
||||
{
|
||||
List<GridRegion> ret = new List<GridRegion>();
|
||||
|
||||
@@ -79,7 +79,7 @@ namespace OpenSim.Services.GridService
|
||||
{
|
||||
if (m_DefaultRegion == null)
|
||||
{
|
||||
List<GridRegion> defs = m_GridService.GetDefaultRegions(m_ScopeID);
|
||||
List<GridRegion> defs = m_GridService.GetDefaultHypergridRegions(m_ScopeID);
|
||||
if (defs != null && defs.Count > 0)
|
||||
m_DefaultRegion = defs[0];
|
||||
else
|
||||
|
||||
@@ -171,7 +171,7 @@ namespace OpenSim.Services.HypergridService
|
||||
m_log.DebugFormat("[GATEKEEPER SERVICE]: Request to link to {0}", (regionName == string.Empty)? "default region" : regionName);
|
||||
if (!m_AllowTeleportsToAnyRegion || regionName == string.Empty)
|
||||
{
|
||||
List<GridRegion> defs = m_GridService.GetDefaultRegions(m_ScopeID);
|
||||
List<GridRegion> defs = m_GridService.GetDefaultHypergridRegions(m_ScopeID);
|
||||
if (defs != null && defs.Count > 0)
|
||||
{
|
||||
region = defs[0];
|
||||
|
||||
@@ -97,6 +97,7 @@ namespace OpenSim.Services.Interfaces
|
||||
List<GridRegion> GetRegionRange(UUID scopeID, int xmin, int xmax, int ymin, int ymax);
|
||||
|
||||
List<GridRegion> GetDefaultRegions(UUID scopeID);
|
||||
List<GridRegion> GetDefaultHypergridRegions(UUID scopeID);
|
||||
List<GridRegion> GetFallbackRegions(UUID scopeID, int x, int y);
|
||||
List<GridRegion> GetHyperlinks(UUID scopeID);
|
||||
|
||||
|
||||
@@ -47,6 +47,44 @@ namespace OpenSim.Services.UserAccountService
|
||||
public GridUserService(IConfigSource config) : base(config)
|
||||
{
|
||||
m_log.Debug("[GRID USER SERVICE]: Starting user grid service");
|
||||
|
||||
MainConsole.Instance.Commands.AddCommand(
|
||||
"Users", false,
|
||||
"show grid users online",
|
||||
"show grid users online",
|
||||
"Show number of grid users registered as online.",
|
||||
"This number may not be accurate as a region may crash or not be cleanly shutdown and leave grid users shown as online\n."
|
||||
+ "For this reason, users online for more than 5 days are not currently counted",
|
||||
HandleShowGridUsersOnline);
|
||||
}
|
||||
|
||||
protected void HandleShowGridUsersOnline(string module, string[] cmdparams)
|
||||
{
|
||||
// if (cmdparams.Length != 4)
|
||||
// {
|
||||
// MainConsole.Instance.Output("Usage: show grid users online");
|
||||
// return;
|
||||
// }
|
||||
|
||||
// int onlineCount;
|
||||
int onlineRecentlyCount = 0;
|
||||
|
||||
DateTime now = DateTime.UtcNow;
|
||||
|
||||
foreach (GridUserData gu in m_Database.GetAll(""))
|
||||
{
|
||||
if (bool.Parse(gu.Data["Online"]))
|
||||
{
|
||||
// onlineCount++;
|
||||
|
||||
int unixLoginTime = int.Parse(gu.Data["Login"]);
|
||||
|
||||
if ((now - Util.ToDateTime(unixLoginTime)).Days < 5)
|
||||
onlineRecentlyCount++;
|
||||
}
|
||||
}
|
||||
|
||||
MainConsole.Instance.OutputFormat("Users online: {0}", onlineRecentlyCount);
|
||||
}
|
||||
|
||||
public virtual GridUserInfo GetGridUserInfo(string userID)
|
||||
|
||||
Reference in New Issue
Block a user