private void AssetRequestProcessor(QueuedAssetRequest r) { string id = r.id; try { AssetBase a = SynchronousRestObjectRequester.MakeRequest <int, AssetBase>("GET", r.uri, 0, 30000, m_Auth); if (a != null && m_Cache != null) { m_Cache.Cache(a); } List <AssetRetrievedEx> handlers; lock (m_AssetHandlers) { handlers = m_AssetHandlers[id]; m_AssetHandlers.Remove(id); } if (handlers != null) { foreach (AssetRetrievedEx h in handlers) { try { h.Invoke(a); } catch { } } handlers.Clear(); } } catch { } }
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 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; }