public ReturnValue RegisterResource(int apiVersion, string springVersion, string md5, int length, ResourceType resourceType, string archiveName, string internalName, byte[] serializedData, List <string> dependencies, byte[] minimap, byte[] metalMap, byte[] heightMap, byte[] torrentData) { return(PlasmaServer.RegisterResource(apiVersion, springVersion, md5, length, resourceType, archiveName, internalName, serializedData, dependencies, minimap, metalMap, heightMap, torrentData)); }
public bool DownloadFile(string internalName, out List <string> links, out byte[] torrent, out List <string> dependencies, out ResourceType resourceType, out string torrentFileName) { return(PlasmaServer.DownloadFile(internalName, out links, out torrent, out dependencies, out resourceType, out torrentFileName)); }
public ResourceData GetResourceDataByInternalName(string internalName) { var db = new ZkDataContext(); var entry = db.Resources.SingleOrDefault(x => x.InternalName == internalName); if (entry != null) { return(PlasmaServer.ToResourceData(entry)); } else { return(null); } }
protected void lqContentFiles_Selecting(object sender, LinqDataSourceSelectEventArgs e) { var db = new ZkDataContext(); e.Result = db.ResourceContentFiles.Where(x => x.ResourceID == resourceID).ToList().Select( x => new { x.FileName, x.Md5, x.Length, TorrentFileName = PlasmaServer.GetTorrentFileName(x), x.LinkCount, x.ResourceID, LinkText = x.Links != null ? string.Join("<br/>", x.Links.Split('\n').Select(y => string.Format("<a href='{0}'>{0}</a>", y)).ToArray()): null }); }
protected void lqContentFiles_Deleting(object sender, LinqDataSourceDeleteEventArgs e) { e.Cancel = true; if ((bool?)Session["login"] == true) { var db = new ZkDataContext(); var todel = db.ResourceContentFiles.Single(x => x.Md5 == ((ResourceContentFile)e.OriginalObject).Md5); Utils.SafeDelete(PlasmaServer.GetTorrentPath(todel)); db.ResourceContentFiles.DeleteOnSubmit(todel); db.SaveChanges(); MessageBox.Show("Deleted " + todel.FileName); } else { MessageBox.Show("Not logged in"); } }
protected void lqResources_Deleting(object sender, LinqDataSourceDeleteEventArgs e) { e.Cancel = true; if ((bool?)Session["login"] == true) { var db = new ZkDataContext(); var todel = db.Resources.Single(x => x.InternalName == ((Resource)e.OriginalObject).InternalName); PlasmaServer.RemoveResourceFiles(todel); db.Resources.DeleteOnSubmit(todel); db.SubmitChanges(); MessageBox.Show("Deleted " + todel.InternalName); } else { MessageBox.Show("Not logged in"); } }
/// <summary> /// Finds resource by either md5 or internal name /// </summary> /// <param name="md5"></param> /// <param name="internalName"></param> /// <returns></returns> public ResourceData GetResourceData(string md5, string internalName) { return(PlasmaServer.GetResourceData(md5, internalName)); }
public DownloadFileResult DownloadFile(string internalName) { return(PlasmaServer.DownloadFile(internalName)); }
public List <ResourceData> GetResourceList(DateTime?lastChange, out DateTime currentTime) { return(PlasmaServer.GetResourceList(lastChange, out currentTime)); }
public ResourceData GetResourceDataByResourceID(int resourceID) { var db = new ZkDataContext(); return(PlasmaServer.ToResourceData(db.Resources.Single(x => x.ResourceID == resourceID))); }
public static bool GetLinksAndTorrent(string internalName, out List <string> links, out byte[] torrent, out List <string> dependencies, out ResourceType resourceType, out string torrentFileName) { var db = new ZkDataContext(); var resource = db.Resources.SingleOrDefault(x => x.InternalName == internalName); if (resource == null) { torrent = null; links = null; dependencies = null; resourceType = ResourceType.Map; torrentFileName = null; return(false); } dependencies = resource.ResourceDependencies.Select(x => x.NeedsInternalName).ToList(); resourceType = resource.TypeID; var bestOld = resource.ResourceContentFiles.FirstOrDefault(x => x.LinkCount == resource.ResourceContentFiles.Max(y => y.LinkCount)); if (bestOld != null && bestOld.LinkCount > 0 && (resource.MissionID != null || (resource.LastLinkCheck != null && DateTime.UtcNow.Subtract(resource.LastLinkCheck.Value).TotalHours < 2))) { // use cached values for missions or resources checked less than 1 day ago links = PlasmaServer.GetLinkArray(bestOld); torrent = PlasmaServer.GetTorrentData(bestOld); torrentFileName = PlasmaServer.GetTorrentFileName(bestOld); if (links.Count > 0) { db.Database.ExecuteSqlCommand("UPDATE Resources SET DownloadCount = DownloadCount+1 WHERE ResourceID={0}", resource.ResourceID); } else { db.Database.ExecuteSqlCommand("UPDATE Resources SET NoLinkDownloadCount = NoLinkDownloadCount+1 WHERE ResourceID={0}", resource.ResourceID); } return(true); } RequestData data; var isNew = false; lock (Requests) { if (!Requests.TryGetValue(resource.ResourceID, out data)) { data = new RequestData(resource.ResourceID); isNew = true; Requests.Add(resource.ResourceID, data); } } if (!isNew) { // request is ongoing, wait for completion data.WaitHandle.WaitOne(); torrentFileName = PlasmaServer.GetTorrentFileName(data.ContentFile); links = PlasmaServer.GetLinkArray(data.ContentFile); torrent = PlasmaServer.GetTorrentData(data.ContentFile); if (links.Count > 0) { db.Database.ExecuteSqlCommand("UPDATE Resources SET DownloadCount = DownloadCount+1 WHERE ResourceID={0}", resource.ResourceID); } else { db.Database.ExecuteSqlCommand("UPDATE Resources SET NoLinkDownloadCount = NoLinkDownloadCount+1 WHERE ResourceID={0}", resource.ResourceID); } return(true); } else { // new request - actually perform it try { var toCheck = from x in resource.ResourceContentFiles group x by new { x.FileName, x.Length } into g where !g.Key.FileName.EndsWith(".sdp") select g.First(); Task.WaitAll(toCheck.Select(x => Task.Factory.StartNew(() => UpdateLinks(x))).ToArray()); db.SaveChanges(); // find best content file - the one with most links var best = resource.ResourceContentFiles.FirstOrDefault(x => x.LinkCount == resource.ResourceContentFiles.Max(y => y.LinkCount)); if (best != null) { data.ContentFile = best; } else { data.ContentFile = resource.ResourceContentFiles.First(); // all content files sux, reurn any } links = PlasmaServer.GetLinkArray(data.ContentFile); torrent = PlasmaServer.GetTorrentData(data.ContentFile); torrentFileName = PlasmaServer.GetTorrentFileName(data.ContentFile); if (links.Count > 0) { resource.DownloadCount++; } else { resource.NoLinkDownloadCount++; } db.SaveChanges(); return(true); } finally { lock (Requests) Requests.Remove(data.ResourceID); data.WaitHandle.Set(); // notify other waiting Requests that its done } } }