summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main.go35
-rw-r--r--worker.go6
2 files changed, 30 insertions, 11 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))
}
diff --git a/worker.go b/worker.go
index 6d659da..01b55e3 100644
--- a/worker.go
+++ b/worker.go
@@ -130,7 +130,11 @@ func (w *Worker) ListRoutes() []string {
return res
}
-func (w *Worker) Stop () {
+func (w *Worker) Eval(code string) error {
+ return w.lua.LoadString(code)
+}
+
+func (w *Worker) Stop() {
w.lua.Close()
}