add error handling
parent
a9f5e997ad
commit
462036f74b
|
@ -1,55 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace OpenSim.Modules.DataValue
|
||||
{
|
||||
class Compress
|
||||
{
|
||||
public static void CopyTo(Stream src, Stream dest)
|
||||
{
|
||||
byte[] bytes = new byte[4096];
|
||||
|
||||
int cnt;
|
||||
|
||||
while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0)
|
||||
{
|
||||
dest.Write(bytes, 0, cnt);
|
||||
}
|
||||
}
|
||||
|
||||
public static byte[] Zip(string str)
|
||||
{
|
||||
var bytes = Encoding.UTF8.GetBytes(str);
|
||||
|
||||
using (var msi = new MemoryStream(bytes))
|
||||
using (var mso = new MemoryStream())
|
||||
{
|
||||
using (var gs = new GZipStream(mso, CompressionMode.Compress))
|
||||
{
|
||||
CopyTo(msi, gs);
|
||||
}
|
||||
|
||||
return mso.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public static string Unzip(byte[] bytes)
|
||||
{
|
||||
using (var msi = new MemoryStream(bytes))
|
||||
using (var mso = new MemoryStream())
|
||||
{
|
||||
using (var gs = new GZipStream(msi, CompressionMode.Decompress))
|
||||
{
|
||||
CopyTo(gs, mso);
|
||||
}
|
||||
|
||||
return Encoding.UTF8.GetString(mso.ToArray());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
102
src/DataValue.cs
102
src/DataValue.cs
|
@ -119,22 +119,29 @@ namespace OpenSim.Modules.DataValue
|
|||
{
|
||||
if(m_storage != null)
|
||||
{
|
||||
SceneObjectGroup _host = m_scene.GetSceneObjectGroup(hostID);
|
||||
StorageElement _element = m_cache.Find(X => X.Group == _host.GroupID.ToString() && X.Index == key);
|
||||
try
|
||||
{
|
||||
SceneObjectGroup _host = m_scene.GetSceneObjectGroup(hostID);
|
||||
StorageElement _element = m_cache.Find(X => X.Group == _host.GroupID.ToString() && X.Index == key);
|
||||
|
||||
if (_element != null)
|
||||
return _element.get();
|
||||
if (_element != null)
|
||||
return _element.get();
|
||||
|
||||
checkRateLimit();
|
||||
checkRateLimit();
|
||||
|
||||
String _data = m_storage.get(_host.GroupID.ToString(), key);
|
||||
String _data = m_storage.get(_host.GroupID.ToString(), key);
|
||||
|
||||
if (_data == null)
|
||||
if (_data == null)
|
||||
return "";
|
||||
|
||||
m_cache.Add(new StorageElement(_host.GroupID.ToString(), key, _data, m_storage));
|
||||
|
||||
return _data;
|
||||
}catch(Exception _error)
|
||||
{
|
||||
m_log.Error("[" + Name + "] osGetDataValue: " + _error.Message);
|
||||
return "";
|
||||
|
||||
m_cache.Add(new StorageElement(_host.GroupID.ToString(), key, _data, m_storage));
|
||||
|
||||
return _data;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Exception("No data Storage aviable.");
|
||||
|
@ -145,19 +152,26 @@ namespace OpenSim.Modules.DataValue
|
|||
{
|
||||
if (m_storage != null)
|
||||
{
|
||||
SceneObjectGroup _host = m_scene.GetSceneObjectGroup(hostID);
|
||||
StorageElement _element = m_cache.Find(X => X.Group == _host.GroupID.ToString() && X.Index == key);
|
||||
|
||||
if(_element != null)
|
||||
try
|
||||
{
|
||||
_element.save(value);
|
||||
return;
|
||||
SceneObjectGroup _host = m_scene.GetSceneObjectGroup(hostID);
|
||||
StorageElement _element = m_cache.Find(X => X.Group == _host.GroupID.ToString() && X.Index == key);
|
||||
|
||||
if (_element != null)
|
||||
{
|
||||
_element.save(value);
|
||||
return;
|
||||
}
|
||||
|
||||
checkRateLimit();
|
||||
|
||||
m_cache.Add(new StorageElement(_host.GroupID.ToString(), key, value, m_storage));
|
||||
m_storage.save(_host.GroupID.ToString(), key, value);
|
||||
}
|
||||
catch (Exception _error)
|
||||
{
|
||||
m_log.Error("[" + Name + "] osSetDataValue: " + _error.Message);
|
||||
}
|
||||
|
||||
checkRateLimit();
|
||||
|
||||
m_cache.Add(new StorageElement(_host.GroupID.ToString(), key, value, m_storage));
|
||||
m_storage.save(_host.GroupID.ToString(), key, value);
|
||||
}
|
||||
|
||||
throw new Exception("No data Storage aviable.");
|
||||
|
@ -167,15 +181,23 @@ namespace OpenSim.Modules.DataValue
|
|||
{
|
||||
if (m_storage != null)
|
||||
{
|
||||
SceneObjectGroup _host = m_scene.GetSceneObjectGroup(hostID);
|
||||
StorageElement _element = m_cache.Find(X => X.Group == _host.GroupID.ToString() && X.Index == key);
|
||||
try
|
||||
{
|
||||
SceneObjectGroup _host = m_scene.GetSceneObjectGroup(hostID);
|
||||
StorageElement _element = m_cache.Find(X => X.Group == _host.GroupID.ToString() && X.Index == key);
|
||||
|
||||
checkRateLimit();
|
||||
checkRateLimit();
|
||||
|
||||
if (_element != null)
|
||||
m_cache.Remove(_element);
|
||||
if (_element != null)
|
||||
m_cache.Remove(_element);
|
||||
|
||||
m_storage.remove(_host.GroupID.ToString(), key);
|
||||
}
|
||||
catch (Exception _error)
|
||||
{
|
||||
m_log.Error("[" + Name + "] osDeleteDataValue: " + _error.Message);
|
||||
}
|
||||
|
||||
m_storage.remove(_host.GroupID.ToString(), key);
|
||||
}
|
||||
|
||||
throw new Exception("No data Storage aviable.");
|
||||
|
@ -186,18 +208,26 @@ namespace OpenSim.Modules.DataValue
|
|||
{
|
||||
if (m_storage != null)
|
||||
{
|
||||
SceneObjectGroup _host = m_scene.GetSceneObjectGroup(hostID);
|
||||
StorageElement _element = m_cache.Find(X => X.Group == _host.GroupID.ToString() && X.Index == key);
|
||||
try
|
||||
{
|
||||
SceneObjectGroup _host = m_scene.GetSceneObjectGroup(hostID);
|
||||
StorageElement _element = m_cache.Find(X => X.Group == _host.GroupID.ToString() && X.Index == key);
|
||||
|
||||
if (_element != null)
|
||||
return 1;
|
||||
if (_element != null)
|
||||
return 1;
|
||||
|
||||
checkRateLimit();
|
||||
checkRateLimit();
|
||||
|
||||
if (m_storage.check(_host.GroupID.ToString(), key))
|
||||
return 1;
|
||||
if (m_storage.check(_host.GroupID.ToString(), key))
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
catch (Exception _error)
|
||||
{
|
||||
m_log.Error("[" + Name + "] osCheckDataValue: " + _error.Message);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
throw new Exception("No data Storage aviable.");
|
||||
|
|
|
@ -19,7 +19,6 @@ namespace OpenSim.Modules.DataValue.Storage
|
|||
|
||||
private Scene m_scene = null;
|
||||
|
||||
private bool m_enabledCompress = true;
|
||||
private string m_dataValueDirectory = "./ScriptDataValue";
|
||||
|
||||
public FileSystem(Scene scene, IConfig config)
|
||||
|
@ -77,9 +76,6 @@ namespace OpenSim.Modules.DataValue.Storage
|
|||
|
||||
string _storageKey = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(ASCIIEncoding.ASCII.GetBytes(index.Trim().ToUpper()))).Replace("-", "");
|
||||
|
||||
if (m_enabledCompress)
|
||||
return m_dataValueDirectory + "/" + _nameSpace + "/" + _storageKey + ".gz";
|
||||
|
||||
return m_dataValueDirectory + "/" + _nameSpace + "/" + _storageKey + ".txt";
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue