예제 #1
0
        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;
        }
예제 #2
0
        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;
            }
        }