package door

import (
	"log"
	"syscall"
)

func Reader(handle int, readerChannel *chan byte) {
	// I don't need the select anymore.  Let the read block.
	defer func() {
		if err := recover(); err != nil {
			log.Printf("Reader: %#v\n", err)
		}
	}()

	buffer := make([]byte, 1)
	for {
		read, err := syscall.Read(handle, buffer)
		if err != nil {
			log.Printf("Reader ERR: %#v\n", err)
			close(*readerChannel)
			break
		}
		if read == 1 {
			*readerChannel <- buffer[0]
		} else {
			log.Printf("READ FAILED %d\n", read)
			close(*readerChannel)
			break
		}
	}
}

func CloseReader(handle int) {
	syscall.Close(handle)
}