1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package server
- import (
- "bufio"
- "fmt"
- "log"
- "os/exec"
- "strings"
- "time"
- )
- //StartService is exported
- func (server *Handler) StartService(dir string) {
- if server.isRunning == false {
- //server.log = []Log{} //Clean up the log
- cmdName := "octave -i"
- fmt.Println(cmdName)
- cmdArgs := strings.Fields(cmdName)
- server.cmd = exec.Command(cmdArgs[0], cmdArgs[1:len(cmdArgs)]...)
- server.cmd.Dir = dir
- server.stdout, _ = server.cmd.StdoutPipe()
- server.stdin, _ = server.cmd.StdinPipe()
- server.cmd.Start()
- server.StartStdout()
- server.isRunning = true
- server.startCheckStatus()
- server.startLogAutoCleaning()
- } else {
- log.Println("Server is already running.")
- }
- //cmd.Wait()
- //init the server status checker
- }
- func (server *Handler) startCheckStatus() {
- go func() {
- server.cmd.Wait()
- log.Println("Stopped.")
- server.isRunning = false
- }()
- }
- //StartStdout is exported
- func (server *Handler) StartStdout() {
- buf := bufio.NewReader(server.stdout)
- go func() {
- for {
- line, _, _ := buf.ReadLine()
- if string(line) != "" {
- newLog := Log{
- ID: server.ID,
- Timestamp: time.Now(),
- Log: string(line),
- }
- server.log = append(server.log, newLog)
- server.ID++
- }
- }
- }()
- }
|