Add method to write a frozen server to a file

This commit is contained in:
Benjamin Jemlich 2011-04-26 01:30:18 +08:00 committed by Mikkel Krautz
parent adeb1b2a54
commit 3c5c71288d

View file

@ -6,7 +6,10 @@ package main
import (
"compress/gzip"
"fmt"
"gob"
"io"
"io/ioutil"
"os"
)
@ -58,6 +61,40 @@ type frozenGroup struct {
Remove []int "remove"
}
// Freeze a server and write it to a file
func (server *Server) FreezeToFile(filename string) (err os.Error) {
r := server.FreezeServer()
if err != nil {
return err
}
f, err := ioutil.TempFile(*datadir, fmt.Sprintf("%v_", server.Id))
if err != nil {
return err
}
_, err = io.Copy(f, r)
if err != nil {
return err
}
err = r.Close()
if err != nil {
return err
}
err = f.Sync()
if err != nil {
return err
}
err = f.Close()
if err != nil {
return err
}
err = os.Rename(f.Name(), filename)
if err != nil {
return err
}
return
}
// Freeze a server
func (server *Server) Freeze() (fs frozenServer, err os.Error) {
fs.Id = int(server.Id)