104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package openatxclientgo
 | |
| 
 | |
| import (
 | |
| 	"errors"
 | |
| 	"fmt"
 | |
| 	"os/exec"
 | |
| 
 | |
| 	adbutilsgo "github.com/fantonglang/adbutils-go"
 | |
| )
 | |
| 
 | |
| type HostOperation struct {
 | |
| 	DeviceId string
 | |
| 	Req      *SharedRequest
 | |
| 	ReqCv    *SharedRequest
 | |
| }
 | |
| 
 | |
| type DeviceOperation struct {
 | |
| 	Req   *SharedRequest
 | |
| 	ReqCv *SharedRequest
 | |
| }
 | |
| 
 | |
| func NewHostOperation(deviceId string) (*HostOperation, error) {
 | |
| 	deviceIds := adbutilsgo.ListDevices()
 | |
| 	if deviceIds == nil {
 | |
| 		return nil, errors.New("no device attached")
 | |
| 	}
 | |
| 	deviceMatch := false
 | |
| 	for _, d := range deviceIds {
 | |
| 		if d == deviceId {
 | |
| 			deviceMatch = true
 | |
| 			break
 | |
| 		}
 | |
| 	}
 | |
| 	if !deviceMatch {
 | |
| 		return nil, fmt.Errorf("no such device: %s", deviceId)
 | |
| 	}
 | |
| 	hostPort, err := adbutilsgo.PortForward(deviceId, "7912", adbutilsgo.PortForwardOptions{}) //adbutilsgo.OpenAtxPortForward(deviceId)
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	hostCvPort, err := adbutilsgo.PortForward(deviceId, "5000", adbutilsgo.PortForwardOptions{})
 | |
| 	if err != nil {
 | |
| 		return nil, err
 | |
| 	}
 | |
| 	return &HostOperation{
 | |
| 		DeviceId: deviceId,
 | |
| 		Req:      NewSharedRequest("http://localhost:" + hostPort),
 | |
| 		ReqCv:    NewSharedRequest("http://localhost:" + hostCvPort),
 | |
| 	}, nil
 | |
| }
 | |
| 
 | |
| func NewDeviceOperation() *DeviceOperation {
 | |
| 	return &DeviceOperation{
 | |
| 		Req:   NewSharedRequest("http://localhost:7912"),
 | |
| 		ReqCv: NewSharedRequest("http://localhost:5000"),
 | |
| 	}
 | |
| }
 | |
| 
 | |
| type IOperation interface {
 | |
| 	Shell(cmd string) (string, error)
 | |
| 	GetHttpRequest() *SharedRequest
 | |
| 	GetCvRequest() *SharedRequest
 | |
| }
 | |
| 
 | |
| func (o *HostOperation) Shell(cmd string) (string, error) {
 | |
| 	return adbutilsgo.Shell(o.DeviceId, cmd)
 | |
| }
 | |
| 
 | |
| func (o *DeviceOperation) Shell(cmd string) (string, error) {
 | |
| 	out, err := exec.Command("/system/bin/sh", "-c", cmd).Output()
 | |
| 	if err != nil {
 | |
| 		return "", errors.New("execute shell command failed")
 | |
| 	}
 | |
| 	return string(out), nil
 | |
| }
 | |
| 
 | |
| func (o *HostOperation) GetHttpRequest() *SharedRequest {
 | |
| 	if o.Req.onError == nil {
 | |
| 		o.Req.onError = func() error {
 | |
| 			_, err := o.Shell("/data/local/tmp/atx-agent server -d --stop")
 | |
| 			return err
 | |
| 		}
 | |
| 	}
 | |
| 	return o.Req
 | |
| }
 | |
| 
 | |
| func (o *DeviceOperation) GetHttpRequest() *SharedRequest {
 | |
| 	if o.Req.onError == nil {
 | |
| 		o.Req.onError = func() error {
 | |
| 			_, err := o.Shell("/data/local/tmp/atx-agent server -d --stop")
 | |
| 			return err
 | |
| 		}
 | |
| 	}
 | |
| 	return o.Req
 | |
| }
 | |
| 
 | |
| func (o *HostOperation) GetCvRequest() *SharedRequest {
 | |
| 	return o.ReqCv
 | |
| }
 | |
| 
 | |
| func (o *DeviceOperation) GetCvRequest() *SharedRequest {
 | |
| 	return o.ReqCv
 | |
| }
 |