public virtual bool Get(string id, object sender, AssetRetrieved handler) { AssetBase asset = null; if (m_Cache != null) { if (!m_Cache.Get(id, out asset)) { return(false); } } if (asset == null && m_ServerURI != null) { string uri = m_ServerURI + "/assets/" + id; lock (m_AssetHandlers) { AssetRetrievedEx handlerEx = new AssetRetrievedEx(delegate(AssetBase _asset) { handler(id, sender, _asset); }); List <AssetRetrievedEx> handlers; if (m_AssetHandlers.TryGetValue(id, out handlers)) { // Someone else is already loading this asset. It will notify our handler when done. handlers.Add(handlerEx); return(true); } handlers = new List <AssetRetrievedEx>(); handlers.Add(handlerEx); m_AssetHandlers.Add(id, handlers); QueuedAssetRequest request = new QueuedAssetRequest(); request.id = id; request.uri = uri; Util.FireAndForget(x => { AssetRequestProcessor(request); }); } } else { if (asset != null && (asset.Data == null || asset.Data.Length == 0)) { asset = null; } handler(id, sender, asset); } return(true); }
public bool Get(string id, Object sender, AssetRetrieved handler) { string uri = MapServer(id) + "/assets/" + id; AssetBase asset = null; if (m_Cache != null) { asset = m_Cache.Get(id); } if (asset == null || asset.Data == null || asset.Data.Length == 0) { lock (m_AssetHandlers) { AssetRetrievedEx handlerEx = new AssetRetrievedEx(delegate(AssetBase _asset) { handler(id, sender, _asset); }); // AssetRetrievedEx handlers; List <AssetRetrievedEx> handlers; if (m_AssetHandlers.TryGetValue(id, out handlers)) { // Someone else is already loading this asset. It will notify our handler when done. // handlers += handlerEx; handlers.Add(handlerEx); return(true); } // Load the asset ourselves // handlers += handlerEx; handlers = new List <AssetRetrievedEx>(); handlers.Add(handlerEx); m_AssetHandlers.Add(id, handlers); } QueuedAssetRequest request = new QueuedAssetRequest(); request.id = id; request.uri = uri; m_requestQueue.Enqueue(request); } else { handler(id, sender, asset); } return(true); }
public virtual bool Get(string id, object sender, AssetRetrieved callBack) { AssetBase asset = null; if (m_Cache != null) { if (!m_Cache.Get(id, out asset)) { return(false); } } if (asset == null) { if (id.Equals(Util.UUIDZeroString)) { return(false); } lock (m_AssetHandlers) { AssetRetrievedEx handlerEx = new AssetRetrievedEx(delegate(AssetBase _asset) { callBack(id, sender, _asset); }); List <AssetRetrievedEx> handlers; if (m_AssetHandlers.TryGetValue(id, out handlers)) { // Someone else is already loading this asset. It will notify our handler when done. handlers.Add(handlerEx); return(true); } handlers = new List <AssetRetrievedEx>(); handlers.Add(handlerEx); m_AssetHandlers.Add(id, handlers); m_requestQueue.Enqueue(id); } } else { if (asset != null && (asset.Data == null || asset.Data.Length == 0)) { asset = null; } callBack(id, sender, asset); } return(true); }
public bool Get(string id, Object sender, AssetRetrieved handler) { // m_log.DebugFormat("[ASSET SERVICE CONNECTOR]: Potentially asynchronous get request for {0}", id); string uri = m_ServerURI + "/assets/" + id; AssetBase asset = null; if (m_Cache != null) asset = m_Cache.Get(id); if (asset == null) { lock (m_AssetHandlers) { AssetRetrievedEx handlerEx = new AssetRetrievedEx(delegate(AssetBase _asset) { handler(id, sender, _asset); }); AssetRetrievedEx handlers; if (m_AssetHandlers.TryGetValue(id, out handlers)) { // Someone else is already loading this asset. It will notify our handler when done. handlers += handlerEx; return true; } // Load the asset ourselves handlers += handlerEx; m_AssetHandlers.Add(id, handlers); } bool success = false; try { AsynchronousRestObjectRequester.MakeRequest<int, AssetBase>("GET", uri, 0, delegate(AssetBase a) { if (m_Cache != null) m_Cache.Cache(a); AssetRetrievedEx handlers; lock (m_AssetHandlers) { handlers = m_AssetHandlers[id]; m_AssetHandlers.Remove(id); } handlers.Invoke(a); }, 30); success = true; } finally { if (!success) { lock (m_AssetHandlers) { m_AssetHandlers.Remove(id); } } } } else { handler(id, sender, asset); } return true; }
public bool Get(string id, Object sender, AssetRetrieved handler) { // m_log.DebugFormat("[ASSET SERVICE CONNECTOR]: Potentially asynchronous get request for {0}", id); string uri = m_ServerURI + "/assets/" + id; AssetBase asset = null; if (m_Cache != null) { asset = m_Cache.Get(id); } if (asset == null) { lock (m_AssetHandlers) { AssetRetrievedEx handlerEx = new AssetRetrievedEx(delegate(AssetBase _asset) { handler(id, sender, _asset); }); AssetRetrievedEx handlers; if (m_AssetHandlers.TryGetValue(id, out handlers)) { // Someone else is already loading this asset. It will notify our handler when done. handlers += handlerEx; return(true); } // Load the asset ourselves handlers += handlerEx; m_AssetHandlers.Add(id, handlers); } bool success = false; try { AsynchronousRestObjectRequester.MakeRequest <int, AssetBase>("GET", uri, 0, delegate(AssetBase a) { if (a != null && m_Cache != null) { m_Cache.Cache(a); } AssetRetrievedEx handlers; lock (m_AssetHandlers) { handlers = m_AssetHandlers[id]; m_AssetHandlers.Remove(id); } handlers.Invoke(a); }, m_maxAssetRequestConcurrency); success = true; } finally { if (!success) { lock (m_AssetHandlers) { m_AssetHandlers.Remove(id); } } } } else { handler(id, sender, asset); } return(true); }
public bool Get(string id, Object sender, AssetRetrieved handler) { string uri = MapServer(id) + "/assets/" + id; AssetBase asset = null; if (m_Cache != null) asset = m_Cache.Get(id); if (asset == null || asset.Data == null || asset.Data.Length == 0) { lock (m_AssetHandlers) { AssetRetrievedEx handlerEx = new AssetRetrievedEx(delegate(AssetBase _asset) { handler(id, sender, _asset); }); // AssetRetrievedEx handlers; List<AssetRetrievedEx> handlers; if (m_AssetHandlers.TryGetValue(id, out handlers)) { // Someone else is already loading this asset. It will notify our handler when done. // handlers += handlerEx; handlers.Add(handlerEx); return true; } // Load the asset ourselves // handlers += handlerEx; handlers = new List<AssetRetrievedEx>(); handlers.Add(handlerEx); m_AssetHandlers.Add(id, handlers); } QueuedAssetRequest request = new QueuedAssetRequest(); request.id = id; request.uri = uri; m_requestQueue.Enqueue(request); } else { handler(id, sender, asset); } return true; }