From 485e0b2bdcec3c82d6c0b4d7719808a0dfc9289c Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Tue, 29 Dec 2015 13:16:20 +0100 Subject: export session store to control interfaces diff --git a/src/helsinki.at/rhimportd/ctrlTelnet.go b/src/helsinki.at/rhimportd/ctrlTelnet.go index 45579e2..4ea7c66 100644 --- a/src/helsinki.at/rhimportd/ctrlTelnet.go +++ b/src/helsinki.at/rhimportd/ctrlTelnet.go @@ -275,7 +275,7 @@ func telnet_run(c *telgo.TelnetClient, args []string, conf *rhimport.Config, rdd return false } -func StartControlTelnet(addr_s string, conf *rhimport.Config, rddb *rhimport.RdDbChan) { +func StartControlTelnet(addr_s string, conf *rhimport.Config, rddb *rhimport.RdDbChan, sessions *rhimport.SessionStoreChan) { cmdlist := make(telgo.TelgoCmdList) cmdlist["quit"] = func(c *telgo.TelnetClient, args []string) bool { return telnet_quit(c, args, conf, rddb) } cmdlist["help"] = func(c *telgo.TelnetClient, args []string) bool { return telnet_help(c, args, conf, rddb) } diff --git a/src/helsinki.at/rhimportd/ctrlWeb.go b/src/helsinki.at/rhimportd/ctrlWeb.go index 894780c..2a95676 100644 --- a/src/helsinki.at/rhimportd/ctrlWeb.go +++ b/src/helsinki.at/rhimportd/ctrlWeb.go @@ -34,20 +34,21 @@ import ( type webHandler struct { *rhimport.Config *rhimport.RdDbChan + *rhimport.SessionStoreChan trusted bool - H func(*rhimport.Config, *rhimport.RdDbChan, bool, http.ResponseWriter, *http.Request) + H func(*rhimport.Config, *rhimport.RdDbChan, *rhimport.SessionStoreChan, bool, http.ResponseWriter, *http.Request) } func (self webHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { - self.H(self.Config, self.RdDbChan, self.trusted, w, r) + self.H(self.Config, self.RdDbChan, self.SessionStoreChan, self.trusted, w, r) } -func StartControlWeb(addr_s string, conf *rhimport.Config, rddb *rhimport.RdDbChan) { - http.Handle("/public/simple", webHandler{conf, rddb, false, webSimpleHandler}) - http.Handle("/trusted/simple", webHandler{conf, rddb, true, webSimpleHandler}) +func StartControlWeb(addr_s string, conf *rhimport.Config, rddb *rhimport.RdDbChan, sessions *rhimport.SessionStoreChan) { + http.Handle("/public/simple", webHandler{conf, rddb, sessions, false, webSimpleHandler}) + http.Handle("/trusted/simple", webHandler{conf, rddb, sessions, true, webSimpleHandler}) - http.Handle("/public/socket", webHandler{conf, rddb, false, webSocketHandler}) - http.Handle("/trusted/socket", webHandler{conf, rddb, true, webSocketHandler}) + http.Handle("/public/socket", webHandler{conf, rddb, sessions, false, webSocketHandler}) + http.Handle("/trusted/socket", webHandler{conf, rddb, sessions, true, webSocketHandler}) rhl.Println("web-ctrl: listening on", addr_s) server := &http.Server{Addr: addr_s, ReadTimeout: 60 * time.Second, WriteTimeout: 60 * time.Second} diff --git a/src/helsinki.at/rhimportd/ctrlWebSimple.go b/src/helsinki.at/rhimportd/ctrlWebSimple.go index 7217584..12e17a3 100644 --- a/src/helsinki.at/rhimportd/ctrlWebSimple.go +++ b/src/helsinki.at/rhimportd/ctrlWebSimple.go @@ -121,7 +121,7 @@ func webSimpleParseRequest(conf *rhimport.Config, rddb *rhimport.RdDbChan, trust return } -func webSimpleHandler(conf *rhimport.Config, rddb *rhimport.RdDbChan, trusted bool, w http.ResponseWriter, r *http.Request) { +func webSimpleHandler(conf *rhimport.Config, rddb *rhimport.RdDbChan, sessions *rhimport.SessionStoreChan, trusted bool, w http.ResponseWriter, r *http.Request) { rhdl.Printf("WebSimpleHandler: request for '%s'", html.EscapeString(r.URL.Path)) var ctx *rhimport.ImportContext diff --git a/src/helsinki.at/rhimportd/ctrlWebSocket.go b/src/helsinki.at/rhimportd/ctrlWebSocket.go index 09095dd..93134fd 100644 --- a/src/helsinki.at/rhimportd/ctrlWebSocket.go +++ b/src/helsinki.at/rhimportd/ctrlWebSocket.go @@ -83,7 +83,10 @@ func sendWebSocketErrorResponse(ws *websocket.Conn, code int, err_str string) { } } -func webSocketHandler(conf *rhimport.Config, rddb *rhimport.RdDbChan, trusted bool, w http.ResponseWriter, r *http.Request) { +func webSocketSessionHandler() { +} + +func webSocketHandler(conf *rhimport.Config, rddb *rhimport.RdDbChan, sessions *rhimport.SessionStoreChan, trusted bool, w http.ResponseWriter, r *http.Request) { rhdl.Printf("WebSocketHandler: request for '%s'", html.EscapeString(r.URL.Path)) ws, err := websocket.Upgrade(w, r, nil, 1024, 1024) @@ -111,7 +114,7 @@ func webSocketHandler(conf *rhimport.Config, rddb *rhimport.RdDbChan, trusted bo case "new": sendWebSocketErrorResponse(ws, http.StatusNotImplemented, "new session - not yet implemented") return - case "get": + case "reconnect": if reqdata.UserName == "" { sendWebSocketErrorResponse(ws, http.StatusBadRequest, "missing mandotary field LOGIN_NAME") return diff --git a/src/helsinki.at/rhimportd/main.go b/src/helsinki.at/rhimportd/main.go index 3ce61da..87fa3ab 100644 --- a/src/helsinki.at/rhimportd/main.go +++ b/src/helsinki.at/rhimportd/main.go @@ -26,14 +26,14 @@ package main import ( "flag" - "fmt" + // "fmt" "helsinki.at/rhimport" "log" - "net/http" + // "net/http" "os" "os/signal" "sync" - "time" + // "time" // "io/ioutil" ) @@ -43,98 +43,98 @@ var ( //rhdl = log.New(ioutil.Discard, "[rhimportd-dbg]\t", log.LstdFlags) ) -func session_test_progress1(step int, step_name string, progress float64, userdata interface{}) bool { - out := userdata.(chan<- string) - select { - case out <- fmt.Sprintf("CB1 %d, %s: %3.2f%%", step, step_name, progress*100): - default: - } - if step > 1 { - return false - } - return true -} - -func session_test_progress2(step int, step_name string, progress float64, userdata interface{}) bool { - out := userdata.(chan<- string) - select { - case out <- fmt.Sprintf("CB2 %d, %s: %3.2f%%", step, step_name, progress*100): - default: - } - return true -} - -func session_test_done(res rhimport.ImportResult, userdata interface{}) bool { - done := userdata.(chan<- rhimport.ImportResult) - done <- res - return true -} - -func session_test(conf *rhimport.Config, rddb *rhimport.RdDbChan) { - sessions, err := rhimport.NewSessionStore(conf) - if err != nil { - rhl.Println("Error initializing Session Store:", err) - return - } - defer sessions.Cleanup() - - store := sessions.GetInterface() - - ctx := rhimport.NewImportContext(conf, rddb, "heslinki") - ctx.Trusted = true - ctx.ShowId = 10002 - ctx.ClearShowCarts = true - ctx.SourceUri = "http://www.tonycuffe.com/mp3/tail%20toddle.mp3" - - id, _, code, errstring := store.New(ctx) - if code != http.StatusOK { - rhl.Printf("MAIN: Error SessionStore.New(): %s", errstring) - return - } - - var session *rhimport.SessionChan - if session, code, errstring = store.Get(ctx.UserName, id); code != http.StatusOK { - rhl.Printf("MAIN: Error SessionStore.Get(): %s", errstring) - return - } - - dch := make(chan rhimport.ImportResult, 1) - if err = session.AddDoneHandler((chan<- rhimport.ImportResult)(dch), session_test_done); err != nil { - rhl.Printf("MAIN: Error Session.AddDoneHandler(): %s", err) - return - } - - pch := make(chan string, 10) - if err = session.AddProgressHandler((chan<- string)(pch), session_test_progress1); err != nil { - rhl.Printf("MAIN: Error Session.AddProgressHandler(): %s", err) - } - go func() { - time.Sleep(3 * time.Second) - if err = session.AddProgressHandler((chan<- string)(pch), session_test_progress2); err != nil { - rhl.Printf("MAIN: Error Session.AddProgressHandler(): %s", err) - } - }() - - rhl.Printf("MAIN: calling run for %s/%s", ctx.UserName, id) - session.Run(30 * time.Second) - - for { - select { - case p := <-pch: - fmt.Println(p) - case r := <-dch: - fmt.Printf("Import finished: %+v\n", r) - break - } - } - - rhl.Printf("MAIN: calling remove for %s/%s", ctx.UserName, id) - if code, errstring = store.Remove(ctx.UserName, id); code != http.StatusOK { - rhl.Printf("MAIN: Error SessionStore.Remove(): %s", errstring) - } - - rhl.Printf("MAIN: remove done") -} +// func session_test_progress1(step int, step_name string, progress float64, userdata interface{}) bool { +// out := userdata.(chan<- string) +// select { +// case out <- fmt.Sprintf("CB1 %d, %s: %3.2f%%", step, step_name, progress*100): +// default: +// } +// if step > 1 { +// return false +// } +// return true +// } + +// func session_test_progress2(step int, step_name string, progress float64, userdata interface{}) bool { +// out := userdata.(chan<- string) +// select { +// case out <- fmt.Sprintf("CB2 %d, %s: %3.2f%%", step, step_name, progress*100): +// default: +// } +// return true +// } + +// func session_test_done(res rhimport.ImportResult, userdata interface{}) bool { +// done := userdata.(chan<- rhimport.ImportResult) +// done <- res +// return true +// } + +// func session_test(conf *rhimport.Config, rddb *rhimport.RdDbChan) { +// sessions, err := rhimport.NewSessionStore(conf) +// if err != nil { +// rhl.Println("Error initializing Session Store:", err) +// return +// } +// defer sessions.Cleanup() + +// store := sessions.GetInterface() + +// ctx := rhimport.NewImportContext(conf, rddb, "heslinki") +// ctx.Trusted = true +// ctx.ShowId = 10002 +// ctx.ClearShowCarts = true +// ctx.SourceUri = "http://www.tonycuffe.com/mp3/tail%20toddle.mp3" + +// id, _, code, errstring := store.New(ctx) +// if code != http.StatusOK { +// rhl.Printf("MAIN: Error SessionStore.New(): %s", errstring) +// return +// } + +// var session *rhimport.SessionChan +// if session, code, errstring = store.Get(ctx.UserName, id); code != http.StatusOK { +// rhl.Printf("MAIN: Error SessionStore.Get(): %s", errstring) +// return +// } + +// dch := make(chan rhimport.ImportResult, 1) +// if err = session.AddDoneHandler((chan<- rhimport.ImportResult)(dch), session_test_done); err != nil { +// rhl.Printf("MAIN: Error Session.AddDoneHandler(): %s", err) +// return +// } + +// pch := make(chan string, 10) +// if err = session.AddProgressHandler((chan<- string)(pch), session_test_progress1); err != nil { +// rhl.Printf("MAIN: Error Session.AddProgressHandler(): %s", err) +// } +// go func() { +// time.Sleep(3 * time.Second) +// if err = session.AddProgressHandler((chan<- string)(pch), session_test_progress2); err != nil { +// rhl.Printf("MAIN: Error Session.AddProgressHandler(): %s", err) +// } +// }() + +// rhl.Printf("MAIN: calling run for %s/%s", ctx.UserName, id) +// session.Run(30 * time.Second) + +// for { +// select { +// case p := <-pch: +// fmt.Println(p) +// case r := <-dch: +// fmt.Printf("Import finished: %+v\n", r) +// break +// } +// } + +// rhl.Printf("MAIN: calling remove for %s/%s", ctx.UserName, id) +// if code, errstring = store.Remove(ctx.UserName, id); code != http.StatusOK { +// rhl.Printf("MAIN: Error SessionStore.Remove(): %s", errstring) +// } + +// rhl.Printf("MAIN: remove done") +// } func main() { web_addr_s := flag.String("web-addr", ":4080", "addr:port to listen on") @@ -164,7 +164,12 @@ func main() { } defer rddb.Cleanup() - // go session_test(conf, rddb.GetInterface()) + sessions, err := rhimport.NewSessionStore(conf) + if err != nil { + rhl.Println("Error initializing Session Store:", err) + return + } + defer sessions.Cleanup() var wg sync.WaitGroup @@ -172,7 +177,7 @@ func main() { go func() { defer wg.Done() rhl.Println("starting web-ctrl") - StartControlWeb(*web_addr_s, conf, rddb.GetInterface()) + StartControlWeb(*web_addr_s, conf, rddb.GetInterface(), sessions.GetInterface()) rhl.Println("web-ctrl finished") }() @@ -180,7 +185,7 @@ func main() { go func() { defer wg.Done() rhl.Println("starting telnet-ctrl") - StartControlTelnet(*telnet_addr_s, conf, rddb.GetInterface()) + StartControlTelnet(*telnet_addr_s, conf, rddb.GetInterface(), sessions.GetInterface()) rhl.Println("telnet-ctrl finished") }() -- cgit v0.10.2