public static void End(int id) { if (CurrentFile == null || CurrentFile.Id != id) { Util.SafeNotify($"END Channel mismatch! We have {CurrentFile?.Id} and supplied was {id}"); return; } if (CurrentFile.Type == FileType.Map) { var obj = Main.DeserializeBinary <ServerMap>(CurrentFile.Data.ToArray()) as ServerMap; if (obj == null) { Util.SafeNotify("ERROR DOWNLOADING MAP: NULL"); } else { Main.AddMap(obj); } } else if (CurrentFile.Type == FileType.Script) { var obj = Main.DeserializeBinary <ScriptCollection>(CurrentFile.Data.ToArray()) as ScriptCollection; if (obj == null) { Util.SafeNotify("ERROR DOWNLOADING SCRIPTS: NULL"); } else { Main.StartClientsideScripts(obj); if (Main.JustJoinedServer) { World.RenderingCamera = null; Main.MainMenu.TemporarilyHidden = false; Main.MainMenu.Visible = false; Main.JustJoinedServer = false; } Main.InvokeFinishedDownload(); } } CurrentFile.Dispose(); CurrentFile = null; }
internal static void End(int id) { if (CurrentFile == null || CurrentFile.Id != id) { Util.Util.SafeNotify($"END Channel mismatch! We have {CurrentFile?.Id} and supplied was {id}"); return; } try { if (CurrentFile.Type == FileType.Map) { var obj = Main.DeserializeBinary <ServerMap>(CurrentFile.Data.ToArray()) as ServerMap; if (obj == null) { Util.Util.SafeNotify("ERROR DOWNLOADING MAP: NULL"); } else { Main.AddMap(obj); } } else if (CurrentFile.Type == FileType.Script) { try { var scriptText = Encoding.UTF8.GetString(CurrentFile.Data.ToArray()); var newScript = LoadScript(CurrentFile.Filename, CurrentFile.Resource, scriptText); PendingScripts.ClientsideScripts.Add(newScript); } catch (ArgumentException) { CurrentFile.Dispose(); if (File.Exists(CurrentFile.FilePath)) { try { File.Delete(CurrentFile.FilePath); } catch { } } } } else if (CurrentFile.Type == FileType.EndOfTransfer) { try { if (Main.JustJoinedServer) { World.RenderingCamera = null; Main.MainMenu.TemporarilyHidden = false; Main.MainMenu.Visible = false; Main.JustJoinedServer = false; } List <string> AffectedResources = new List <string>(); AffectedResources.AddRange(PendingScripts.ClientsideScripts.Select(cs => cs.ResourceParent)); Main.StartClientsideScripts(PendingScripts); PendingScripts.ClientsideScripts.Clear(); Main.InvokeFinishedDownload(AffectedResources); } catch (Exception e) { LogManager.LogException(e, "DownloadManager"); } } else if (CurrentFile.Type == FileType.CustomData) { string data = Encoding.UTF8.GetString(CurrentFile.Data.ToArray()); JavascriptHook.InvokeCustomDataReceived(CurrentFile.Resource, data); } } finally { CurrentFile.Dispose(); if (CurrentFile.Type == FileType.Normal && File.Exists(CurrentFile.FilePath)) { var mime = MimeTypes.GetMimeType(File.ReadAllBytes(CurrentFile.FilePath), CurrentFile.FilePath); if (!_allowedFiletypes.Contains(mime)) { try { File.Delete(CurrentFile.FilePath); } catch { } Screen.ShowNotification("Disallowed file type: " + mime + "~n~" + CurrentFile.Filename); } } CurrentFile = null; } }