keyboard push mvp
parent
b65d2134f5
commit
4c233cf794
2
go.mod
2
go.mod
|
|
@ -1,3 +1,5 @@
|
|||
module mayhem-party
|
||||
|
||||
go 1.19
|
||||
|
||||
require github.com/micmonay/keybd_event v1.1.1 // indirect
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
github.com/micmonay/keybd_event v1.1.1 h1:rv7omwXWYL9Lgf3PUq6uBgJI2k1yGkL/GD6dxc6nmSs=
|
||||
github.com/micmonay/keybd_event v1.1.1/go.mod h1:CGMWMDNgsfPljzrAWoybUOSKafQPZpv+rLigt2LzNGI=
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
package output
|
||||
|
||||
type Device interface{}
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
package output
|
||||
|
||||
import (
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/micmonay/keybd_event"
|
||||
)
|
||||
|
||||
type Keyboard struct {
|
||||
created time.Time
|
||||
kb *keybd_event.KeyBonding
|
||||
}
|
||||
|
||||
func NewKeyboard() Keyboard {
|
||||
kb, err := keybd_event.NewKeyBonding()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return Keyboard{
|
||||
kb: &kb,
|
||||
created: time.Now(),
|
||||
}
|
||||
}
|
||||
|
||||
func (kb Keyboard) wait() {
|
||||
if delta := time.Since(kb.created.Add(time.Second * 2)); delta < 0 {
|
||||
time.Sleep(-1 * delta)
|
||||
}
|
||||
}
|
||||
|
||||
func (kb Keyboard) Press(keys ...int) {
|
||||
kb.wait()
|
||||
|
||||
kb.Release()
|
||||
kb.kb.SetKeys(keys...)
|
||||
if err := kb.kb.Press(); err != nil {
|
||||
log.Println("failed to press keys:", err)
|
||||
}
|
||||
}
|
||||
|
||||
func (kb Keyboard) Release() {
|
||||
kb.wait()
|
||||
|
||||
if err := kb.kb.Release(); err != nil {
|
||||
log.Println("failed to release keys:", err)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
//go:build integration
|
||||
|
||||
package output_test
|
||||
|
||||
import (
|
||||
"mayhem-party/src/device/output"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestKeyboardIntegration(t *testing.T) {
|
||||
kb := output.NewKeyboard()
|
||||
defer kb.Release()
|
||||
|
||||
t.Log("pressing 'a' for 5 seconds")
|
||||
kb.Press(output.A)
|
||||
for i := 0; i < 5; i++ {
|
||||
t.Logf("\t%d...", 5-i)
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
t.Logf("releasing")
|
||||
kb.Release()
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package output
|
||||
|
||||
import "github.com/micmonay/keybd_event"
|
||||
|
||||
const (
|
||||
A = keybd_event.VK_A
|
||||
B = keybd_event.VK_B
|
||||
C = keybd_event.VK_C
|
||||
D = keybd_event.VK_D
|
||||
E = keybd_event.VK_E
|
||||
F = keybd_event.VK_F
|
||||
G = keybd_event.VK_G
|
||||
H = keybd_event.VK_H
|
||||
I = keybd_event.VK_I
|
||||
J = keybd_event.VK_J
|
||||
K = keybd_event.VK_K
|
||||
L = keybd_event.VK_L
|
||||
M = keybd_event.VK_M
|
||||
N = keybd_event.VK_N
|
||||
O = keybd_event.VK_O
|
||||
P = keybd_event.VK_P
|
||||
Q = keybd_event.VK_Q
|
||||
R = keybd_event.VK_R
|
||||
S = keybd_event.VK_S
|
||||
T = keybd_event.VK_T
|
||||
U = keybd_event.VK_U
|
||||
V = keybd_event.VK_V
|
||||
W = keybd_event.VK_W
|
||||
X = keybd_event.VK_X
|
||||
Y = keybd_event.VK_Y
|
||||
Z = keybd_event.VK_Z
|
||||
)
|
||||
Loading…
Reference in New Issue