summaryrefslogtreecommitdiff
path: root/main.go
diff options
context:
space:
mode:
authorunwox <me@unwox.com>2024-06-13 13:12:17 +0600
committerunwox <me@unwox.com>2024-06-13 13:12:17 +0600
commit4374d8c5d98fbc9e2589074cd0f05266db6a10e1 (patch)
treefd366c586cc6ba5c888c3c87b592f49ed9a34b9d /main.go
parentc1ac633d9fa5da9fb312e4a990ee48d0fa7c0c4e (diff)
implement unsafe evaluation of lua code in workers
Diffstat (limited to 'main.go')
-rw-r--r--main.go35
1 files changed, 25 insertions, 10 deletions
diff --git a/main.go b/main.go
index a9b47b8..7575c11 100644
--- a/main.go
+++ b/main.go
@@ -10,29 +10,30 @@ import (
func main() {
rch := make(chan *WorkerRequest, 4096)
mux := http.NewServeMux()
+ wrks := []*Worker{}
for i := 0; i < 8; i++ {
log.Printf("worker %d started\n", i)
- w := NewWorker(rch)
- err := w.Start("init.lua")
+ wrk := NewWorker(rch)
+ err := wrk.Start("init.lua")
if err != nil {
log.Fatal(err)
}
if i == 0 {
- for _, route := range w.ListRoutes() {
+ for _, route := range wrk.ListRoutes() {
// we need to copy route otherwise it's going
// to change with every next iteration
route := route
mux.HandleFunc(
route,
- func (wr http.ResponseWriter, r *http.Request) {
+ func (w http.ResponseWriter, r *http.Request) {
start := time.Now()
- resCh := w.Request(route, r)
+ resCh := wrk.Request(route, r, *debug)
res := <- resCh
for k, h := range res.Headers {
- wr.Header().Set(k, h)
+ w.Header().Set(k, h)
}
- wr.WriteHeader(int(res.Code))
- fmt.Fprint(wr, string(res.Body))
+ w.WriteHeader(int(res.Code))
+ fmt.Fprint(w, string(res.Body))
log.Printf(
"%s %s (%s) -> %d\n",
r.Method,
@@ -44,9 +45,23 @@ func main() {
)
}
}
- go w.Listen()
- defer w.Stop()
+ wrks = append(wrks, wrk)
+ go wrk.Listen()
+ defer wrk.Stop()
}
+ go func () {
+ reader := bufio.NewReader(os.Stdin)
+ for {
+ text, _ := reader.ReadString('\n')
+ for _, w := range wrks {
+ err := w.Eval(text)
+ if err != nil {
+ log.Printf("error: %s\n", err)
+ break
+ }
+ }
+ }
+ }()
fmt.Println("luna is running...")
log.Fatal(http.ListenAndServe("127.0.0.1:3002", mux))
}