package pas import ( "bufio" "log" "net" "strconv" "strings" "git.gay/exhq/pas/Constants" "git.gay/exhq/pas/helper" "git.gay/exhq/pas/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))) }) }