udp input except no clean shutdown
parent
126f5ab60a
commit
287b9c7b4e
|
|
@ -3,6 +3,7 @@ package input
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"os"
|
"os"
|
||||||
|
"strconv"
|
||||||
"syscall"
|
"syscall"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -47,6 +48,12 @@ func newSourceFunc() func() Input {
|
||||||
return singletonKeyboard
|
return singletonKeyboard
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if port, _ := strconv.Atoi(os.Getenv("INPUT_UDP")); port != 0 {
|
||||||
|
singletonUDP := NewUDP(port)
|
||||||
|
return func() Input {
|
||||||
|
return singletonUDP
|
||||||
|
}
|
||||||
|
}
|
||||||
return func() Input {
|
return func() Input {
|
||||||
generator := randomCharFromRange('a', 'g')
|
generator := randomCharFromRange('a', 'g')
|
||||||
if p, ok := os.LookupEnv("INPUT_RANDOM_WEIGHT_FILE"); ok && len(p) > 0 {
|
if p, ok := os.LookupEnv("INPUT_RANDOM_WEIGHT_FILE"); ok && len(p) > 0 {
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@ func TestInput(t *testing.T) {
|
||||||
var _ Input = &Buffered{}
|
var _ Input = &Buffered{}
|
||||||
var _ Input = Remap{}
|
var _ Input = Remap{}
|
||||||
var _ Input = &Refresh{}
|
var _ Input = &Refresh{}
|
||||||
|
var _ Input = UDP{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestNewNew(t *testing.T) {
|
func TestNewNew(t *testing.T) {
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
package input
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
type UDP struct {
|
||||||
|
conn net.PacketConn
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewUDP(port int) UDP {
|
||||||
|
conn, err := net.ListenPacket("udp", ":"+strconv.Itoa(port))
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return UDP{
|
||||||
|
conn: conn,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (udp UDP) Read() []Button {
|
||||||
|
panic("NEEDS TO BE IN BG THREAD SO WE CAN SHUT DOWN WITHOUT BLOCKING ON READ OR AT LEAST BE RESPONSIVE")
|
||||||
|
buff := make([]byte, 1024)
|
||||||
|
n, _, err := udp.conn.ReadFrom(buff)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
buttons := make([]Button, 0, n)
|
||||||
|
down := true
|
||||||
|
for i := range buff[:n] {
|
||||||
|
if buff[i] == '!' {
|
||||||
|
down = false
|
||||||
|
} else {
|
||||||
|
if buff[i] != '\n' {
|
||||||
|
buttons = append(buttons, Button{Char: buff[i], Down: down})
|
||||||
|
}
|
||||||
|
down = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return buttons
|
||||||
|
}
|
||||||
|
|
||||||
|
func (udp UDP) Close() {
|
||||||
|
udp.conn.Close()
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue