debug needed

This commit is contained in:
TonyChyi
2022-09-26 16:07:25 +08:00
parent bd0812cc42
commit 821c0cffb8
12 changed files with 148 additions and 171 deletions

View File

@@ -1,7 +0,0 @@
package qemuserver
import "github.com/sirupsen/logrus"
func init() {
logrus.Info("qemu server loaded")
}

View File

@@ -19,25 +19,25 @@ type Server struct {
RX chan *qemuconnection.Event
TX chan qemu.Status
}
qemu *qemu.Domain
}
var DefaultServer *Server
func NewServer(o *Options) *Server {
func NewServer(o *Options) (*Server, error) {
if err := o.MakeFIFO(); err != nil {
return nil, err
}
server := &Server{
options: o,
}
server.QmpConnector.RX = make(chan *qemuconnection.Event)
server.QmpConnector.TX = make(chan qemu.Status)
return server
}
func (s *Server) Run() error {
logrus.Debug("qemu server running")
defer logrus.Debug("qemu server exit")
u, err := url.Parse(s.options.QmpAddress)
u, err := url.Parse(o.QmpAddress)
if err != nil {
return err
return nil, err
}
var address string
if u.Scheme == "unix" {
@@ -46,29 +46,57 @@ func (s *Server) Run() error {
address = u.Host
}
logrus.Debugf("trying to connect qmp with %s://%s", u.Scheme, address)
qmpConnection, err := qmp.NewSocketMonitor(u.Scheme, address, s.options.Timeout)
qmpConnection, err := qmp.NewSocketMonitor(u.Scheme, address, o.Timeout)
if err != nil {
return err
return nil, err
}
defer qmpConnection.Disconnect()
if err := qmpConnection.Connect(); err != nil {
return err
return nil, err
}
logrus.Debug("qmp connected")
qemu, err := qemu.NewDomain(qmpConnection, s.options.Name)
qemu, err := qemu.NewDomain(qmpConnection, o.Name)
if err != nil {
return err
return nil, err
}
defer qemu.Close()
server.qemu = qemu
go s.startCapture(qemu)
if err := driver.GetManager().Register(
audiodriver.New(o.AudioPipe),
driver.Info{
Label: "audioFifo",
DeviceType: driver.Microphone,
Priority: driver.PriorityNormal,
},
); err != nil {
return nil, err
}
if err := driver.GetManager().Register(
vncdriver.NewVnc(o.VNCAddress),
driver.Info{
Label: "vnc",
DeviceType: driver.Camera,
Priority: driver.PriorityNormal,
},
); err != nil {
return nil, err
}
return server, nil
}
func (s *Server) Run() error {
logrus.Debug("qemu server running")
defer logrus.Debug("qemu server exit")
defer s.qemu.Close()
go s.startCapture()
logrus.Debug("qemu capture start")
for ev := range s.QmpConnector.RX {
if ev.Type == qemuconnection.QueryStatusEvent {
status, err := qemu.Status()
status, err := s.qemu.Status()
if err != nil {
logrus.Error("get qemu status error: ", err)
continue
@@ -77,43 +105,17 @@ func (s *Server) Run() error {
continue
}
for _, cmd := range ev.ToQemuCommand() {
_, err := qemu.Run(cmd)
_, err := s.qemu.Run(cmd)
if err != nil {
logrus.Error("run command error: ", err)
}
}
}
return nil
}
func (s *Server) startCapture(qemu *qemu.Domain) {
if err := s.options.MakeFIFO(); err != nil {
logrus.Fatal("failed to make pipe file: ", err)
}
if err := driver.GetManager().Register(
audiodriver.New(s.options.AudioPipe),
driver.Info{
Label: "audioFifo",
DeviceType: driver.Microphone,
Priority: driver.PriorityNormal,
},
); err != nil {
logrus.Fatal("audio initialize failed: ", err)
}
if err := driver.GetManager().Register(
vncdriver.NewVnc(s.options.VNCAddress),
driver.Info{
Label: "vnc",
DeviceType: driver.Camera,
Priority: driver.PriorityNormal,
},
); err != nil {
logrus.Fatal("video initialize failed: ", err)
}
if _, err := qemu.Run(qmp.Command{
func (s *Server) startCapture() {
if _, err := s.qemu.Run(qmp.Command{
Execute: "human-monitor-command",
Args: map[string]string{
"command-line": fmt.Sprintf(
@@ -128,13 +130,17 @@ func (s *Server) startCapture(qemu *qemu.Domain) {
logrus.Debug("audio capture set")
}
func Setup(o *Options) {
DefaultServer = NewServer(o)
func Setup(o *Options) error {
DefaultServer, err := NewServer(o)
if err != nil {
return err
}
go func() {
if err := DefaultServer.Run(); err != nil {
logrus.Fatal("cannot run qemuserver with error: ", err)
}
}()
return nil
}
func SendEvent(b []byte) error {