41 lines
979 B
Go
41 lines
979 B
Go
package pas
|
|
|
|
import (
|
|
"bufio"
|
|
"log"
|
|
"net"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"git.gay/exhq/pas/src/Constants"
|
|
"git.gay/exhq/pas/src/helper"
|
|
"git.gay/exhq/pas/src/parser"
|
|
)
|
|
|
|
func StartServer(port int, handler func(request Constants.Request, response func(Constants.Response)), errr error) error {
|
|
ln, err := net.Listen("tcp", ":"+strconv.Itoa(port))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for {
|
|
conn, err := ln.Accept()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
go handleConnection(conn, handler)
|
|
}
|
|
}
|
|
|
|
func handleConnection(conn net.Conn, handler func(request Constants.Request, response func(Constants.Response))) {
|
|
defer conn.Close()
|
|
raw, err := helper.ReadUntilNullString(bufio.NewReader(conn))
|
|
if err != nil {
|
|
log.Println(err)
|
|
return
|
|
}
|
|
parsed := parser.ParseIntent(raw)
|
|
request := Constants.Request{Intent: parsed, Body: strings.SplitN(raw, "\n\n", 2)[1]}
|
|
handler(request, func(c Constants.Response) {
|
|
conn.Write(helper.StringToByteWithEnd(helper.IntentGenerator(c)))
|
|
})
|
|
}
|