server.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 := "octave -i"
  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. server.startLogAutoCleaning()
  26. } else {
  27. log.Println("Server is already running.")
  28. }
  29. //cmd.Wait()
  30. //init the server status checker
  31. }
  32. func (server *Handler) startCheckStatus() {
  33. go func() {
  34. server.cmd.Wait()
  35. log.Println("Stopped.")
  36. server.isRunning = false
  37. }()
  38. }
  39. //StartStdout is exported
  40. func (server *Handler) StartStdout() {
  41. i := len(server.log)
  42. buf := bufio.NewReader(server.stdout)
  43. go func() {
  44. for {
  45. line, _, _ := buf.ReadLine()
  46. if string(line) != "" {
  47. newLog := Log{
  48. ID: i,
  49. Timestamp: time.Now(),
  50. Log: string(line),
  51. }
  52. server.log = append(server.log, newLog)
  53. i++
  54. }
  55. }
  56. }()
  57. }