123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package door
- import (
- "log"
- "syscall"
- )
- func Reader(handle int) {
- // I don't need the select anymore. Let the read block.
- 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
- }
- }
- }
- /*
- // Low level read key function.
- // This gets the raw keys from the client, it doesn't handle extended keys,
- // functions, arrows.
- // Return key, or -1 (Timeout/No key available), -2 hangup
- func (d *Door) getch() int {
- var fdsetRead syscall.FdSet
- clearAll(&fdsetRead)
- set(&fdsetRead, d.READFD)
- // 100 Usec seems like a good value, works with QModem in dosbox.
- timeout := syscall.Timeval{Sec: 0, Usec: 100}
- v, err := syscall.Select(d.READFD+1, &fdsetRead, nil, nil, &timeout)
- if v == -1 {
- // hangup
- return -2
- }
- if v == 0 {
- // timeout
- return -1
- }
- buffer := make([]byte, 1)
- r, err := syscall.Read(d.READFD, buffer)
- if r != 1 {
- // I'm getting write error here... (when disconnected)
- log.Printf("Read said ready, but didn't read a character %d %v.\n", r, err)
- // hangup
- d.Disconnected = true
- return -2
- }
- return int(buffer[0])
- }
- */
|