コード例 #1
0
        public bool CloneNetwork(NetworkViewModel viewModel, List <string> usedEntityNames)
        {
            if (viewModel.CurrentStatus != ServerStatus.STOPPED)
            {
                StopNetwork(viewModel, false);
                while (viewModel.CurrentStatus != ServerStatus.STOPPED)
                {
                    Thread.Sleep(500);
                }
            }
            try
            {
                DirectoryInfo directoryInfo = new DirectoryInfo(Path.Combine(App.ServerPath, viewModel.Name));
                if (!directoryInfo.Exists)
                {
                    ErrorLogger.Append(
                        new DirectoryNotFoundException("Could not find Directory " + directoryInfo.FullName));
                    return(false);
                }
                string newName = RefineName(viewModel.Name + "-Clone", usedEntityNames);

                //Better to use a object copy function
                string  oldNetworkJson = JsonConvert.SerializeObject(viewModel.Network);
                Network newNetwork     = JsonConvert.DeserializeObject <Network>(oldNetworkJson);

                newNetwork.Name = newName;
                newNetwork.UID  = Guid.NewGuid().ToString();
                NetworkViewModel newNetworkViewModel = new NetworkViewModel(newNetwork);

                string newNetworkPath = Path.Combine(App.ServerPath, newName);
                newNetworkViewModel.StartImport();
                Application.Current.Dispatcher?.Invoke(() => ServerManager.Instance.Entities.Add(newNetworkViewModel));
                ApplicationManager.Instance.MainViewModel.SelectedEntity = newNetworkViewModel;

                //Create server directory
                Directory.CreateDirectory(newNetworkPath);

                //Import server files
                Thread copyThread = new Thread(() =>
                {
                    FileImporter fileImporter         = new FileImporter();
                    fileImporter.CopyProgressChanged += newNetworkViewModel.CopyProgressChanged;
                    fileImporter.DirectoryCopy(directoryInfo.FullName, newNetworkPath, true, new List <string> {
                        "server.jar"
                    });
                    Console.WriteLine("Finished copying server files for server " + newNetworkPath);
                    newNetworkViewModel.FinishedCopying();
                });
                copyThread.Start();

                return(true);
            }
            catch (Exception e)
            {
                ErrorLogger.Append(e);
                return(false);
            }
        }
コード例 #2
0
        private bool ImportServer(ServerVersion version, ServerValidationInfo validationInfo,
                                  string originalServerDirectory, string serverName)
        {
            string serverPath = Path.Combine(App.ServerPath, serverName);

            while (Directory.Exists(serverPath))
            {
                serverPath += "-Copy";
                serverName += "-Copy";
            }

            ServerSettings settings;

            if (new FileInfo(Path.Combine(originalServerDirectory, "server.properties")).Exists)
            {
                var settingsDict = new FileReader().ReadServerSettings(originalServerDirectory);
                settings = new ServerSettings(settingsDict);
            }
            else
            {
                string worldName = validationInfo.Worlds.First().Name;
                settings = new ServerSettings(worldName);
            }

            Server server = new Server(serverName, version, settings, new JavaSettings());

            serverNames.Add(serverName);

            //Create server directory
            DirectoryInfo serverDirectory = Directory.CreateDirectory(serverPath);

            //Add server to Fork
            ServerViewModel viewModel = new ServerViewModel(server);

            viewModel.StartImport();
            Application.Current.Dispatcher.Invoke(() => Entities.Add(viewModel));
            ApplicationManager.Instance.MainViewModel.SelectedEntity = viewModel;


            //Import server files
            Thread copyThread = new Thread(() =>
            {
                FileImporter fileImporter         = new FileImporter();
                fileImporter.CopyProgressChanged += viewModel.CopyProgressChanged;
                fileImporter.DirectoryCopy(originalServerDirectory, serverPath, true, new List <string> {
                    "server.jar"
                });
                Console.WriteLine("Finished copying server files for server " + serverName);
                viewModel.FinishedCopying();
            });

            copyThread.Start();

            //Download server.jar
            Downloader.DownloadJarAsync(viewModel, serverDirectory);

            if (!validationInfo.EulaTxt)
            {
                //Write Eula
                new FileWriter().WriteEula(serverPath);
            }


            return(new DirectoryInfo(serverPath).Exists);
        }