aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Common
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Common')
-rw-r--r--OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs4
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs48
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandManager.cs7
-rw-r--r--OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Dataserver.cs126
5 files changed, 182 insertions, 5 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs b/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs
index 7b9b496..c273c03 100644
--- a/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs
+++ b/OpenSim/Region/ScriptEngine/Common/BuiltIn_Commands_BaseClass.cs
@@ -1678,9 +1678,9 @@ namespace OpenSim.Region.ScriptEngine.Common
1678 return m_LSL_Functions.llGetInventoryCreator(item); 1678 return m_LSL_Functions.llGetInventoryCreator(item);
1679 } 1679 }
1680 1680
1681 public void llRequestSimulatorData(string simulator, int data) 1681 public string llRequestSimulatorData(string simulator, int data)
1682 { 1682 {
1683 m_LSL_Functions.llRequestSimulatorData(simulator, data); 1683 return m_LSL_Functions.llRequestSimulatorData(simulator, data);
1684 } 1684 }
1685 1685
1686 public void llForceMouselook(int mouselook) 1686 public void llForceMouselook(int mouselook)
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index 4e25ff8..9a2d240 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -5618,10 +5618,54 @@ namespace OpenSim.Region.ScriptEngine.Common
5618 wComm.DeliverMessage(ChatTypeEnum.Owner, 0, m_host.Name, m_host.UUID, msg); 5618 wComm.DeliverMessage(ChatTypeEnum.Owner, 0, m_host.Name, m_host.UUID, msg);
5619 } 5619 }
5620 5620
5621 public void llRequestSimulatorData(string simulator, int data) 5621 public string llRequestSimulatorData(string simulator, int data)
5622 { 5622 {
5623 m_host.AddScriptLPS(1); 5623 m_host.AddScriptLPS(1);
5624 NotImplemented("llRequestSimulatorData"); 5624
5625 string reply = String.Empty;
5626
5627 RegionInfo info = m_ScriptEngine.World.RequestClosestRegion(simulator);
5628
5629 switch(data)
5630 {
5631 case 5: // DATA_SIM_POS
5632 if(info == null)
5633 return LLUUID.Zero.ToString();
5634 reply = new LSL_Types.Vector3(
5635 info.RegionLocX * Constants.RegionSize,
5636 info.RegionLocY * Constants.RegionSize,
5637 0).ToString();
5638 break;
5639 case 6: // DATA_SIM_STATUS
5640 if(info != null)
5641 reply = "up"; // Duh!
5642 else
5643 reply = "unknown";
5644 break;
5645 case 7: // DATA_SIM_RATING
5646 if(info == null)
5647 return LLUUID.Zero.ToString();
5648 int access = (int)info.EstateSettings.simAccess;
5649 if(access == 21)
5650 reply = "MATURE";
5651 else if(access == 13)
5652 reply = "MATURE";
5653 else
5654 reply = "UNKNOWN";
5655 break;
5656 default:
5657 return LLUUID.Zero.ToString(); // Raise no event
5658 }
5659 LLUUID rq = LLUUID.Random();
5660
5661 LLUUID tid = m_ScriptEngine.m_ASYNCLSLCommandManager.
5662 m_Dataserver.RegisterRequest(m_localID,
5663 m_itemID, rq.ToString());
5664
5665 m_ScriptEngine.m_ASYNCLSLCommandManager.
5666 m_Dataserver.DataserverReply(rq.ToString(), reply);
5667
5668 return tid.ToString();
5625 } 5669 }
5626 5670
5627 public void llForceMouselook(int mouselook) 5671 public void llForceMouselook(int mouselook)
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
index dae7fa0..c6464f3 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
@@ -576,7 +576,7 @@ namespace OpenSim.Region.ScriptEngine.Common
576 //wiki: llOwnerSay(string msg) 576 //wiki: llOwnerSay(string msg)
577 void llOwnerSay(string msg); 577 void llOwnerSay(string msg);
578 //wiki: key llRequestSimulatorData(string simulator, integer data) 578 //wiki: key llRequestSimulatorData(string simulator, integer data)
579 void llRequestSimulatorData(string simulator, int data); 579 string llRequestSimulatorData(string simulator, int data);
580 //wiki: llForceMouselook(integer mouselook) 580 //wiki: llForceMouselook(integer mouselook)
581 void llForceMouselook(int mouselook); 581 void llForceMouselook(int mouselook);
582 //wiki: double llGetObjectMass(key id) 582 //wiki: double llGetObjectMass(key id)
diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandManager.cs
index 2a0ed37..64f6970 100644
--- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandManager.cs
+++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandManager.cs
@@ -50,6 +50,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
50 public Listener m_Listener; 50 public Listener m_Listener;
51 public SensorRepeat m_SensorRepeat; 51 public SensorRepeat m_SensorRepeat;
52 public XmlRequest m_XmlRequest; 52 public XmlRequest m_XmlRequest;
53 public Dataserver m_Dataserver;
53 54
54 public AsyncCommandManager(ScriptEngine _ScriptEngine) 55 public AsyncCommandManager(ScriptEngine _ScriptEngine)
55 { 56 {
@@ -62,6 +63,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
62 m_Listener = new Listener(this); 63 m_Listener = new Listener(this);
63 m_SensorRepeat = new SensorRepeat(this); 64 m_SensorRepeat = new SensorRepeat(this);
64 m_XmlRequest = new XmlRequest(this); 65 m_XmlRequest = new XmlRequest(this);
66 m_Dataserver = new Dataserver(this);
65 67
66 StartThread(); 68 StartThread();
67 } 69 }
@@ -142,6 +144,8 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
142 m_Listener.CheckListeners(); 144 m_Listener.CheckListeners();
143 // Check Sensors 145 // Check Sensors
144 m_SensorRepeat.CheckSenseRepeaterEvents(); 146 m_SensorRepeat.CheckSenseRepeaterEvents();
147 // Check dataserver
148 m_Dataserver.ExpireRequests();
145 } 149 }
146 150
147 /// <summary> 151 /// <summary>
@@ -171,6 +175,9 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
171 // Remove Sensors 175 // Remove Sensors
172 m_SensorRepeat.UnSetSenseRepeaterEvents(localID, itemID); 176 m_SensorRepeat.UnSetSenseRepeaterEvents(localID, itemID);
173 177
178 // Remove queries
179 m_Dataserver.RemoveEvents(localID, itemID);
180
174 } 181 }
175 182
176 183
diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Dataserver.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Dataserver.cs
new file mode 100644
index 0000000..eb87a9c
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/AsyncCommandPlugins/Dataserver.cs
@@ -0,0 +1,126 @@
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 OpenSim 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
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using libsecondlife;
32
33namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins
34
35{
36 public class Dataserver
37 {
38 public AsyncCommandManager m_CmdManager;
39
40 private Dictionary<string, DataserverRequest> DataserverRequests =
41 new Dictionary<string, DataserverRequest>();
42
43 public Dataserver(AsyncCommandManager CmdManager)
44 {
45 m_CmdManager = CmdManager;
46 }
47
48 private class DataserverRequest
49 {
50 public uint localID;
51 public LLUUID itemID;
52
53 public LLUUID ID;
54 public string handle;
55
56 public DateTime startTime;
57 }
58
59 public LLUUID RegisterRequest(uint localID, LLUUID itemID,
60 string identifier)
61 {
62 lock(DataserverRequests)
63 {
64 if(DataserverRequests.ContainsKey(identifier))
65 return LLUUID.Zero;
66
67 DataserverRequest ds = new DataserverRequest();
68
69 ds.localID = localID;
70 ds.itemID = itemID;
71
72 ds.ID = LLUUID.Random();
73 ds.handle = identifier;
74
75 ds.startTime = DateTime.Now;
76
77 DataserverRequests[identifier]=ds;
78
79 return ds.ID;
80 }
81 }
82
83 public void DataserverReply(string identifier, string reply)
84 {
85 DataserverRequest ds;
86
87 lock(DataserverRequests)
88 {
89 if(!DataserverRequests.ContainsKey(identifier))
90 return;
91
92 ds=DataserverRequests[identifier];
93 DataserverRequests.Remove(identifier);
94 }
95
96 m_CmdManager.m_ScriptEngine.m_EventQueueManager.AddToObjectQueue(
97 ds.localID, "dataserver", EventQueueManager.llDetectNull,
98 new Object[] { new LSL_Types.LSLString(ds.ID.ToString()),
99 new LSL_Types.LSLString(reply)});
100 }
101
102 public void RemoveEvents(uint localID, LLUUID itemID)
103 {
104 lock(DataserverRequests)
105 {
106 foreach (DataserverRequest ds in new List<DataserverRequest>(DataserverRequests.Values))
107 {
108 if(ds.itemID == itemID)
109 DataserverRequests.Remove(ds.handle);
110 }
111 }
112 }
113
114 public void ExpireRequests()
115 {
116 lock(DataserverRequests)
117 {
118 foreach (DataserverRequest ds in new List<DataserverRequest>(DataserverRequests.Values))
119 {
120 if(ds.startTime > DateTime.Now.AddSeconds(30))
121 DataserverRequests.Remove(ds.handle);
122 }
123 }
124 }
125 }
126}