server.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package server
  2. import (
  3. "bufio"
  4. "fmt"
  5. "os/exec"
  6. "strings"
  7. "time"
  8. )
  9. //StartService is exported
  10. func (server *Handler) StartService() {
  11. cmdName := server.JavaPath + " -Xmx" + server.maxRAM + " -Xms" + server.minRAM + " -jar " + server.ServerJar + " nogui " + server.args
  12. fmt.Println(cmdName)
  13. cmdArgs := strings.Fields(cmdName)
  14. cmd := exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
  15. cmd.Dir = "./server/"
  16. server.stdout, _ = cmd.StdoutPipe()
  17. server.stdin, _ = cmd.StdinPipe()
  18. cmd.Start()
  19. server.StartStdin()
  20. server.StartStdout()
  21. //cmd.Wait()
  22. }
  23. //StartStdout is exported
  24. func (server *Handler) StartStdout() {
  25. i := 0
  26. buf := bufio.NewReader(server.stdout)
  27. go func() {
  28. for {
  29. line, _, _ := buf.ReadLine()
  30. if string(line) != "" {
  31. newLog := Log{
  32. ID: i,
  33. Timestamp: time.Now(),
  34. Log: string(line),
  35. }
  36. server.log = append(server.log, newLog)
  37. i++
  38. }
  39. }
  40. }()
  41. }
  42. //StartStdin is exported deprecated
  43. func (server *Handler) StartStdin() {
  44. /*
  45. go func() {
  46. for {
  47. time.Sleep(1 * time.Second)
  48. fmt.Println(server.command)
  49. defer server.stdin.Close()
  50. for i, line := range server.command {
  51. //send command!
  52. io.WriteString(server.stdin, line.command+"\n")
  53. if len(server.command)-1 != i {
  54. server.command = append(server.command[:i], server.command[i+1])
  55. } else {
  56. // if it is the last item, just remove it
  57. server.command = server.command[:i]
  58. }
  59. }
  60. }
  61. }()
  62. */
  63. }