xP: use buffered reads

This commit is contained in:
Přemysl Eric Janouch 2022-09-14 07:10:49 +02:00
parent c1d2e38840
commit 92f2f6895b
Signed by: p
GPG Key ID: A0420B94F92B9493

View File

@ -4,6 +4,7 @@
package main
import (
"bufio"
"context"
"encoding/binary"
"encoding/json"
@ -27,14 +28,14 @@ var (
// -----------------------------------------------------------------------------
func relayReadJSON(conn net.Conn) []byte {
func relayReadJSON(r io.Reader) []byte {
var length uint32
if err := binary.Read(conn, binary.BigEndian, &length); err != nil {
if err := binary.Read(r, binary.BigEndian, &length); err != nil {
log.Println("Event receive failed: " + err.Error())
return nil
}
b := make([]byte, length)
if _, err := io.ReadFull(conn, b); err != nil {
if _, err := io.ReadFull(r, b); err != nil {
log.Println("Event receive failed: " + err.Error())
return nil
}
@ -60,10 +61,11 @@ func relayReadJSON(conn net.Conn) []byte {
func relayMakeReceiver(ctx context.Context, conn net.Conn) <-chan []byte {
p := make(chan []byte, 1)
r := bufio.NewReader(conn)
go func() {
defer close(p)
for {
j := relayReadJSON(conn)
j := relayReadJSON(r)
if j == nil {
return
}