| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 
 | package main
 import (
 "flag"
 "fmt"
 "log"
 "net/http"
 
 "github.com/go-vgo/robotgo"
 "github.com/gorilla/websocket"
 hook "github.com/robotn/gohook"
 )
 
 var addr = flag.String("addr", "localhost:7788", "http service address")
 var MESSAGE = make(chan string, 1)
 var HUB = map[string]*websocket.Conn{}
 
 const (
 PLAY     = "play"
 FORWARD  = "forward"
 BACKWARD = "backward"
 )
 
 var upgrader = websocket.Upgrader{
 CheckOrigin: func(r *http.Request) bool {
 return true
 },
 }
 
 func control(w http.ResponseWriter, r *http.Request) {
 c, _ := upgrader.Upgrade(w, r, nil)
 key := c.RemoteAddr().String()
 HUB[key] = c
 defer func() {
 delete(HUB, key)
 c.Close()
 }()
 for {
 _, _, err := c.ReadMessage()
 if err != nil {
 break
 }
 }
 }
 
 func sendMessage() {
 for i := range MESSAGE {
 for _, v := range HUB {
 v.WriteMessage(websocket.TextMessage, []byte(i))
 }
 }
 }
 
 func hotkey() {
 go func() {
 robotgo.EventHook(hook.KeyDown, []string{"alt", "left"}, func(e hook.Event) {
 fmt.Println("left")
 if len(MESSAGE) == 0 {
 MESSAGE <- BACKWARD
 }
 })
 
 robotgo.EventHook(hook.KeyDown, []string{"alt", "right"}, func(e hook.Event) {
 fmt.Println("right")
 if len(MESSAGE) == 0 {
 MESSAGE <- FORWARD
 }
 })
 
 robotgo.EventHook(hook.KeyDown, []string{"alt", "up"}, func(e hook.Event) {
 fmt.Println("up")
 if len(MESSAGE) == 0 {
 MESSAGE <- PLAY
 }
 })
 
 s := robotgo.EventStart()
 <-robotgo.EventProcess(s)
 }()
 }
 
 func main() {
 go sendMessage()
 hotkey()
 flag.Parse()
 log.SetFlags(0)
 http.HandleFunc("/control", control)
 log.Fatal(http.ListenAndServe(*addr, nil))
 }
 
 |