fix iOS conn close

This commit is contained in:
buyuxiang
2023-07-21 10:30:36 +08:00
parent 9482887ab3
commit 00c79a13df
2 changed files with 13 additions and 6 deletions
+8 -5
View File
@@ -147,7 +147,7 @@ func (wd *Driver) uia2HttpDELETE(pathElem ...string) (rawResp rawResponse, err e
return wd.uia2HttpRequest(http.MethodDelete, wd.concatURL(nil, pathElem...), nil) return wd.uia2HttpRequest(http.MethodDelete, wd.concatURL(nil, pathElem...), nil)
} }
func (wd *Driver) resetWDASession() (string, error) { func (wd *Driver) resetWDASession() error {
capabilities := NewCapabilities() capabilities := NewCapabilities()
capabilities.WithDefaultAlertAction(AlertActionAccept) capabilities.WithDefaultAlertAction(AlertActionAccept)
@@ -158,13 +158,14 @@ func (wd *Driver) resetWDASession() (string, error) {
var rawResp rawResponse var rawResp rawResponse
var err error var err error
if rawResp, err = wd.httpPOST(data, "/session"); err != nil { if rawResp, err = wd.httpPOST(data, "/session"); err != nil {
return "", err return err
} }
var sessionInfo SessionInfo var sessionInfo SessionInfo
if sessionInfo, err = rawResp.valueConvertToSessionInfo(); err != nil { if sessionInfo, err = rawResp.valueConvertToSessionInfo(); err != nil {
return "", err return err
} }
return sessionInfo.SessionId, nil wd.sessionId = sessionInfo.SessionId
return nil
} }
func (wd *Driver) wdaHttpRequest(method string, rawURL string, rawBody []byte, disableRetry ...bool) (rawResp rawResponse, err error) { func (wd *Driver) wdaHttpRequest(method string, rawURL string, rawBody []byte, disableRetry ...bool) (rawResp rawResponse, err error) {
@@ -174,7 +175,9 @@ func (wd *Driver) wdaHttpRequest(method string, rawURL string, rawBody []byte, d
if err == nil || disableRetryBool { if err == nil || disableRetryBool {
return return
} }
if _, err = wd.resetWDASession(); err != nil { // wait for WDA to resume automatically
time.Sleep(20 * time.Second)
if err = wd.resetWDASession(); err != nil {
log.Err(err).Msgf("failed to reset wda session, retry count: %v", retryCount) log.Err(err).Msgf("failed to reset wda session, retry count: %v", retryCount)
continue continue
} }
+5 -1
View File
@@ -474,7 +474,7 @@ func (dev *IOSDevice) forward(localPort, remotePort int) error {
rInnerConn, err := device.NewConnect(remotePort) rInnerConn, err := device.NewConnect(remotePort)
if err != nil { if err != nil {
log.Error().Err(err).Msg("connect to ios device failed") log.Error().Err(err).Msg("connect to ios device failed")
os.Exit(code.GetErrorCode(code.IOSDeviceConnectionError)) continue
} }
rConn := rInnerConn.RawConn() rConn := rInnerConn.RawConn()
@@ -484,11 +484,15 @@ func (dev *IOSDevice) forward(localPort, remotePort int) error {
go func(lConn, rConn net.Conn) { go func(lConn, rConn net.Conn) {
if _, err := io.Copy(lConn, rConn); err != nil { if _, err := io.Copy(lConn, rConn); err != nil {
log.Error().Err(err).Msg("copy local -> remote") log.Error().Err(err).Msg("copy local -> remote")
rConn.Close()
accept.Close()
} }
}(lConn, rConn) }(lConn, rConn)
go func(lConn, rConn net.Conn) { go func(lConn, rConn net.Conn) {
if _, err := io.Copy(rConn, lConn); err != nil { if _, err := io.Copy(rConn, lConn); err != nil {
log.Error().Err(err).Msg("copy local <- remote") log.Error().Err(err).Msg("copy local <- remote")
rConn.Close()
accept.Close()
} }
}(lConn, rConn) }(lConn, rConn)
}(accept) }(accept)