MCPcopy Create free account
hub / github.com/encodeous/nylon / SendIPCStream

Function SendIPCStream

core/ipc_client.go:50–90  ·  view source on GitHub ↗
(itf string, req *protocol.IpcRequest, handler func(*protocol.IpcResponse) error)

Source from the content-addressed store, hash-verified

48}
49
50func SendIPCStream(itf string, req *protocol.IpcRequest, handler func(*protocol.IpcResponse) error) error {
51 conn, err := ipc.UAPIDial(itf)
52 if err != nil {
53 return fmt.Errorf("connect to %s: %w", itf, err)
54 }
55 defer conn.Close()
56
57 rw := bufio.NewReadWriter(bufio.NewReader(conn), bufio.NewWriter(conn))
58
59 if _, err := rw.WriteString("get=nylon\n"); err != nil {
60 return err
61 }
62
63 data, err := pjMarshal.Marshal(req)
64 if err != nil {
65 return err
66 }
67 if _, err := rw.Write(data); err != nil {
68 return err
69 }
70 if _, err := rw.WriteString("\n"); err != nil {
71 return err
72 }
73 if err := rw.Flush(); err != nil {
74 return err
75 }
76
77 for {
78 line, err := rw.ReadBytes('\n')
79 if err != nil {
80 return nil // stream ended
81 }
82 resp := &protocol.IpcResponse{}
83 if err := pjUnmarshal.Unmarshal(line, resp); err != nil {
84 return fmt.Errorf("unmarshal stream response: %w", err)
85 }
86 if err := handler(resp); err != nil {
87 return err
88 }
89 }
90}

Callers 1

trace.goFile · 0.92

Calls 4

UAPIDialFunction · 0.92
FlushMethod · 0.80
CloseMethod · 0.65
WriteMethod · 0.65

Tested by

no test coverage detected