This commit is contained in:
Kovid Goyal
2024-05-17 22:45:52 +05:30
parent 9e3b49ab84
commit a9924d2ab7

View File

@@ -52,23 +52,25 @@ type response_reader struct {
func (r *response_reader) read_response_from_conn(conn *net.Conn, timeout time.Duration) (serialized_response []byte, err error) { func (r *response_reader) read_response_from_conn(conn *net.Conn, timeout time.Duration) (serialized_response []byte, err error) {
keep_going := true keep_going := true
r.parser.HandleDCS = func(data []byte) error { if len(r.pending_responses) == 0 {
if bytes.HasPrefix(data, []byte("@kitty-cmd")) { r.parser.HandleDCS = func(data []byte) error {
r.pending_responses = append(r.pending_responses, append([]byte{}, data[len("@kitty-cmd"):]...)) if bytes.HasPrefix(data, []byte("@kitty-cmd")) {
keep_going = false r.pending_responses = append(r.pending_responses, append([]byte{}, data[len("@kitty-cmd"):]...))
keep_going = false
}
return nil
} }
return nil buf := r.storage[:]
} for keep_going {
buf := r.storage[:] var n int
for keep_going { (*conn).SetDeadline(time.Now().Add(timeout))
var n int n, err = (*conn).Read(buf)
(*conn).SetDeadline(time.Now().Add(timeout)) if err != nil {
n, err = (*conn).Read(buf) keep_going = false
if err != nil { break
keep_going = false }
break r.parser.Parse(buf[:n])
} }
r.parser.Parse(buf[:n])
} }
if len(r.pending_responses) > 0 { if len(r.pending_responses) > 0 {
serialized_response = r.pending_responses[0] serialized_response = r.pending_responses[0]