input_linux.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package door
  2. import (
  3. "log"
  4. "syscall"
  5. )
  6. func Reader(handle int) {
  7. // I don't need the select anymore. Let the read block.
  8. buffer := make([]byte, 1)
  9. for {
  10. read, err := syscall.Read(handle, buffer)
  11. if err != nil {
  12. log.Printf("Reader ERR: %#v\n", err)
  13. close(readerChannel)
  14. break
  15. }
  16. if read == 1 {
  17. readerChannel <- buffer[0]
  18. } else {
  19. log.Printf("READ FAILED %d\n", read)
  20. close(readerChannel)
  21. break
  22. }
  23. }
  24. }
  25. /*
  26. // Low level read key function.
  27. // This gets the raw keys from the client, it doesn't handle extended keys,
  28. // functions, arrows.
  29. // Return key, or -1 (Timeout/No key available), -2 hangup
  30. func (d *Door) getch() int {
  31. var fdsetRead syscall.FdSet
  32. clearAll(&fdsetRead)
  33. set(&fdsetRead, d.READFD)
  34. // 100 Usec seems like a good value, works with QModem in dosbox.
  35. timeout := syscall.Timeval{Sec: 0, Usec: 100}
  36. v, err := syscall.Select(d.READFD+1, &fdsetRead, nil, nil, &timeout)
  37. if v == -1 {
  38. // hangup
  39. return -2
  40. }
  41. if v == 0 {
  42. // timeout
  43. return -1
  44. }
  45. buffer := make([]byte, 1)
  46. r, err := syscall.Read(d.READFD, buffer)
  47. if r != 1 {
  48. // I'm getting write error here... (when disconnected)
  49. log.Printf("Read said ready, but didn't read a character %d %v.\n", r, err)
  50. // hangup
  51. d.Disconnected = true
  52. return -2
  53. }
  54. return int(buffer[0])
  55. }
  56. */