func writeReturn(conn n.Conn, msg interface{}) ([]interface{}, error) { if err := conn.Write(msg); err != nil { return nil, err } reply, err := conn.Read() if err != nil { return nil, err } retrn, ok := reply.(*returnMsg) if !ok { return nil, NewError("foreign return type") } if retrn.Err != nil { return nil, err } return retrn.Out, nil }
func (r *Runtime) readGotPtrPtr(ptrPtr []*ptrPtrMsg, conn n.Conn) error { p := make(map[circuit.HandleID]struct{}) for _, pp := range ptrPtr { p[pp.ID] = struct{}{} } for len(p) > 0 { m_, err := conn.Read() if err != nil { return err } m, ok := m_.(*gotPtrMsg) if !ok { return NewError("gotPtrMsg expected") } _, present := p[m.ID] if !present { return NewError("ack'ing unsent ptrPtrMsg") } delete(p, m.ID) } return nil }