50 lines
708 B
Go
50 lines
708 B
Go
package conn
|
|
|
|
import (
|
|
"bufio"
|
|
"fmt"
|
|
"net"
|
|
)
|
|
|
|
const (
|
|
Port = ":3030"
|
|
Type = "tcp4"
|
|
)
|
|
|
|
func StartSimple(handler func(conn net.Conn)) error {
|
|
l, err := net.Listen(Type, Port)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer l.Close()
|
|
|
|
fmt.Println(fmt.Sprintf("Listening on port %s", Port))
|
|
|
|
for {
|
|
c, err := l.Accept()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
go handler(c)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
func ReadAndRespond(c net.Conn, process func([]byte) []byte) error {
|
|
defer c.Close()
|
|
sc := bufio.NewScanner(c)
|
|
for sc.Scan() {
|
|
response := process(sc.Bytes())
|
|
_, err := c.Write(response)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
if err := sc.Err(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|