* Added XMLRPC Controller Module to OpenSimMain which allows XML-RPC queries to be sent to the core application.
* Disabled by default, but has two functions so far -- shutdown (timed or now), and create-region. * Added SendGeneralAlert function to SceneManager allowing all-user alerts to be sent from OpenSimMain.afrisby
parent
60e4541865
commit
2048d611cf
|
@ -0,0 +1,132 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Collections;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using Nini.Config;
|
||||||
|
using OpenSim.Framework.Communications.Cache;
|
||||||
|
using OpenSim.Framework.Console;
|
||||||
|
using OpenSim.Framework.Interfaces;
|
||||||
|
using OpenSim.Framework.Servers;
|
||||||
|
using OpenSim.Framework.Types;
|
||||||
|
using OpenSim.Framework.Utilities;
|
||||||
|
using OpenSim.Region.ClientStack;
|
||||||
|
using OpenSim.Region.Communications.Local;
|
||||||
|
using OpenSim.Region.Communications.OGS1;
|
||||||
|
using OpenSim.Region.Environment;
|
||||||
|
using OpenSim.Region.Environment.Scenes;
|
||||||
|
using OpenSim.Region.Physics.Manager;
|
||||||
|
using System.Globalization;
|
||||||
|
using Nwc.XmlRpc;
|
||||||
|
using RegionInfo = OpenSim.Framework.Types.RegionInfo;
|
||||||
|
|
||||||
|
namespace OpenSim
|
||||||
|
{
|
||||||
|
class OpenSimController
|
||||||
|
{
|
||||||
|
private OpenSimMain m_app;
|
||||||
|
private BaseHttpServer m_httpServer;
|
||||||
|
private const bool m_enablexmlrpc = false;
|
||||||
|
|
||||||
|
public OpenSimController(OpenSimMain core, BaseHttpServer httpd)
|
||||||
|
{
|
||||||
|
m_app = core;
|
||||||
|
m_httpServer = httpd;
|
||||||
|
|
||||||
|
if (m_enablexmlrpc)
|
||||||
|
{
|
||||||
|
m_httpServer.AddXmlRPCHandler("admin_create_region", XmlRpcCreateRegionMethod);
|
||||||
|
m_httpServer.AddXmlRPCHandler("admin_shutdown", XmlRpcShutdownMethod);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public XmlRpcResponse XmlRpcShutdownMethod(XmlRpcRequest request)
|
||||||
|
{
|
||||||
|
MainLog.Instance.Verbose("CONTROLLER", "Recieved Shutdown Administrator Request");
|
||||||
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
|
||||||
|
if ((string)requestData["shutdown"] == "delayed")
|
||||||
|
{
|
||||||
|
int timeout = Convert.ToInt32((string)requestData["milliseconds"]);
|
||||||
|
|
||||||
|
Hashtable responseData = new Hashtable();
|
||||||
|
responseData["accepted"] = "true";
|
||||||
|
response.Value = responseData;
|
||||||
|
|
||||||
|
m_app.SceneManager.SendGeneralMessage("Region is going down in " + ((int)(timeout / 1000)).ToString() + " second(s). Please save what you are doing and log out.");
|
||||||
|
|
||||||
|
// Perform shutdown
|
||||||
|
System.Timers.Timer shutdownTimer = new System.Timers.Timer(timeout); // Wait before firing
|
||||||
|
shutdownTimer.AutoReset = false;
|
||||||
|
shutdownTimer.Elapsed += new System.Timers.ElapsedEventHandler(shutdownTimer_Elapsed);
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Hashtable responseData = new Hashtable();
|
||||||
|
responseData["accepted"] = "true";
|
||||||
|
response.Value = responseData;
|
||||||
|
|
||||||
|
m_app.SceneManager.SendGeneralMessage("Region is going down now.");
|
||||||
|
|
||||||
|
// Perform shutdown
|
||||||
|
System.Timers.Timer shutdownTimer = new System.Timers.Timer(2000); // Wait 2 seconds before firing
|
||||||
|
shutdownTimer.AutoReset = false;
|
||||||
|
shutdownTimer.Elapsed += new System.Timers.ElapsedEventHandler(shutdownTimer_Elapsed);
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void shutdownTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
|
||||||
|
{
|
||||||
|
m_app.Shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
public XmlRpcResponse XmlRpcCreateRegionMethod(XmlRpcRequest request)
|
||||||
|
{
|
||||||
|
MainLog.Instance.Verbose("CONTROLLER", "Recieved Create Region Administrator Request");
|
||||||
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
|
Hashtable requestData = (Hashtable)request.Params[0];
|
||||||
|
|
||||||
|
RegionInfo newRegionData = new RegionInfo();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
newRegionData.RegionID = (string)requestData["region_id"];
|
||||||
|
newRegionData.RegionName = (string)requestData["region_name"];
|
||||||
|
newRegionData.RegionLocX = Convert.ToUInt32((string)requestData["region_x"]);
|
||||||
|
newRegionData.RegionLocY = Convert.ToUInt32((string)requestData["region_y"]);
|
||||||
|
|
||||||
|
// Security risk
|
||||||
|
newRegionData.DataStore = (string)requestData["datastore"];
|
||||||
|
|
||||||
|
newRegionData.InternalEndPoint = new System.Net.IPEndPoint(
|
||||||
|
System.Net.IPAddress.Parse((string)requestData["listen_ip"]), 0);
|
||||||
|
|
||||||
|
newRegionData.InternalEndPoint.Port = Convert.ToInt32((string)requestData["listen_port"]);
|
||||||
|
newRegionData.ExternalHostName = (string)requestData["external_address"];
|
||||||
|
|
||||||
|
newRegionData.MasterAvatarFirstName = (string)requestData["region_master_first"];
|
||||||
|
newRegionData.MasterAvatarLastName = (string)requestData["region_master_last"];
|
||||||
|
|
||||||
|
m_app.CreateRegion(newRegionData);
|
||||||
|
|
||||||
|
Hashtable responseData = new Hashtable();
|
||||||
|
responseData["created"] = "true";
|
||||||
|
response.Value = responseData;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
Hashtable responseData = new Hashtable();
|
||||||
|
responseData["created"] = "false";
|
||||||
|
responseData["error"] = e.ToString();
|
||||||
|
response.Value = responseData;
|
||||||
|
}
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -60,6 +60,7 @@ namespace OpenSim
|
||||||
public bool user_accounts;
|
public bool user_accounts;
|
||||||
public bool m_gridLocalAsset;
|
public bool m_gridLocalAsset;
|
||||||
|
|
||||||
|
private OpenSimController m_controller;
|
||||||
|
|
||||||
protected ModuleLoader m_moduleLoader;
|
protected ModuleLoader m_moduleLoader;
|
||||||
protected LocalLoginService m_loginService;
|
protected LocalLoginService m_loginService;
|
||||||
|
@ -162,6 +163,8 @@ namespace OpenSim
|
||||||
|
|
||||||
base.StartUp();
|
base.StartUp();
|
||||||
|
|
||||||
|
m_controller = new OpenSimController(this, m_httpServer);
|
||||||
|
|
||||||
if (m_sandbox)
|
if (m_sandbox)
|
||||||
{
|
{
|
||||||
LocalInventoryService inventoryService = new LocalInventoryService();
|
LocalInventoryService inventoryService = new LocalInventoryService();
|
||||||
|
|
|
@ -57,6 +57,11 @@ namespace OpenSim.Region.ClientStack
|
||||||
|
|
||||||
protected SceneManager m_sceneManager = new SceneManager();
|
protected SceneManager m_sceneManager = new SceneManager();
|
||||||
|
|
||||||
|
public SceneManager SceneManager
|
||||||
|
{
|
||||||
|
get { return m_sceneManager; }
|
||||||
|
}
|
||||||
|
|
||||||
public RegionApplicationBase()
|
public RegionApplicationBase()
|
||||||
{
|
{
|
||||||
m_startuptime = DateTime.Now;
|
m_startuptime = DateTime.Now;
|
||||||
|
|
|
@ -1319,7 +1319,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
SendAlertToUser(user, reason, false);
|
SendAlertToUser(user, reason, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void SendGeneralAlert(string message)
|
public void SendGeneralAlert(string message)
|
||||||
{
|
{
|
||||||
foreach (ScenePresence presence in m_scenePresences.Values)
|
foreach (ScenePresence presence in m_scenePresences.Values)
|
||||||
|
|
|
@ -150,6 +150,14 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
ForEachCurrentScene(delegate(Scene scene) { scene.HandleAlertCommand(cmdparams); });
|
ForEachCurrentScene(delegate(Scene scene) { scene.HandleAlertCommand(cmdparams); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SendGeneralMessage(string msg)
|
||||||
|
{
|
||||||
|
ForEachCurrentScene(delegate(Scene scene)
|
||||||
|
{
|
||||||
|
scene.SendGeneralAlert(msg);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public bool TrySetCurrentScene(string regionName)
|
public bool TrySetCurrentScene(string regionName)
|
||||||
{
|
{
|
||||||
if ((String.Compare(regionName, "root") == 0) || (String.Compare(regionName, "..") == 0))
|
if ((String.Compare(regionName, "root") == 0) || (String.Compare(regionName, "..") == 0))
|
||||||
|
|
Loading…
Reference in New Issue