From ee7bb90907d64e9edfbd2b264d2b8db583f06e04 Mon Sep 17 00:00:00 2001 From: John Hurliman Date: Fri, 31 Jul 2009 21:53:32 +0000 Subject: [PATCH] Implemented UDP fallback for RequestUploadBakedTexture() git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@3042 52acb1d6-8a22-11de-b505-999d5b087335 --- OpenMetaverse/AssetManager.cs | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/OpenMetaverse/AssetManager.cs b/OpenMetaverse/AssetManager.cs index e2fa5d5b..aae4cfe0 100644 --- a/OpenMetaverse/AssetManager.cs +++ b/OpenMetaverse/AssetManager.cs @@ -777,7 +777,36 @@ namespace OpenMetaverse else { Logger.Log("UploadBakedTexture not available, falling back to UDP method", Helpers.LogLevel.Info, Client); - // FIXME: + + ThreadPool.QueueUserWorkItem( + delegate(object o) + { + UUID transactionID = UUID.Random(); + BakedTextureUploadedCallback uploadCallback = (BakedTextureUploadedCallback)o; + AutoResetEvent uploadEvent = new AutoResetEvent(false); + AssetUploadedCallback udpCallback = + delegate(AssetUpload upload) + { + if (upload.ID == transactionID) + { + uploadEvent.Set(); + uploadCallback(upload.Success ? upload.AssetID : UUID.Zero); + } + }; + + OnAssetUploaded += udpCallback; + + UUID assetID; + RequestUpload(out assetID, AssetType.Texture, textureData, true, transactionID); + + bool success = uploadEvent.WaitOne(Settings.TRANSFER_TIMEOUT, false); + + OnAssetUploaded -= udpCallback; + + if (!success) + uploadCallback(UUID.Zero); + }, callback + ); } }