Пример #1
0
func serve(idx *index.Index) error {
	fid, err := plumb.Open("editclass", plan9.OREAD)
	if err != nil {
		return err
	}
	defer fid.Close()
	r := bufio.NewReader(fid)
	w, err := plumb.Open("send", plan9.OWRITE)
	if err != nil {
		return err
	}
	defer w.Close()
	for {
		m := plumb.Message{}
		err := m.Recv(r)
		if err != nil {
			return err
		}
		log.Printf("Received from plumber: %s\n", m)
		name := string(m.Data)
		var get *index.GetResult
		for _, c := range candidatesOf(name) {
			if get = idx.Get(c); get != nil {
				break
			}
		}
		if get == nil {
			log.Printf("Found no results for: %s\n", name)
			continue
		}
		if get.Path != "" {
			if err := plumbFile(&m, w, name, get.Path); err != nil {
				log.Printf("%s: %s\n", get.Path, err)
			}
		} else if get.Children != nil {
			if err := plumbDir(idx, get.Children, w); err != nil {
				log.Printf("error opening dir: %s\n", err)
			}
		} else {
			log.Printf("Result was empty: %s\n", name)
		}
	}
	return nil
}