server.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package server
  2. import (
  3. "bufio"
  4. "fmt"
  5. "log"
  6. "os/exec"
  7. "strings"
  8. "time"
  9. )
  10. //StartService is exported
  11. func (server *Handler) StartService(dir string) {
  12. if server.isRunning == false {
  13. //server.log = []Log{} //Clean up the log
  14. cmdName := server.JavaPath + " -Xmx" + server.maxRAM + " -Xms" + server.minRAM + " -jar " + server.ServerJar + " nogui " + server.args
  15. fmt.Println(cmdName)
  16. cmdArgs := strings.Fields(cmdName)
  17. server.cmd = exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
  18. server.cmd.Dir = dir
  19. server.stdout, _ = server.cmd.StdoutPipe()
  20. server.stdin, _ = server.cmd.StdinPipe()
  21. server.cmd.Start()
  22. server.StartStdout()
  23. server.isRunning = true
  24. server.startCheckStatus()
  25. } else {
  26. log.Println("Server is already running.")
  27. }
  28. //cmd.Wait()
  29. //init the server status checker
  30. }
  31. func (server *Handler) startCheckStatus() {
  32. go func() {
  33. server.cmd.Wait()
  34. log.Println("Stopped.")
  35. server.isRunning = false
  36. }()
  37. }
  38. //StartStdout is exported
  39. func (server *Handler) StartStdout() {
  40. i := len(server.log)
  41. buf := bufio.NewReader(server.stdout)
  42. go func() {
  43. for {
  44. line, _, _ := buf.ReadLine()
  45. if string(line) != "" {
  46. newLog := Log{
  47. ID: i,
  48. Timestamp: time.Now(),
  49. Log: string(line),
  50. }
  51. server.log = append(server.log, newLog)
  52. i++
  53. }
  54. }
  55. }()
  56. }