server.go 1.2 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 := "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. buf := bufio.NewReader(server.stdout)
  42. go func() {
  43. for {
  44. line, _, _ := buf.ReadLine()
  45. if string(line) != "" {
  46. newLog := Log{
  47. ID: server.ID,
  48. Timestamp: time.Now(),
  49. Log: string(line),
  50. }
  51. server.log = append(server.log, newLog)
  52. server.ID++
  53. }
  54. }
  55. }()
  56. }