OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
XmlRequest.cs
Go to the documentation of this file.
1 /*
2  * Copyright (c) Contributors, http://opensimulator.org/
3  * See CONTRIBUTORS.TXT for a full list of copyright holders.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the OpenSimulator Project nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 using System;
29 using OpenSim.Region.Framework.Interfaces;
30 using OpenSim.Region.CoreModules.Scripting.XMLRPC;
31 using OpenSim.Region.ScriptEngine.Interfaces;
32 using OpenSim.Region.ScriptEngine.Shared;
33 using OpenSim.Region.ScriptEngine.Shared.Api;
34 
35 namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
36 {
37  public class XmlRequest
38  {
40 
41  public XmlRequest(AsyncCommandManager CmdManager)
42  {
43  m_CmdManager = CmdManager;
44  }
45 
46  public void CheckXMLRPCRequests()
47  {
48  if (m_CmdManager.m_ScriptEngine.World == null)
49  return;
50 
51  IXMLRPC xmlrpc = m_CmdManager.m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
52 
53  if (xmlrpc != null)
54  {
56 
57  while (rInfo != null)
58  {
59  xmlrpc.RemoveCompletedRequest(rInfo.GetMessageID());
60 
61  //Deliver data to prim's remote_data handler
62  object[] resobj = new object[]
63  {
64  new LSL_Types.LSLInteger(2),
65  new LSL_Types.LSLString(
66  rInfo.GetChannelKey().ToString()),
68  rInfo.GetMessageID().ToString()),
69  new LSL_Types.LSLString(String.Empty),
70  new LSL_Types.LSLInteger(rInfo.GetIntValue()),
71  new LSL_Types.LSLString(rInfo.GetStrVal())
72  };
73 
74  foreach (IScriptEngine e in m_CmdManager.ScriptEngines)
75  {
76  if (e.PostScriptEvent(
77  rInfo.GetItemID(), new EventParams(
78  "remote_data", resobj,
79  new DetectParams[0])))
80  break;
81  }
82 
83  rInfo = (RPCRequestInfo)xmlrpc.GetNextCompletedRequest();
84  }
85 
87 
88  while (srdInfo != null)
89  {
90  xmlrpc.RemoveCompletedSRDRequest(srdInfo.GetReqID());
91 
92  //Deliver data to prim's remote_data handler
93  object[] resobj = new object[]
94  {
95  new LSL_Types.LSLInteger(3),
96  new LSL_Types.LSLString(srdInfo.Channel.ToString()),
97  new LSL_Types.LSLString(srdInfo.GetReqID().ToString()),
98  new LSL_Types.LSLString(String.Empty),
99  new LSL_Types.LSLInteger(srdInfo.Idata),
100  new LSL_Types.LSLString(srdInfo.Sdata)
101  };
102 
103  foreach (IScriptEngine e in m_CmdManager.ScriptEngines)
104  {
105  if (e.PostScriptEvent(
106  srdInfo.ItemID, new EventParams(
107  "remote_data", resobj,
108  new DetectParams[0])))
109  break;
110  }
111 
113  }
114  }
115  }
116  }
117 }
bool PostScriptEvent(UUID itemID, EventParams parms)
Post an event to a single script
Handles LSL commands that takes long time and returns an event, for example timers, HTTP requests, etc.
An interface for a script API module to communicate with the engine it's running under ...
Holds all the data required to execute a scripting event.
Definition: Helpers.cs:281