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

Function handleTrace

core/ipc_handler.go:472–507  ·  view source on GitHub ↗
(n *Nylon, rw *bufio.ReadWriter)

Source from the content-addressed store, hash-verified

470}
471
472func handleTrace(n *Nylon, rw *bufio.ReadWriter) error {
473 if !n.DBG_trace_tc {
474 if err := writeResponse(rw, errResponse("tracing not enabled; restart with --dbg-trace-tc")); err != nil {
475 return err
476 }
477 return device.ErrIPCStatusHandled
478 }
479 // Send initial OK
480 if err := writeResponse(rw, &protocol.IpcResponse{Ok: true}); err != nil {
481 return err
482 }
483 ctx, cancel := context.WithCancel(context.Background())
484 go func() {
485 _, _ = rw.ReadByte() // wait for EOF / disconnect
486 cancel()
487 }()
488 ch := make(chan interface{})
489 n.Trace.Register(ch)
490 defer n.Trace.Unregister(ch)
491 for {
492 select {
493 case <-ctx.Done():
494 return device.ErrIPCStatusHandled
495 case msg := <-ch:
496 if str, ok := msg.(string); ok {
497 resp := &protocol.IpcResponse{
498 Ok: true,
499 Response: &protocol.IpcResponse_Trace{Trace: &protocol.TraceEvent{Line: str}},
500 }
501 if err := writeResponse(rw, resp); err != nil {
502 return device.ErrIPCStatusHandled
503 }
504 }
505 }
506 }
507}

Callers 1

HandleNylonIPCFunction · 0.85

Calls 2

writeResponseFunction · 0.85
errResponseFunction · 0.85

Tested by

no test coverage detected