Implemented: llSetText, llResetScript
Implemented: llHTTPRequest (queue, thread, etc -- but not actuall call)afrisby
parent
88968622ea
commit
c654506b18
|
@ -613,7 +613,7 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
int llGetRegionFlags();
|
int llGetRegionFlags();
|
||||||
//wiki: string llXorBase64StringsCorrect(string str1, string str2)
|
//wiki: string llXorBase64StringsCorrect(string str1, string str2)
|
||||||
string llXorBase64StringsCorrect(string str1, string str2);
|
string llXorBase64StringsCorrect(string str1, string str2);
|
||||||
void llHTTPRequest();
|
void llHTTPRequest(string url, List<string> parameters, string body);
|
||||||
//wiki: llResetLandBanList()
|
//wiki: llResetLandBanList()
|
||||||
void llResetLandBanList();
|
void llResetLandBanList();
|
||||||
//wiki: llResetLandPassList()
|
//wiki: llResetLandPassList()
|
||||||
|
|
|
@ -46,6 +46,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_BuiltIn_Commands_Interface m_LSL_Functions;
|
public LSL_BuiltIn_Commands_Interface m_LSL_Functions;
|
||||||
|
public string SourceCode = "";
|
||||||
|
|
||||||
public LSL_BaseClass()
|
public LSL_BaseClass()
|
||||||
{
|
{
|
||||||
|
@ -453,7 +454,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
||||||
public int llGetParcelFlags(LSL_Types.Vector3 pos) { return m_LSL_Functions.llGetParcelFlags(pos); }
|
public int llGetParcelFlags(LSL_Types.Vector3 pos) { return m_LSL_Functions.llGetParcelFlags(pos); }
|
||||||
public int llGetRegionFlags() { return m_LSL_Functions.llGetRegionFlags(); }
|
public int llGetRegionFlags() { return m_LSL_Functions.llGetRegionFlags(); }
|
||||||
public string llXorBase64StringsCorrect(string str1, string str2) { return m_LSL_Functions.llXorBase64StringsCorrect(str1, str2); }
|
public string llXorBase64StringsCorrect(string str1, string str2) { return m_LSL_Functions.llXorBase64StringsCorrect(str1, str2); }
|
||||||
public void llHTTPRequest() { m_LSL_Functions.llHTTPRequest(); }
|
public void llHTTPRequest(string url, List<string> parameters, string body) { m_LSL_Functions.llHTTPRequest(url, parameters, body); }
|
||||||
public void llResetLandBanList() { m_LSL_Functions.llResetLandBanList(); }
|
public void llResetLandBanList() { m_LSL_Functions.llResetLandBanList(); }
|
||||||
public void llResetLandPassList() { m_LSL_Functions.llResetLandPassList(); }
|
public void llResetLandPassList() { m_LSL_Functions.llResetLandPassList(); }
|
||||||
public int llGetParcelPrimCount(LSL_Types.Vector3 pos, int category, int sim_wide) { return m_LSL_Functions.llGetParcelPrimCount(pos, category, sim_wide); }
|
public int llGetParcelPrimCount(LSL_Types.Vector3 pos, int category, int sim_wide) { return m_LSL_Functions.llGetParcelPrimCount(pos, category, sim_wide); }
|
||||||
|
|
|
@ -431,7 +431,12 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
public void llGiveInventory(string destination, string inventory) { NotImplemented("llGiveInventory"); }
|
public void llGiveInventory(string destination, string inventory) { NotImplemented("llGiveInventory"); }
|
||||||
public void llRemoveInventory(string item) { NotImplemented("llRemoveInventory"); }
|
public void llRemoveInventory(string item) { NotImplemented("llRemoveInventory"); }
|
||||||
|
|
||||||
public void llSetText(string text, LSL_Types.Vector3 color, double alpha) { NotImplemented("llSetText"); }
|
public void llSetText(string text, LSL_Types.Vector3 color, double alpha)
|
||||||
|
{
|
||||||
|
Axiom.Math.Vector3 av3 = new Axiom.Math.Vector3((float)color.X, (float)color.Y, (float)color.Z);
|
||||||
|
m_host.SetText(text, av3, alpha);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public double llWater(LSL_Types.Vector3 offset) { NotImplemented("llWater"); return 0; }
|
public double llWater(LSL_Types.Vector3 offset) { NotImplemented("llWater"); return 0; }
|
||||||
public void llPassTouches(int pass) { NotImplemented("llPassTouches"); }
|
public void llPassTouches(int pass) { NotImplemented("llPassTouches"); }
|
||||||
|
@ -443,7 +448,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
public void llCollisionSound(string impact_sound, double impact_volume) { NotImplemented("llCollisionSound"); }
|
public void llCollisionSound(string impact_sound, double impact_volume) { NotImplemented("llCollisionSound"); }
|
||||||
public void llCollisionSprite(string impact_sprite) { NotImplemented("llCollisionSprite"); }
|
public void llCollisionSprite(string impact_sprite) { NotImplemented("llCollisionSprite"); }
|
||||||
public string llGetAnimation(string id) { NotImplemented("llGetAnimation"); return ""; }
|
public string llGetAnimation(string id) { NotImplemented("llGetAnimation"); return ""; }
|
||||||
public void llResetScript() { }
|
public void llResetScript()
|
||||||
|
{
|
||||||
|
m_ScriptEngine.m_ScriptManager.ResetScript(m_localID, m_itemID);
|
||||||
|
}
|
||||||
public void llMessageLinked(int linknum, int num, string str, string id) { }
|
public void llMessageLinked(int linknum, int num, string str, string id) { }
|
||||||
public void llPushObject(string target, LSL_Types.Vector3 impulse, LSL_Types.Vector3 ang_impulse, int local) { }
|
public void llPushObject(string target, LSL_Types.Vector3 impulse, LSL_Types.Vector3 ang_impulse, int local) { }
|
||||||
public void llPassCollisions(int pass) { }
|
public void llPassCollisions(int pass) { }
|
||||||
|
@ -482,7 +490,8 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
|
|
||||||
public LSL_Types.Vector3 llGetCenterOfMass() { NotImplemented("llGetCenterOfMass"); return new LSL_Types.Vector3(); }
|
public LSL_Types.Vector3 llGetCenterOfMass() { NotImplemented("llGetCenterOfMass"); return new LSL_Types.Vector3(); }
|
||||||
|
|
||||||
public List<string> llListSort(List<string> src, int stride, int ascending) {
|
public List<string> llListSort(List<string> src, int stride, int ascending)
|
||||||
|
{
|
||||||
SortedList<string, List<string>> sorted = new SortedList<string, List<string>>();
|
SortedList<string, List<string>> sorted = new SortedList<string, List<string>>();
|
||||||
// Add chunks to an array
|
// Add chunks to an array
|
||||||
int s = stride;
|
int s = stride;
|
||||||
|
@ -554,7 +563,8 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
{
|
{
|
||||||
return new LSL_Types.Vector3(double.Parse(src[index]), double.Parse(src[index + 1]), double.Parse(src[index + 2]));
|
return new LSL_Types.Vector3(double.Parse(src[index]), double.Parse(src[index + 1]), double.Parse(src[index + 2]));
|
||||||
}
|
}
|
||||||
public LSL_Types.Quaternion llList2Rot(List<string> src, int index) {
|
public LSL_Types.Quaternion llList2Rot(List<string> src, int index)
|
||||||
|
{
|
||||||
return new LSL_Types.Quaternion(double.Parse(src[index]), double.Parse(src[index + 1]), double.Parse(src[index + 2]), double.Parse(src[index + 3]));
|
return new LSL_Types.Quaternion(double.Parse(src[index]), double.Parse(src[index + 1]), double.Parse(src[index + 2]), double.Parse(src[index + 3]));
|
||||||
}
|
}
|
||||||
public List<string> llList2List(List<string> src, int start, int end)
|
public List<string> llList2List(List<string> src, int start, int end)
|
||||||
|
@ -632,7 +642,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
if (chunk.Count > 0)
|
if (chunk.Count > 0)
|
||||||
tmp.Add(chunk);
|
tmp.Add(chunk);
|
||||||
|
|
||||||
// Decreate array back into a list
|
// Decreate (<- what kind of word is that? :D ) array back into a list
|
||||||
int rnd;
|
int rnd;
|
||||||
List<string> ret = new List<string>();
|
List<string> ret = new List<string>();
|
||||||
while (tmp.Count > 0)
|
while (tmp.Count > 0)
|
||||||
|
@ -657,9 +667,11 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
s = 1;
|
s = 1;
|
||||||
|
|
||||||
int sc = s;
|
int sc = s;
|
||||||
for (int i = start; i < src.Count; i++) {
|
for (int i = start; i < src.Count; i++)
|
||||||
|
{
|
||||||
sc--;
|
sc--;
|
||||||
if (sc ==0) {
|
if (sc == 0)
|
||||||
|
{
|
||||||
sc = s;
|
sc = s;
|
||||||
// Addthis
|
// Addthis
|
||||||
ret.Add(src[i]);
|
ret.Add(src[i]);
|
||||||
|
@ -795,7 +807,8 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llSetPrimitiveParams(List<string> rules) { NotImplemented("llSetPrimitiveParams"); }
|
public void llSetPrimitiveParams(List<string> rules) { NotImplemented("llSetPrimitiveParams"); }
|
||||||
public string llStringToBase64(string str) {
|
public string llStringToBase64(string str)
|
||||||
|
{
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -808,9 +821,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
{
|
{
|
||||||
throw new Exception("Error in base64Encode" + e.Message);
|
throw new Exception("Error in base64Encode" + e.Message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public string llBase64ToString(string str) {
|
public string llBase64ToString(string str)
|
||||||
|
{
|
||||||
System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
|
System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
|
||||||
System.Text.Decoder utf8Decode = encoder.GetDecoder();
|
System.Text.Decoder utf8Decode = encoder.GetDecoder();
|
||||||
try
|
try
|
||||||
|
@ -861,10 +875,12 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
public List<string> llGetBoundingBox(string obj) { NotImplemented("llGetBoundingBox"); return new List<string>(); }
|
public List<string> llGetBoundingBox(string obj) { NotImplemented("llGetBoundingBox"); return new List<string>(); }
|
||||||
public LSL_Types.Vector3 llGetGeometricCenter() { NotImplemented("llGetGeometricCenter"); return new LSL_Types.Vector3(); }
|
public LSL_Types.Vector3 llGetGeometricCenter() { NotImplemented("llGetGeometricCenter"); return new LSL_Types.Vector3(); }
|
||||||
public void llGetPrimitiveParams() { NotImplemented("llGetPrimitiveParams"); }
|
public void llGetPrimitiveParams() { NotImplemented("llGetPrimitiveParams"); }
|
||||||
public string llIntegerToBase64(int number) {
|
public string llIntegerToBase64(int number)
|
||||||
|
{
|
||||||
NotImplemented("llIntegerToBase64"); return "";
|
NotImplemented("llIntegerToBase64"); return "";
|
||||||
}
|
}
|
||||||
public int llBase64ToInteger(string str) {
|
public int llBase64ToInteger(string str)
|
||||||
|
{
|
||||||
NotImplemented("llBase64ToInteger"); return 0;
|
NotImplemented("llBase64ToInteger"); return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -957,7 +973,8 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
|
|
||||||
public int llGetParcelFlags(LSL_Types.Vector3 pos) { NotImplemented("llGetParcelFlags"); return 0; }
|
public int llGetParcelFlags(LSL_Types.Vector3 pos) { NotImplemented("llGetParcelFlags"); return 0; }
|
||||||
public int llGetRegionFlags() { NotImplemented("llGetRegionFlags"); return 0; }
|
public int llGetRegionFlags() { NotImplemented("llGetRegionFlags"); return 0; }
|
||||||
public string llXorBase64StringsCorrect(string str1, string str2) {
|
public string llXorBase64StringsCorrect(string str1, string str2)
|
||||||
|
{
|
||||||
string ret = "";
|
string ret = "";
|
||||||
string src1 = llBase64ToString(str1);
|
string src1 = llBase64ToString(str1);
|
||||||
string src2 = llBase64ToString(str2);
|
string src2 = llBase64ToString(str2);
|
||||||
|
@ -972,7 +989,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
}
|
}
|
||||||
return llStringToBase64(ret);
|
return llStringToBase64(ret);
|
||||||
}
|
}
|
||||||
public void llHTTPRequest() { NotImplemented("llHTTPRequest"); }
|
public void llHTTPRequest(string url, List<string> parameters, string body)
|
||||||
|
{
|
||||||
|
m_ScriptEngine.m_LSLLongCmdHandler.StartHttpRequest(m_localID, m_itemID, url, parameters, body);
|
||||||
|
}
|
||||||
public void llResetLandBanList() { NotImplemented("llResetLandBanList"); }
|
public void llResetLandBanList() { NotImplemented("llResetLandBanList"); }
|
||||||
public void llResetLandPassList() { NotImplemented("llResetLandPassList"); }
|
public void llResetLandPassList() { NotImplemented("llResetLandPassList"); }
|
||||||
public int llGetParcelPrimCount(LSL_Types.Vector3 pos, int category, int sim_wide) { NotImplemented("llGetParcelPrimCount"); return 0; }
|
public int llGetParcelPrimCount(LSL_Types.Vector3 pos, int category, int sim_wide) { NotImplemented("llGetParcelPrimCount"); return 0; }
|
||||||
|
|
|
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using libsecondlife;
|
using libsecondlife;
|
||||||
|
using OpenSim.Region.ScriptEngine.Common;
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
{
|
{
|
||||||
|
@ -49,6 +50,8 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
{
|
{
|
||||||
// Check timers
|
// Check timers
|
||||||
CheckTimerEvents();
|
CheckTimerEvents();
|
||||||
|
// Check HttpRequests
|
||||||
|
CheckHttpRequests();
|
||||||
|
|
||||||
// Sleep before next cycle
|
// Sleep before next cycle
|
||||||
Thread.Sleep(cmdHandlerThreadCycleSleepms);
|
Thread.Sleep(cmdHandlerThreadCycleSleepms);
|
||||||
|
@ -60,14 +63,17 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="m_localID"></param>
|
/// <param name="m_localID"></param>
|
||||||
/// <param name="m_itemID"></param>
|
/// <param name="m_itemID"></param>
|
||||||
public void RemoveScript(uint m_localID, LLUUID m_itemID)
|
public void RemoveScript(uint localID, LLUUID itemID)
|
||||||
{
|
{
|
||||||
// Remove a specific script
|
// Remove a specific script
|
||||||
|
|
||||||
// Remove from: Timers
|
// Remove from: Timers
|
||||||
UnSetTimerEvents(m_localID, m_itemID);
|
UnSetTimerEvents(localID, itemID);
|
||||||
|
// Remove from: HttpRequest
|
||||||
|
StopHttpRequest(localID, itemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region TIMER
|
||||||
|
|
||||||
//
|
//
|
||||||
// TIMER
|
// TIMER
|
||||||
|
@ -80,7 +86,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
public DateTime next;
|
public DateTime next;
|
||||||
}
|
}
|
||||||
private List<TimerClass> Timers = new List<TimerClass>();
|
private List<TimerClass> Timers = new List<TimerClass>();
|
||||||
private object ListLock = new object();
|
private object TimerListLock = new object();
|
||||||
public void SetTimerEvent(uint m_localID, LLUUID m_itemID, double sec)
|
public void SetTimerEvent(uint m_localID, LLUUID m_itemID, double sec)
|
||||||
{
|
{
|
||||||
Console.WriteLine("SetTimerEvent");
|
Console.WriteLine("SetTimerEvent");
|
||||||
|
@ -96,7 +102,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
ts.itemID = m_itemID;
|
ts.itemID = m_itemID;
|
||||||
ts.interval = sec;
|
ts.interval = sec;
|
||||||
ts.next = DateTime.Now.ToUniversalTime().AddSeconds(ts.interval);
|
ts.next = DateTime.Now.ToUniversalTime().AddSeconds(ts.interval);
|
||||||
lock (ListLock)
|
lock (TimerListLock)
|
||||||
{
|
{
|
||||||
Timers.Add(ts);
|
Timers.Add(ts);
|
||||||
}
|
}
|
||||||
|
@ -104,7 +110,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
public void UnSetTimerEvents(uint m_localID, LLUUID m_itemID)
|
public void UnSetTimerEvents(uint m_localID, LLUUID m_itemID)
|
||||||
{
|
{
|
||||||
// Remove from timer
|
// Remove from timer
|
||||||
lock (ListLock)
|
lock (TimerListLock)
|
||||||
{
|
{
|
||||||
List<TimerClass> NewTimers = new List<TimerClass>();
|
List<TimerClass> NewTimers = new List<TimerClass>();
|
||||||
foreach (TimerClass ts in Timers)
|
foreach (TimerClass ts in Timers)
|
||||||
|
@ -124,7 +130,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
if (Timers.Count == 0)
|
if (Timers.Count == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
lock (ListLock)
|
lock (TimerListLock)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Go through all timers
|
// Go through all timers
|
||||||
|
@ -143,6 +149,114 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
}
|
}
|
||||||
} // lock
|
} // lock
|
||||||
}
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region HTTP REQUEST
|
||||||
|
|
||||||
|
//
|
||||||
|
// HTTP REAQUEST
|
||||||
|
//
|
||||||
|
private class HttpClass
|
||||||
|
{
|
||||||
|
public uint localID;
|
||||||
|
public LLUUID itemID;
|
||||||
|
public string url;
|
||||||
|
public List<string> parameters;
|
||||||
|
public string body;
|
||||||
|
public DateTime next;
|
||||||
|
|
||||||
|
public string response_request_id;
|
||||||
|
public int response_status;
|
||||||
|
public List<string> response_metadata;
|
||||||
|
public string response_body;
|
||||||
|
|
||||||
|
public void SendRequest()
|
||||||
|
{
|
||||||
|
// TODO: SEND REQUEST!!!
|
||||||
|
}
|
||||||
|
public void Stop()
|
||||||
|
{
|
||||||
|
// TODO: Cancel any ongoing request
|
||||||
|
}
|
||||||
|
public bool CheckResponse()
|
||||||
|
{
|
||||||
|
// TODO: Check if we got a response yet, return true if so -- false if not
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// TODO: If we got a response, set the following then return true
|
||||||
|
//response_request_id
|
||||||
|
//response_status
|
||||||
|
//response_metadata
|
||||||
|
//response_body
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private List<HttpClass> HttpRequests = new List<HttpClass>();
|
||||||
|
private object HttpListLock = new object();
|
||||||
|
public void StartHttpRequest(uint localID, LLUUID itemID, string url, List<string> parameters, string body)
|
||||||
|
{
|
||||||
|
Console.WriteLine("StartHttpRequest");
|
||||||
|
|
||||||
|
HttpClass htc = new HttpClass();
|
||||||
|
htc.localID = localID;
|
||||||
|
htc.itemID = itemID;
|
||||||
|
htc.url = url;
|
||||||
|
htc.parameters = parameters;
|
||||||
|
htc.body = body;
|
||||||
|
lock (HttpListLock)
|
||||||
|
{
|
||||||
|
|
||||||
|
//ADD REQUEST
|
||||||
|
HttpRequests.Add(htc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void StopHttpRequest(uint m_localID, LLUUID m_itemID)
|
||||||
|
{
|
||||||
|
// Remove from list
|
||||||
|
lock (HttpListLock)
|
||||||
|
{
|
||||||
|
List<HttpClass> NewHttpList = new List<HttpClass>();
|
||||||
|
foreach (HttpClass ts in HttpRequests)
|
||||||
|
{
|
||||||
|
if (ts.localID != m_localID && ts.itemID != m_itemID)
|
||||||
|
{
|
||||||
|
// Keeping this one
|
||||||
|
NewHttpList.Add(ts);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Shutting this one down
|
||||||
|
ts.Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HttpRequests.Clear();
|
||||||
|
HttpRequests = NewHttpList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public void CheckHttpRequests()
|
||||||
|
{
|
||||||
|
// Nothing to do here?
|
||||||
|
if (HttpRequests.Count == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
lock (HttpListLock)
|
||||||
|
{
|
||||||
|
foreach (HttpClass ts in HttpRequests)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (ts.CheckResponse() == true)
|
||||||
|
{
|
||||||
|
// Add it to event queue
|
||||||
|
//key request_id, integer status, list metadata, string body
|
||||||
|
object[] resobj = new object[] { ts.response_request_id, ts.response_status, ts.response_metadata, ts.response_body };
|
||||||
|
m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(ts.localID, ts.itemID, "http_response", resobj);
|
||||||
|
// Now stop it
|
||||||
|
StopHttpRequest(ts.localID, ts.itemID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // lock
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -221,7 +221,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
|
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
#region Start/Stop script
|
#region Start/Stop/Reset script
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fetches, loads and hooks up a script to an objects events
|
/// Fetches, loads and hooks up a script to an objects events
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -247,6 +247,12 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
ls.itemID = itemID;
|
ls.itemID = itemID;
|
||||||
unloadQueue.Enqueue(ls);
|
unloadQueue.Enqueue(ls);
|
||||||
}
|
}
|
||||||
|
public void ResetScript(uint localID, LLUUID itemID)
|
||||||
|
{
|
||||||
|
string script = GetScript(localID, itemID).SourceCode;
|
||||||
|
StopScript(localID, itemID);
|
||||||
|
StartScript(localID, itemID, script);
|
||||||
|
}
|
||||||
|
|
||||||
private void _StartScript(uint localID, LLUUID itemID, string Script)
|
private void _StartScript(uint localID, LLUUID itemID, string Script)
|
||||||
{
|
{
|
||||||
|
@ -255,7 +261,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
|
|
||||||
// We will initialize and start the script.
|
// We will initialize and start the script.
|
||||||
// It will be up to the script itself to hook up the correct events.
|
// It will be up to the script itself to hook up the correct events.
|
||||||
string FileName = "";
|
string ScriptSource = "";
|
||||||
|
|
||||||
SceneObjectPart m_host = World.GetSceneObjectPart(localID);
|
SceneObjectPart m_host = World.GetSceneObjectPart(localID);
|
||||||
|
|
||||||
|
@ -268,10 +274,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
// Create a new instance of the compiler (currently we don't want reuse)
|
// Create a new instance of the compiler (currently we don't want reuse)
|
||||||
OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.Compiler LSLCompiler = new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.Compiler();
|
OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.Compiler LSLCompiler = new OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.Compiler();
|
||||||
// Compile (We assume LSL)
|
// Compile (We assume LSL)
|
||||||
FileName = LSLCompiler.CompileFromLSLText(Script);
|
ScriptSource = LSLCompiler.CompileFromLSLText(Script);
|
||||||
//Console.WriteLine("Compilation of " + FileName + " done");
|
//Console.WriteLine("Compilation of " + FileName + " done");
|
||||||
// * Insert yield into code
|
// * Insert yield into code
|
||||||
FileName = ProcessYield(FileName);
|
ScriptSource = ProcessYield(ScriptSource);
|
||||||
|
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
@ -279,11 +285,12 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
before = GC.GetTotalMemory(true);
|
before = GC.GetTotalMemory(true);
|
||||||
#endif
|
#endif
|
||||||
LSL_BaseClass CompiledScript;
|
LSL_BaseClass CompiledScript;
|
||||||
CompiledScript = m_scriptEngine.m_AppDomainManager.LoadScript(FileName);
|
CompiledScript = m_scriptEngine.m_AppDomainManager.LoadScript(ScriptSource);
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
Console.WriteLine("Script " + itemID + " occupies {0} bytes", GC.GetTotalMemory(true) - before);
|
Console.WriteLine("Script " + itemID + " occupies {0} bytes", GC.GetTotalMemory(true) - before);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
CompiledScript.SourceCode = ScriptSource;
|
||||||
// Add it to our script memstruct
|
// Add it to our script memstruct
|
||||||
SetScript(localID, itemID, CompiledScript);
|
SetScript(localID, itemID, CompiledScript);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue