update
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bufio"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
@@ -130,6 +132,7 @@ func WaitForFrame(conn net.Conn, resultChan chan<- FrameWithPayload) error {
|
|||||||
payload := make([]byte, frame.Length)
|
payload := make([]byte, frame.Length)
|
||||||
_, err = conn.Read(payload)
|
_, err = conn.Read(payload)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
conn.Close()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
resultChan <- FrameWithPayload{
|
resultChan <- FrameWithPayload{
|
||||||
@@ -169,21 +172,28 @@ func (c *Connection) Listen() (*GenericListener, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
MaxCallDuration = 900 * time.Millisecond
|
MaxCallDuration = 300 * time.Millisecond
|
||||||
ListenerKeepalive = 5 * time.Second
|
ListenerKeepalive = 5 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
func (l *GenericListener) HandleConnection(conn net.Conn) {
|
func (l *GenericListener) HandleConnection(conn net.Conn) {
|
||||||
for !l.StopListener {
|
var err error
|
||||||
ch := make(chan FrameWithPayload, 1)
|
var frame Frame
|
||||||
//conn.SetReadDeadline(time.Now().Add(MaxCallDuration))
|
b := bufio.NewReader(conn)
|
||||||
go WaitForFrame(conn, ch)
|
for err != io.EOF {
|
||||||
frame := <-ch
|
|
||||||
err := l.HandleFrame(conn, &frame)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Error in handler: %v\n", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
err = binary.Read(b, binary.LittleEndian, &frame)
|
||||||
|
|
||||||
|
if err == nil && frame.IsValid() {
|
||||||
|
payload := make([]byte, frame.Length)
|
||||||
|
_, err = b.Read(payload)
|
||||||
|
if err == nil {
|
||||||
|
err = l.HandleFrame(conn, &FrameWithPayload{
|
||||||
|
Frame: frame,
|
||||||
|
Payload: payload,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user