| 5 |
using Xenki.Framework; |
using Xenki.Framework; |
| 6 |
using System.Drawing; |
using System.Drawing; |
| 7 |
using System.Windows.Media.Imaging; |
using System.Windows.Media.Imaging; |
| 8 |
|
using System.IO; |
| 9 |
|
using OpenMetaverse.Imaging; |
| 10 |
//using System.IO; |
//using System.IO; |
| 11 |
//using System.Windows.Media; |
//using System.Windows.Media; |
| 12 |
//using System.Drawing.Imaging; |
//using System.Drawing.Imaging; |
| 17 |
namespace Xenki.DefaultNetwork |
namespace Xenki.DefaultNetwork |
| 18 |
{ |
{ |
| 19 |
public delegate void OnLogDelegate(string msg); |
public delegate void OnLogDelegate(string msg); |
| 20 |
|
public delegate void OnMessageChatDelegate(string msg); |
| 21 |
|
|
| 22 |
|
|
| 23 |
class DefaultNetwork |
class DefaultNetwork |
| 24 |
{ |
{ |
| 31 |
private Timer m_cameraTimer = new Timer(1000); |
private Timer m_cameraTimer = new Timer(1000); |
| 32 |
private int m_cameraSeed; |
private int m_cameraSeed; |
| 33 |
private Random m_random = new Random(1338); |
private Random m_random = new Random(1338); |
| 34 |
|
private DefaultTexture.DefaultTexture defaultTexture; |
| 35 |
|
|
| 36 |
|
public static TextureCache textureCauche; |
| 37 |
|
|
| 38 |
public event OnLogDelegate OnLog; |
public event OnLogDelegate OnLog; |
| 39 |
|
public event OnMessageChatDelegate OnMessageChat; |
| 40 |
|
|
| 41 |
|
DefaultAgent.MessageChatManage chat; |
| 42 |
|
|
| 43 |
//AssetManager asset ; |
//AssetManager asset ; |
| 44 |
|
|
| 55 |
m_gridclient = new GridClient(); |
m_gridclient = new GridClient(); |
| 56 |
this.m_renderer = m_renderer; |
this.m_renderer = m_renderer; |
| 57 |
DefaultNetwork.m_primitiveData = m_primitiveData; |
DefaultNetwork.m_primitiveData = m_primitiveData; |
| 58 |
|
defaultTexture = new Xenki.DefaultTexture.DefaultTexture(m_gridclient); |
| 59 |
|
|
| 60 |
//asset = new AssetManager(m_gridclient); |
m_gridclient.Settings.USE_TEXTURE_CACHE = true; |
| 61 |
//asset.OnAssetReceived += new AssetManager.AssetReceivedCallback(asset_OnAssetReceived); |
m_gridclient.Settings.TEXTURE_CACHE_DIR = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "textures"); |
| 62 |
|
|
| 63 |
// Important |
// Important |
| 64 |
m_gridclient.Settings.MULTIPLE_SIMS = false; |
m_gridclient.Settings.MULTIPLE_SIMS = false; |
| 65 |
m_gridclient.Settings.OBJECT_TRACKING = false; |
m_gridclient.Settings.OBJECT_TRACKING = false; |
| 66 |
|
|
| 67 |
Settings.LOG_LEVEL = Helpers.LogLevel.Debug; |
Settings.LOG_LEVEL = Helpers.LogLevel.Debug; |
| 68 |
m_gridclient.Throttle.Land = 10000; |
m_gridclient.Throttle.Land = 10000; |
| 69 |
|
|
| 75 |
m_gridclient.Terrain.OnLandPatch += Terrain_OnLandPatch; |
m_gridclient.Terrain.OnLandPatch += Terrain_OnLandPatch; |
| 76 |
m_gridclient.Network.OnSimConnected += Network_OnSimConnected; |
m_gridclient.Network.OnSimConnected += Network_OnSimConnected; |
| 77 |
|
|
| 78 |
m_gridclient.Assets.OnImageReceived += new AssetManager.ImageReceivedCallback(Assets_OnImageReceived); |
|
| 79 |
|
defaultTexture.OnDownloadFinished += new Xenki.DefaultTexture.DefaultTexture.DownloadFinishedCallback(defaultTexture_OnDownloadFinished); |
| 80 |
|
|
| 81 |
|
chat = new Xenki.DefaultAgent.MessageChatManage(m_gridclient); |
| 82 |
|
chat.OnChat += new Xenki.DefaultAgent.OnChatDelegate(chat_OnChat); |
| 83 |
|
|
| 84 |
|
textureCauche = new TextureCache(m_gridclient); |
| 85 |
|
|
| 86 |
Logger.OnLogMessage += Logger_OnLogMessage; |
Logger.OnLogMessage += Logger_OnLogMessage; |
| 87 |
|
|
| 89 |
m_cameraTimer.Elapsed += m_cameraTimer_Elapsed; |
m_cameraTimer.Elapsed += m_cameraTimer_Elapsed; |
| 90 |
} |
} |
| 91 |
|
|
| 92 |
|
void chat_OnChat(string msg) |
| 93 |
|
{ |
| 94 |
|
if (OnMessageChat != null) |
| 95 |
|
OnMessageChat(msg); |
| 96 |
|
} |
| 97 |
|
|
| 98 |
|
void defaultTexture_OnDownloadFinished(ImageDownload imageIDDownload, bool success) |
| 99 |
|
{ |
| 100 |
|
byte[] bytes; |
| 101 |
|
bytes = DefaultNetwork.m_primitiveData.RetireveTextureData(imageIDDownload.ID); |
| 102 |
|
if (bytes == null || bytes.Length <= 0) |
| 103 |
|
{ |
| 104 |
|
DefaultNetwork.m_primitiveData.CacheDownloadedTexture(imageIDDownload); |
| 105 |
|
} |
| 106 |
|
if (success == true) |
| 107 |
|
{ |
| 108 |
|
textureCauche.SaveImageToCache(imageIDDownload.ID, imageIDDownload.AssetData); |
| 109 |
|
|
| 110 |
|
m_renderer.UpdatePrimTexture(imageIDDownload.ID); |
| 111 |
|
} |
| 112 |
|
} |
| 113 |
|
|
| 114 |
|
|
| 115 |
|
|
| 116 |
|
|
|
int times = 0; |
|
| 117 |
void Objects_OnObjectUpdated(Simulator simulator, ObjectUpdate update, ulong regionHandle, ushort timeDilation) |
void Objects_OnObjectUpdated(Simulator simulator, ObjectUpdate update, ulong regionHandle, ushort timeDilation) |
| 118 |
{ |
{ |
| 119 |
times++; |
|
| 120 |
} |
} |
| 121 |
|
|
| 122 |
void m_cameraTimer_Elapsed(object sender, ElapsedEventArgs e) |
void m_cameraTimer_Elapsed(object sender, ElapsedEventArgs e) |
| 174 |
void Network_OnConnected(object sender) |
void Network_OnConnected(object sender) |
| 175 |
{ |
{ |
| 176 |
// Download whole scene here. |
// Download whole scene here. |
| 177 |
textureCache = new TextureCache(m_gridclient); |
//textureCache = new TextureCache(m_gridclient); |
| 178 |
m_gridclient.Self.Movement.Camera.LookAt(new Vector3(128, 128, 192), new Vector3(128, 128, 0)); |
m_gridclient.Self.Movement.Camera.LookAt(new Vector3(128, 128, 192), new Vector3(128, 128, 0)); |
| 179 |
} |
} |
| 180 |
|
|
| 213 |
{ |
{ |
| 214 |
try |
try |
| 215 |
{ |
{ |
| 216 |
|
|
| 217 |
//log("Adding new primitive to Renderer scene: " + prim.LocalID + " at " + prim.Position); |
//log("Adding new primitive to Renderer scene: " + prim.LocalID + " at " + prim.Position); |
| 218 |
DownLoadTextureAndCache(prim.Textures.DefaultTexture.TextureID); |
DownLoadTextureAndCache(prim.Textures.DefaultTexture.TextureID); |
|
m_renderer.AddPrimitive(prim.LocalID, prim); |
|
|
// m_primitiveData.AddNewPrimitive(prim.LocalID, prim); |
|
| 219 |
|
|
| 220 |
|
m_renderer.AddPrimitive(prim.LocalID, prim); |
| 221 |
|
|
| 222 |
} catch(Exception e) |
} catch(Exception e) |
| 223 |
{ |
{ |
| 225 |
} |
} |
| 226 |
} |
} |
| 227 |
|
|
| 228 |
public static TextureCache textureCache; |
//public static TextureCache textureCache; |
| 229 |
|
|
| 230 |
void DownLoadTextureAndCache(UUID textureID) |
void DownLoadTextureAndCache(UUID textureID) |
| 231 |
{ |
{ |
| 232 |
// asset.Cache = textureCache; |
// asset.Cache = textureCache; |
| 233 |
//asset.RequestAsset(textureID, AssetType.Texture, true); |
//asset.RequestAsset(textureID, AssetType.Texture, true); |
| 234 |
byte[] imagebytes = DefaultNetwork.textureCache.GetCachedImageBytes(textureID); |
byte[] imagebytes = DefaultNetwork.m_primitiveData.RetireveTextureData(textureID); |
| 235 |
if (imagebytes != null && imagebytes.Length > 0) |
if (imagebytes != null && imagebytes.Length > 0) |
| 236 |
return; |
return; |
| 237 |
if (DefaultNetwork.m_primitiveData.UnAttachedTextures.ContainsValue(textureID) == true) |
if (DefaultNetwork.m_primitiveData.UnAttachedTextures.ContainsValue(textureID) == true) |
| 238 |
return; |
return; |
| 239 |
|
|
| 240 |
RequestTexture(textureID); |
defaultTexture.RequestTexture(textureID); |
| 241 |
|
|
|
} |
|
|
void Assets_OnImageReceived(ImageDownload image, AssetTexture asset) |
|
|
{ |
|
|
if (image.Success == true) |
|
|
{ |
|
|
lock (textureCache) |
|
|
{ |
|
|
if (textureCache.HasImage(image.ID) == false) |
|
|
{ |
|
|
textureCache.SaveImageToCache(image.ID, image.AssetData); |
|
|
} |
|
|
|
|
|
// OpenMetaverse.Imaging.ManagedImage img; |
|
|
// // //Image imgg ; |
|
|
|
|
|
// OpenMetaverse.AssetTexture texture = new AssetTexture(); |
|
|
// OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(image.AssetData, out texture.Image); |
|
|
//byte[] test= texture.Image.ExportTGA(); |
|
|
|
|
|
//if (texture.Image == null) |
|
|
// return; |
|
|
//img = texture.Image; |
|
|
|
|
|
////OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(asset.AssetData, out img); |
|
|
//byte[] imagebytes = img.ExportTGA(); |
|
|
//MemoryStream ms = new MemoryStream(imagebytes); |
|
|
//ms.Write(imagebytes, 0, imagebytes.Length); |
|
|
//Bitmap bitmap = OpenMetaverse.Imaging.LoadTGAClass.LoadTGA(ms); |
|
|
//ms.Close(); |
|
|
//bitmap.Save(Path.Combine(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "test"), new Guid().ToString() + ".bmp"), ImageFormat.Bmp); |
|
| 242 |
|
|
|
|
|
|
} |
|
|
|
|
|
m_renderer.UpdatePrimTexture(image.ID); |
|
| 243 |
} |
} |
|
} |
|
|
|
|
| 244 |
|
|
|
void asset_OnAssetReceived(AssetDownload transfer, Asset asset) |
|
|
{ |
|
|
OpenMetaverse.Imaging.ManagedImage image; |
|
| 245 |
|
|
|
OpenMetaverse.Imaging.OpenJPEG.DecodeToImage(transfer.AssetData, out image); |
|
| 246 |
|
|
|
if (image != null) |
|
|
{ |
|
|
image.ExportTGA(); |
|
|
} |
|
|
|
|
|
|
|
|
if (transfer.Status == StatusCode.Done) |
|
|
{ |
|
|
lock (textureCache) |
|
|
{ |
|
|
if (textureCache.HasImage(transfer.AssetID) == false) |
|
|
{ |
|
|
textureCache.SaveImageToCache(transfer.AssetID, transfer.AssetData); |
|
|
} |
|
|
} |
|
|
m_renderer.UpdatePrimTexture(transfer.AssetID); |
|
|
} |
|
|
|
|
|
} |
|
| 247 |
} |
} |
| 248 |
} |
} |