mirror of
https://github.com/httprunner/httprunner.git
synced 2026-09-05 23:51:25 +08:00
refactor: move gidevice to hrp pkg
This commit is contained in:
@@ -0,0 +1,119 @@
|
||||
package gidevice
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/httprunner/httprunner/v4/hrp/pkg/gidevice/pkg/libimobiledevice"
|
||||
)
|
||||
|
||||
var _ Screenshot = (*screenshot)(nil)
|
||||
|
||||
func newScreenshot(client *libimobiledevice.ScreenshotClient) *screenshot {
|
||||
return &screenshot{
|
||||
client: client,
|
||||
exchanged: false,
|
||||
}
|
||||
}
|
||||
|
||||
type screenshot struct {
|
||||
client *libimobiledevice.ScreenshotClient
|
||||
exchanged bool
|
||||
}
|
||||
|
||||
func (s *screenshot) Take() (raw *bytes.Buffer, err error) {
|
||||
if err = s.exchange(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// link service
|
||||
req := []interface{}{
|
||||
"DLMessageProcessMessage",
|
||||
map[string]interface{}{
|
||||
"MessageType": "ScreenShotRequest",
|
||||
},
|
||||
}
|
||||
|
||||
var pkt libimobiledevice.Packet
|
||||
if pkt, err = s.client.NewBinaryPacket(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = s.client.SendPacket(pkt); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var respPkt libimobiledevice.Packet
|
||||
if respPkt, err = s.client.ReceivePacket(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var resp []interface{}
|
||||
if err = respPkt.Unmarshal(&resp); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if resp[0].(string) != "DLMessageProcessMessage" {
|
||||
return nil, fmt.Errorf("message device not ready %s %s", resp[3], resp[4])
|
||||
}
|
||||
|
||||
raw = new(bytes.Buffer)
|
||||
|
||||
screen := resp[1].(map[string]interface{})
|
||||
var data []byte
|
||||
ok := false
|
||||
if data, ok = screen["ScreenShotData"].([]byte); !ok {
|
||||
return nil, errors.New("`ScreenShotData` not ready")
|
||||
}
|
||||
if _, err = raw.Write(data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func (s *screenshot) exchange() (err error) {
|
||||
if s.exchanged {
|
||||
return
|
||||
}
|
||||
|
||||
var respPkt libimobiledevice.Packet
|
||||
if respPkt, err = s.client.ReceivePacket(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var resp []interface{}
|
||||
if err = respPkt.Unmarshal(&resp); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
req := []interface{}{
|
||||
"DLMessageVersionExchange",
|
||||
"DLVersionsOk",
|
||||
resp[1],
|
||||
}
|
||||
|
||||
var pkt libimobiledevice.Packet
|
||||
if pkt, err = s.client.NewBinaryPacket(req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = s.client.SendPacket(pkt); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if respPkt, err = s.client.ReceivePacket(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err = respPkt.Unmarshal(&resp); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if resp[3].(string) != "DLMessageDeviceReady" {
|
||||
return fmt.Errorf("message device not ready %s", resp[3])
|
||||
}
|
||||
|
||||
s.exchanged = true
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user