input_windows.go 647 B

123456789101112131415161718192021222324252627282930313233343536
  1. package door
  2. import (
  3. "log"
  4. "syscall"
  5. )
  6. func Reader(handle syscall.Handle, readerChannel *chan byte) {
  7. defer func() {
  8. if err := recover(); err != nil {
  9. log.Printf("Reader: %#v\n", err)
  10. }
  11. }()
  12. buffer := make([]byte, 1)
  13. WSA_Buffer := syscall.WSABuf{Len: 1, Buf: &buffer[0]}
  14. read := uint32(0)
  15. flags := uint32(0)
  16. for {
  17. err := syscall.WSARecv(handle, &WSA_Buffer, 1, &read, &flags, nil, nil)
  18. if err != nil {
  19. log.Printf("Reader ERR: %#v\n", err)
  20. close(*readerChannel)
  21. break
  22. }
  23. if read == 1 {
  24. *readerChannel <- buffer[0]
  25. } else {
  26. log.Printf("READ FAILED %d\n", read)
  27. close(*readerChannel)
  28. break
  29. }
  30. }
  31. }