roku1.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package main
  2. import (
  3. "errors"
  4. "log"
  5. "net"
  6. "os"
  7. "time"
  8. )
  9. func PostFind() string {
  10. file, err := os.ReadFile("finder.txt")
  11. if err != nil {
  12. log.Print(err)
  13. }
  14. addr, err := net.ResolveUDPAddr("udp", "239.255.255.250:1900")
  15. if err != nil {
  16. log.Print(err)
  17. }
  18. laddr, err := net.ResolveUDPAddr("udp", ":0") // "192.168.254.13:9000")
  19. if err != nil {
  20. log.Print(err)
  21. }
  22. // "192.168.254.13:9000")
  23. // conn, err := net.DialUDP("udp", laddr, addr)
  24. /*
  25. ListenUDP -- to SEND? WAT?
  26. https://github.com/golang/go/issues/13391
  27. Ok, maybe you don't want to read it -- the developers are cranky when
  28. asked why Listen would be able to SEND.
  29. */
  30. conn, err := net.ListenUDP("udp", laddr)
  31. if err != nil {
  32. log.Print(err)
  33. }
  34. defer conn.Close()
  35. conn.WriteTo(file, addr)
  36. // conn.Write(file)
  37. log.Println("Posted Request for devices")
  38. // future: Handle multiple devices
  39. conn.SetReadDeadline(time.Now().Add(time.Second * time.Duration(5)))
  40. buffer := make([]byte, 512)
  41. n, fromaddr, err := conn.ReadFrom(buffer) // Read(buffer)
  42. log.Printf("%d, %#v, %#v", n, fromaddr, err)
  43. var output string = string(buffer[0:n])
  44. log.Printf("GOT: [%s]", output)
  45. // log.Printf("Read: %#v\n", buffer)
  46. return output
  47. }
  48. func FileExists(path string) bool {
  49. _, err := os.Stat(path)
  50. return !errors.Is(err, os.ErrNotExist)
  51. }
  52. /*
  53. func main() {
  54. fmt.Println("Start:")
  55. PostFind()
  56. fmt.Println("Done!")
  57. }
  58. */