handler.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package remdeshid
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "net/http"
  7. "github.com/gorilla/websocket"
  8. )
  9. // upgrader is used to upgrade HTTP connections to WebSocket connections
  10. var upgrader = websocket.Upgrader{
  11. ReadBufferSize: 1024,
  12. WriteBufferSize: 1024,
  13. CheckOrigin: func(r *http.Request) bool {
  14. return true
  15. },
  16. }
  17. // HIDWebSocketHandler handles incoming WebSocket connections for HID commands
  18. func (c *Controller) HIDWebSocketHandler(w http.ResponseWriter, r *http.Request) {
  19. conn, err := upgrader.Upgrade(w, r, nil)
  20. if err != nil {
  21. log.Println("Failed to upgrade to websocket:", err)
  22. return
  23. }
  24. defer conn.Close()
  25. for {
  26. _, message, err := conn.ReadMessage()
  27. if err != nil {
  28. log.Println("Error reading message:", err)
  29. break
  30. }
  31. log.Printf("Received: %s", message)
  32. //Try parsing the message as a HIDCommand
  33. var hidCmd HIDCommand
  34. if err := json.Unmarshal(message, &hidCmd); err != nil {
  35. log.Println("Error parsing message:", err)
  36. continue
  37. }
  38. bytes, err := c.ConstructAndSendCmd(&hidCmd)
  39. if err != nil {
  40. errmsg := map[string]string{"error": err.Error()}
  41. if err := conn.WriteJSON(errmsg); err != nil {
  42. log.Println("Error writing message:", err)
  43. continue
  44. }
  45. log.Println("Error sending command:", err)
  46. continue
  47. }
  48. prettyBytes := ""
  49. for _, b := range bytes {
  50. prettyBytes += fmt.Sprintf("0x%02X ", b)
  51. }
  52. if err := conn.WriteMessage(websocket.TextMessage, []byte(prettyBytes)); err != nil {
  53. log.Println("Error writing message:", err)
  54. continue
  55. }
  56. }
  57. }