89 lines
2.2 KiB
Go
89 lines
2.2 KiB
Go
// Package core
|
|
// We will implement the popular open source project barrier kvm
|
|
// To ensure we can connect clients keyboard and mouse to the server
|
|
// while ScreenShare is taking place
|
|
package core
|
|
|
|
import (
|
|
"github.com/Akilan1999/remotegameplay/config"
|
|
"os/exec"
|
|
)
|
|
|
|
// Barrier It's preferred that the IP address used is a IPV6 address
|
|
type Barrier struct {
|
|
NodeName string
|
|
IPAddress string
|
|
Mode string
|
|
Process *exec.Cmd
|
|
}
|
|
|
|
// CreateBarrierSession Command to run "barrier.barrierc --debug INFO -f 192.168.0.175"
|
|
func (b *Barrier) CreateBarrierSession() error {
|
|
//Checks if barrier client exists
|
|
|
|
if err := DetectBarrier(); err != nil {
|
|
return err
|
|
}
|
|
|
|
//Get username from config file
|
|
configResp, err := config.ConfigInit()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
cmd := exec.Command("sudo", "-u", configResp.SystemUsername, "barrierc", "-f", "--disable-crypto", "--debug", "DEBUG", "--log", "/tmp/barrier.log", b.IPAddress)
|
|
|
|
// USE THE FOLLOWING TO DEBUG
|
|
//cmdReader, err := cmd.StdoutPipe()
|
|
//if err != nil {
|
|
// fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err)
|
|
// return
|
|
//}
|
|
//
|
|
//// the following is used to print output of the command
|
|
//// as it makes progress...
|
|
//scanner := bufio.NewScanner(cmdReader)
|
|
//go func() {
|
|
// for scanner.Scan() {
|
|
// fmt.Printf("%s\n", scanner.Text())
|
|
// //
|
|
// // TODO:
|
|
// // send output to server
|
|
// }
|
|
//}()
|
|
//
|
|
//if err := cmd.Start(); err != nil {
|
|
// return err
|
|
//}
|
|
|
|
if err := cmd.Start(); err != nil {
|
|
return err
|
|
}
|
|
|
|
println(cmd.Path)
|
|
|
|
// Saves the state of the command in the struct
|
|
b.Process = cmd
|
|
return nil
|
|
}
|
|
|
|
// DeleteBarrierSession Deletes barrier client session running
|
|
func (b *Barrier) DeleteBarrierSession() error {
|
|
// Halts the process
|
|
cmd := exec.Command("pkill", "barrierc")
|
|
if err := cmd.Run(); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// DetectBarrier This function ensures that the server has barrier client installed
|
|
func DetectBarrier() error {
|
|
_, err := exec.LookPath("barrierc")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|