Fix transmission of async rc commands

This commit is contained in:
Kovid Goyal
2022-08-25 18:16:03 +05:30
parent ff2ff9c04f
commit 03705cbec0
7 changed files with 25 additions and 5 deletions

View File

@@ -191,12 +191,13 @@ func single_rc_sender(rc *utils.RemoteControlCmd, serializer serializer_func) ([
func get_response(do_io func(io_data *rc_io_data) ([]byte, error), io_data *rc_io_data) (ans *Response, err error) {
serialized_response, err := do_io(io_data)
if err != nil {
if err == os.ErrDeadlineExceeded {
if errors.Is(err, os.ErrDeadlineExceeded) {
io_data.rc.Payload = nil
io_data.rc.CancelAsync = true
io_data.rc.NoResponse = true
io_data.next_block = single_rc_sender
_, err = do_io(io_data)
io_data.rc.ResetSingleSent()
do_io(io_data)
err = fmt.Errorf("Timed out waiting for a response from kitty")
}
return
}

View File

@@ -38,6 +38,13 @@ func create_rc_CMD_NAME(args []string) (*utils.RemoteControlCmd, error) {
Version: ProtocolVersion,
NoResponse: NO_RESPONSE_BASE,
}
if IS_ASYNC {
async_id, err := utils.HumanUUID4()
if err != nil {
return nil, err
}
rc.Async = async_id
}
return &rc, nil
}

View File

@@ -86,6 +86,9 @@ func (self *ShortUUID) Uuid4() (string, error) {
var HumanUUID *ShortUUID
func init() {
HumanUUID = CreateShortUUID(HUMAN_ALPHABET)
func HumanUUID4() (string, error) {
if HumanUUID == nil {
HumanUUID = CreateShortUUID(HUMAN_ALPHABET)
}
return HumanUUID.Uuid4()
}

View File

@@ -9,6 +9,7 @@ type RemoteControlCmd struct {
Payload *interface{} `json:"payload,omitempty"`
Timestamp int64 `json:"timestamp,omitempty"`
Password string `json:"password,omitempty"`
Async string `json:"async,omitempty"`
CancelAsync bool `json:"cancel_async,omitempty"`
single_sent bool
@@ -16,6 +17,7 @@ type RemoteControlCmd struct {
func (self *RemoteControlCmd) SingleSent() bool { return self.single_sent }
func (self *RemoteControlCmd) SetSingleSent() { self.single_sent = true }
func (self *RemoteControlCmd) ResetSingleSent() { self.single_sent = false }
type EncryptedRemoteControlCmd struct {
Version [3]int `json:"version"`