Files
Remote-Gameplay/core/barrier-kvm.go
2023-03-10 18:18:05 +00:00

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
}