RemoteAdmin:RemoteAdmin Examples
From OpenSimulator
Below are a view Examples on how to send commands from a remote enviroment.
Contents |
C# .NET
Example 1 - "admin_create_user"
This example needs the Nwc.XmlRpc library, located in your OpenSimulator bin folder.
public void CreateUser(Uri url, string adminPassword, string firstName, string lastName, string password, string email, int regionX, int regionY) { var address = Dns.GetHostEntry(url.DnsSafeHost).AddressList[0]; var ht = new Hashtable(); ht["password"] = adminPassword; ht["user_firstname"] = firstName; ht["user_lastname"] = lastName; ht["user_password"] = password; ht["user_email"] = email; ht["start_region_x"] = regionX; ht["start_region_y"] = regionY; var parameters = new List<Hashtable> { ht }; var rpc = new XmlRpcRequest("admin_create_user", parameters); rpc.Invoke(url.ToString()); } [Test] public void NativeUserRegistrationTest() { CreateUser(new Uri("http://yourgrid.com:9000/"), "secret", "Test2", "user2", "apassword", "email@address.com", 0, 0); }
Example 2 - "admin_create_user"
//Author Ottalese complements of yoursimspot.com //This example needs the CookComputing.XmlRpc library, this can be downloaded from http://www.xml-rpc.net/. //Recently updated code I originally posted, this can be secured using SSL. using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using CookComputing.XmlRpc; [XmlRpcUrl("http://ServerIpAddress:9000/")] public interface RemoteOpensim : IXmlRpcProxy { //Create new user [XmlRpcMethod("admin_create_user")] XmlRpcStruct admin_create_user(XmlRpcStruct Parameters); } public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void SubmitButton_Click(object sender, EventArgs e) { XmlRpcStruct NewUser = new XmlRpcStruct(); //Will contain return results. XmlRpcStruct Parameters = new XmlRpcStruct();//Parameters passed. try { RemoteOpensim Admin = XmlRpcProxyGen.Create<RemoteOpensim>(); Parameters.Add("password", "RemotePassword"); //Password you set in the .ini file for the RemoteAdmin Parameters.Add("user_firstname", SomeStringWithFirstName); Parameters.Add("user_lastname", SomeStringWithLastName); Parameters.Add("user_password", SomePassword); Parameters.Add("start_region_x", 0); Parameters.Add("start_region_y", 0); NewUser = Admin.admin_create_user(Parameters); foreach (DictionaryEntry ReturnResults in NewUser) { Response.Write(ReturnResults.Key.ToString() + " : " + d.Value.ToString());//Returns if the user was added or not } } catch (Exception ex) { Response.Write(ex.Message); } } }
Python
Example 1 - admin_broadcast
# Author : DrScofield # Source : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/ # License : BSD License #!/usr/bin/python import xmlrpclib # XML-RPC URL (http_listener_port) simulatorUrl = "http://127.0.0.1:9000" # instantiate server object simulator = xmlrpclib.Server(simulatorUrl) # invoke admin_alert: requires password and message simulator.admin_broadcast({'password': 'secret', 'message': 'the answer is 42'})
Python 3.6 Example - admin_create_user
#!/usr/bin/python3 # OpenSim Remoteadmin createuser # Python 3.6 - 2018 by Manfred Aabye Version 0.5.29 # import library from appJar import gui import xmlrpc.client import configparser from tkinter import * import tkinter as tk import sys import os import gettext gettext.bindtextdomain('OpenSimRemote', '/language') gettext.textdomain('OpenSimRemote') _ = gettext.gettext # gettext einfügen funktioniert so: # print(_('This is a translatable string.')) # ----------------------------- createuser --------------------------------------------- def createuser(): # Button Auswertung def createuserbutton(button): if button == "Ende": app.stop() return if button == "Hilfe": app.infoBox("Hilfe", "Bitte Ihre Server Daten in die OpenSimAdmin.ini eintragen.") return if button == "Senden": config = configparser.ConfigParser() config.sections() config.read('OpenSimAdmin.ini') SimulatorAdress = config['DEFAULT']['SimulatorAdress'] ConsoleUser = config['DEFAULT']['ConsoleUser'] ConsolePass = config['DEFAULT']['ConsolePass'] user_firstname = app.getEntry('user_firstname') user_lastname = app.getEntry('user_lastname') user_password = app.getEntry('user_password') start_region_x = app.getEntry('start_region_x') start_region_y = app.getEntry('start_region_y') user_email = app.getEntry('user_email') Simulator = xmlrpc.client.Server(SimulatorAdress) Simulator.admin_create_user({'password': ConsolePass, 'user_firstname': user_firstname, 'user_lastname': user_lastname, 'user_password': user_password, 'start_region_x': start_region_x, 'start_region_y': start_region_y, 'user_email': user_email}) return # Erstelle GUI Variablen Aufruf mit app app = gui("create user", "355x260") # Fenster erstellen mit Namen und Groesse app.setFont(12) # Textgroesse app.startLabelFrame("create user") # Nachrichten Text Abfragen app.addLabelEntry("user_firstname") app.addLabelEntry("user_lastname") app.addLabelSecretEntry("user_password") app.addLabelEntry("start_region_x") app.addLabelEntry("start_region_y") app.addLabelEntry("user_email") # Buttons ruft die Function createuserbutton auf app.addButtons(["Senden", "Hilfe", "Ende"], createuserbutton) app.stopLabelFrame() # start GUI app.go() createuser()
Create file: OpenSimAdmin.ini
[DEFAULT] SimulatorAdress = http://127.0.0.1:9000/ ConsoleUser = Test ConsolePass = secret
XML-RPC string
Example 1 - "create user"
(used with first C#.NET method above)
POST admin_create_user HTTP/1.0
Host: http://10.0.0.12:16384/
Content-type: text/xml
Content-Length: 993
<?xml version="1.0"?>
<methodCall>
<methodName>admin_create_user</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>password</name>
<value><string>password</string></value>
</member>
<member>
<name>user_firstname</name>
<value><string>male</string></value>
</member>
<member>
<name>user_lastname</name>
<value><string>9999</string></value>
</member>
<member>
<name>user_password</name>
<value><string>password</string></value>
</member>
<member>
<name>user_email</name>
<value><string>none@email.com</string></value>
</member>
<member>
<name>start_region_x</name>
<value><int>128</int></value>
</member>
<member>
<name>start_region_y</name>
<value><int>128</int></value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
RemoteAdmin executable for Windows
The RemoteAdmin executable for Windows is a command line tool based on the RemoteAdmin PHP Class.
PHP
Example 1
This example needs the RemoteAdmin PHP Class file available here (Original) or here (Revisited).
<?php // Author : Olish Newman // Source : http://code.google.com/p/opensimtools/wiki/RemoteAdminPHPClass // Licence : BSD License // Including the RemoteAdmin PHP class. It can be downloaded from the link above. include('RemoteAdmin.php'); // Instantiate the class with parameters identical to the Python example above $myRemoteAdmin = new RemoteAdmin('127.0.0.1', 9000, 'secret'); // Invoke admin_broadcast $parameters = array('message' => 'the answer is 42'); $myRemoteAdmin->SendCommand('admin_broadcast', $parameters); // Invoke admin_shutdown (example for use without parameters) $myRemoteAdmin->SendCommand('admin_shutdown'); // Invoke admin_create_user (multiple parameters) $parameters = array('user_firstname' => 'Ruth', 'user_lastname' => 'OpenSim', 'user_password' => 'MyPassword', 'start_region_x' => '1000', 'start_region_y' => '1000'); $myRemoteAdmin->SendCommand('admin_create_user', $parameters); ?>
Note: This script does not appear to work for create user because it tries to pass the start region x and y as a string when the RemoteAdmin needs a string. The class needs to be edited to pass it as a number or edit the remoteadmin source to convert the string to a unsigned int.
Example 2
Another example in PHP5, using CURL.//This is the slightly modified RPC-class of the BSD-licensed WiXTD webportal <?php class RemotePC { function __construct() { $this->serveruri = "http://myhost"; $this->serverport ="9000"; $this->password ="foobar"; } function call($command,$parameters) { $parameters['password'] = $this->password; $request = xmlrpc_encode_request($command, $parameters); $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $this->serveruri); curl_setopt( $ch, CURLOPT_PORT, $this->serverport]); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $request); curl_setopt ( $ch, CURLOPT_TIMEOUT, 5); $result = curl_exec($ch); curl_close($ch); return xmlrpc_decode($result); } } ?>
Example 3
Another example provided by MarcelEdward (triplehx3) can be found here. (Tested with OpenSimulator v0.9.1.0 Dev).
Perl
Because the OpenSimulator internal web server just accepts HTTP/1.0 requests, it's worth to give a perl example. It's not a daily thing to do HTTP/1.0 within the LWP environment. You can get the Perl example here.
Credits
Thanks to DrScofield for the Python Script Sources : http://xyzzyxyzzy.net/2008/01/23/using-pythons-xmlrpclib-with-opensim/