RemoteAdmin:RemoteAdmin Implement new command/de
From OpenSimulator
(→Schritt 1 - Hinzufügen eines neuen Befehls) |
(→Schritt 2 - Codierung unseres neuen Kommandos) |
||
Line 29: | Line 29: | ||
=== Schritt 2 - Codierung unseres neuen Kommandos === | === Schritt 2 - Codierung unseres neuen Kommandos === | ||
− | In | + | In Schritt 1 haben wir einen neuen Befehl hinzugefügt, der die Funktion ''XmlRpcOutputMessage''. aufruft . So ist unser nächster Schritt, unsere neue Funktion zu schaffen und alle goddies, die unser Befehl ausführen wird, zu umfassen. |
<source lang="csharp"> | <source lang="csharp"> | ||
Line 35: | Line 35: | ||
private void XmlRpcOutputMessage(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) | private void XmlRpcOutputMessage(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) | ||
{ | { | ||
− | // | + | //Liste mit allen Parametern, die zurückgegeben werden |
Hashtable responseData = (Hashtable)response.Value; | Hashtable responseData = (Hashtable)response.Value; | ||
− | // | + | //Liste mit allen empfangenen Parametern |
Hashtable requestData = (Hashtable)request.Params[0]; | Hashtable requestData = (Hashtable)request.Params[0]; | ||
− | // | + | //Prüfen Sie, ob die Parametermeldung empfangen wurde |
CheckStringParameters(requestData, responseData, new string[] { "message" }); | CheckStringParameters(requestData, responseData, new string[] { "message" }); | ||
Line 47: | Line 47: | ||
responseData["success"] = false; | responseData["success"] = false; | ||
− | // | + | //Prüfen Sie, ob eine Region mit dem Parameter region_id oder region_name existiert |
CheckRegionParamsInScene(requestData, out scene, out error_message); | CheckRegionParamsInScene(requestData, out scene, out error_message); | ||
if (scene == null) | if (scene == null) | ||
{ | { | ||
− | // | + | //Die Region ist nicht bekannt, also senden wir eine Fehlermeldung |
responseData["error"] = error_message; | responseData["error"] = error_message; | ||
throw new Exception(error_message); | throw new Exception(error_message); | ||
} | } | ||
− | // | + | // Hier arbeiten wir alle, wenn eine Region gefunden wird |
string message = (string) requestData["message"]; | string message = (string) requestData["message"]; | ||
m_log.InfoFormat("[RADMIN]: {0}: {1} {2}", message, scene.RegionInfo.RegionName, scene.RegionInfo.RegionID); | m_log.InfoFormat("[RADMIN]: {0}: {1} {2}", message, scene.RegionInfo.RegionName, scene.RegionInfo.RegionID); | ||
− | // | + | // Wir haben unsere Arbeit beendet, lasst uns einige Informationen zurückschicken |
responseData["success"] = true; | responseData["success"] = true; | ||
responseData["region_name"] = scene.RegionInfo.RegionName; | responseData["region_name"] = scene.RegionInfo.RegionName; |
Revision as of 03:20, 31 August 2017
This article or section is a Proposal It does not represent the current state of OpenSim, but is an idea for future work in OpenSim. Please feel free to update this page as part of the proposal discussion. |
This article or section contains incomplete information. Please help us by completing the content on this page. |
So implementieren Sie neue Befehle an Remote Admin
Bei der Implementierung eines neuen RemoteAdmin-Befehls müssen Sie die Datei /OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs bearbeiten
Bitte beachten Sie die RemoteAdmin Standards für das vorgeschlagene Namensschema.
Nehmen wir an, wir wollen einen Befehl erstellen, der eine Zeile in der Konsole ausgibt, die eine Nachricht und die Region uuid einer Region enthält, die wir wählen.
Schritt 1 - Hinzufügen eines neuen Befehls
Zuerst müssen wir unseren neuen Befehl definieren und zur Verfügung stellen. In der Funktion public void Initialise(OpenSimBase openSim) inden Sie eine Liste aller implementierten Befehle. Die verfügbaren Befehle beginnen mit availableMethods.... Dort fügen wir unseren neuen Befehl hinzu, nennen wir admin_output_message.
Wir werden nun eine neue availableMethods zu den bereits aufgeführten hinzufügen, waren admin_output_message ist unser Befehl und XmlRpcOutputMessage ist die Funktion, in der unser Befehl die Arbeit wehn aufgerufen hat (Schritt 2).
public void Initialise(OpenSimBase openSim) { ... //Unser neuer Befehl availableMethods["admin_output_message"] = (req, ep) => InvokeXmlRpcMethod(req, ep, XmlRpcOutputMessage); ... }
Schritt 2 - Codierung unseres neuen Kommandos
In Schritt 1 haben wir einen neuen Befehl hinzugefügt, der die Funktion XmlRpcOutputMessage. aufruft . So ist unser nächster Schritt, unsere neue Funktion zu schaffen und alle goddies, die unser Befehl ausführen wird, zu umfassen.
private void XmlRpcOutputMessage(XmlRpcRequest request, XmlRpcResponse response, IPEndPoint remoteClient) { //Liste mit allen Parametern, die zurückgegeben werden Hashtable responseData = (Hashtable)response.Value; //Liste mit allen empfangenen Parametern Hashtable requestData = (Hashtable)request.Params[0]; //Prüfen Sie, ob die Parametermeldung empfangen wurde CheckStringParameters(requestData, responseData, new string[] { "message" }); Scene scene = null; string error_message = String.Empty; responseData["success"] = false; //Prüfen Sie, ob eine Region mit dem Parameter region_id oder region_name existiert CheckRegionParamsInScene(requestData, out scene, out error_message); if (scene == null) { //Die Region ist nicht bekannt, also senden wir eine Fehlermeldung responseData["error"] = error_message; throw new Exception(error_message); } // Hier arbeiten wir alle, wenn eine Region gefunden wird string message = (string) requestData["message"]; m_log.InfoFormat("[RADMIN]: {0}: {1} {2}", message, scene.RegionInfo.RegionName, scene.RegionInfo.RegionID); // Wir haben unsere Arbeit beendet, lasst uns einige Informationen zurückschicken responseData["success"] = true; responseData["region_name"] = scene.RegionInfo.RegionName; }
- Our new function always starts of with creating the Hashtable responseData and requestData. In the requestData list we have all parameters we are recieving from our external application while responseData is the list of data we are sending back...
- If we have parameters that are needed and may not be empty, then one check these parameters using CheckStringParameters and CheckIntegerParams. If any of the specified paramaters, in our case the string "message" is not given, then a error with exeption will be given and the rest of our code will not be executed.
- As we want to send region data of a given region_id or region_name we use CheckRegionParamsInScene. This will output us the scene of the region if it exists. Both region_id and region_name are checked. If no region is found then scene = null and a error_mesage is returned. The error message can be used to send back as responseData["error"]
- As a response we always send responseData["success"] as true or false were true only is returned if no errors occured.
- If errors occure, we send the error message to our application as responseData["error"]