Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require "open3"
- require "fileutils"
- require 'thread'
- $continue = true
- File.open('LOG1.txt','w'){ |file| file.puts("started logging")}
- $save = "name"
- $loadName = "name"
- $save_next = false
- $load_next = false
- $short_autosave = 300
- $long_autosave = 1200
- def mdir(var)
- unless File.directory?(var)
- FileUtils.mkdir_p "./"+var
- end
- end
- mdir("Save")
- def cldir(var)
- Dir[var+"/*"].each {|s| FileUtils.rm_r(s)}
- end
- def log(data)
- File.open('LOG1.txt','a'){ |file| file.puts data}
- end
- def includes(data,str)
- return data.index(str)!=nil
- end
- $backup_timer = Time.now.to_i + $short_autosave
- $long_backup_timer = Time.now.to_i + $long_autosave
- $mutex = Mutex.new
- def backup(data, stdin)
- name = data.partition("> backup ").last
- $mutex.lock
- if ($save_next) then
- stdin.puts('say server back-up "'+$save+'" refused, backup already ongoing at "'+$save+'"')
- $mutex.unlock
- return nil
- end
- $save_next=true
- $mutex.unlock
- $save= name
- stdin.puts('say Backing up server at "'+$save+'"')
- stdin.puts("save-all")
- log($save+ " is the chosen save file(bk1)")
- end
- def backup_2(stdin)
- direct = "Save/"+$save
- log($save+ " is the chosen save file(bk2)")
- mdir(direct)
- cldir(direct)
- FileUtils.cp_r "./world/." , direct
- $save_next=false
- stdin.puts('say Backup complete at "'+$save+'"')
- end
- def load(data, stdin)
- $loadName= data.partition("> load ").last
- log($loadName+ " is the chosen load file(ld1)")
- stdin.puts("stop")
- $load_next= true
- end
- def load_2()
- log($loadName+ " is the chosen load file(ld2)")
- direct = "Save/"+$loadName
- cldir("world")
- FileUtils.cp_r direct+"/." , "./world"
- $load_next = false
- end
- $shortSaveNumber = 1
- $longSaveNumber = 1
- file_data = []
- if (File.exist?("autosaveData.txt"))
- file_data = File.read("autosaveData.txt").split
- end
- if(file_data.length >= 1) then
- $shortSaveNumber = file_data[0].to_i
- end
- if(file_data.length >= 2) then
- $longSaveNumber = file_data[1].to_i
- end
- $running=false
- $stdin = nil
- $timers = Mutex.new
- Thread.new do
- while($continue) do
- sleep($backup_timer-Time.now.to_i)
- saveName = "> backup autosave_"
- $timers.lock
- currTime = Time.now.to_i
- if($backup_timer > currTime) then
- $timers.unlock
- next
- end
- if(!$running) then
- $backup_timer = currTime + $short_autosave
- $long_backup_timer = currTime + $long_autosave
- $timers.unlock
- next
- end
- if($long_backup_timer <= currTime) then
- $backup_timer = currTime + $short_autosave
- $long_backup_timer = currTime + $long_autosave
- saveName = saveName + "long_#{$longSaveNumber}"
- $longSaveNumber = $longSaveNumber%3 + 1
- end
- if($backup_timer <= currTime) then
- $backup_timer = currTime + $short_autosave
- saveName = saveName + "short_#{$shortSaveNumber}"
- $shortSaveNumber = $shortSaveNumber%3 + 1
- end
- $timers.unlock
- backup(saveName,$stdin)
- end
- end
- def compute(stdin, data)
- if(includes(data,"[INFO] Saved the world"))then
- if($save_next)then
- backup_2(stdin);
- end
- end
- if( includes( data, "> stop")) then
- $continue = false
- stdin.puts( "stop")
- log("stop")
- end
- if( includes(data, "> backup")) then
- log("backup")
- $timers.lock
- $backup_timer = Time.now.to_i + $short_autosave
- $long_backup_timer = Time.now.to_i + $long_autosave
- $timers.unlock
- backup( data, stdin)
- end
- if(includes(data, "> load")) then
- log("load")
- load(data,stdin)
- end
- if(includes(data, "> files")) then
- log("files")
- sortedDir = Dir["Save/*"].sort_by { |file_name| File.stat(file_name).mtime }
- sortedDir.each {|s| stdin.puts("say '"+s.partition("Save/").last+"' : #{File.stat(s).mtime}")}
- end
- if(includes(data, "> quicksave")) then
- backup("> backup quicksave",stdin)
- end
- if(includes(data,"> quickload")) then
- sortedDir = Dir["Save/*"].sort_by { |file_name| File.stat(file_name).mtime }
- load("> load "+sortedDir[-1].partition("Save/").last, stdin)
- end
- if(includes(data,"> help")) then
- log("help")
- stdin.puts("say Commands are:")
- stdin.puts("say -help")
- stdin.puts("say -stop")
- stdin.puts("say -backup <name>")
- stdin.puts("say -load <name>")
- stdin.puts("say -files")
- stdin.puts("say -quicksave")
- stdin.puts("say -quickload")
- end
- end
- while($continue) do
- $stdin, stdout, wait_thr = Open3.popen2e("server.bat")
- $running=true
- $timers.lock
- $backup_timer = Time.now.to_i + $short_autosave
- $long_backup_timer = Time.now.to_i + $long_autosave
- $timers.unlock
- $mutex.lock
- $save_next = false;
- $mutex.unlock
- while($running) do
- data = stdout.readline.chomp
- File.open('LOG1.txt','a'){ |file| file.puts data+"\n"}
- compute($stdin,data)
- if(includes(data,"[INFO] Stopping server")) then
- $running=false
- break
- end
- end
- $stdin.close
- stdout.close
- wait_thr.value
- if($load_next) then
- load_2()
- end
- end
- File.open("autosaveData.txt", "w") { |f|
- f.write "#{$shortSaveNumber}\n"
- f.write "#{$longSaveNumber}\n"
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement