diff options
-rw-r--r-- | src/helsinki.at/rhimport/session.go | 7 | ||||
-rw-r--r-- | src/helsinki.at/rhimportd/main.go | 97 |
2 files changed, 53 insertions, 51 deletions
diff --git a/src/helsinki.at/rhimport/session.go b/src/helsinki.at/rhimport/session.go index ce84053..8f20958 100644 --- a/src/helsinki.at/rhimport/session.go +++ b/src/helsinki.at/rhimport/session.go @@ -149,7 +149,9 @@ func (self *Session) dispatchRequests() { for { select { case <-self.runChan: - self.run() + if !self.running { + self.run() + } case <-self.cancelChan: if self.running { rhdl.Println("Session: canceling running imports is not yet implemented") @@ -168,8 +170,6 @@ func (self *Session) dispatchRequests() { self.running = false rhdl.Printf("Session: import is done: %+v", result) // TODO: call all subscribed done handler - // TODO: send remove request to session store? - return } } } @@ -185,6 +185,7 @@ func (self *Session) getInterface() *SessionChan { func (self *Session) Cleanup() { // TODO: this blocks if dispatchRequests has ended already... + // or if cancel doesn't work... self.cancelChan <- true <-self.done close(self.done) diff --git a/src/helsinki.at/rhimportd/main.go b/src/helsinki.at/rhimportd/main.go index 51a406e..4b6ddf4 100644 --- a/src/helsinki.at/rhimportd/main.go +++ b/src/helsinki.at/rhimportd/main.go @@ -43,34 +43,7 @@ var ( //rhdl = log.New(ioutil.Discard, "[rhimportd-dbg]\t", log.LstdFlags) ) -func main() { - // web_addr_s := flag.String("web-addr", ":4080", "addr:port to listen on") - // telnet_addr_s := flag.String("telnet-addr", ":4023", "addr:port to listen on") - rdconf_s := flag.String("rdconf", "/etc/rd.conf", "path to the Rivendell config file") - rdxport_url_s := flag.String("rdxport-url", "http://localhost/rd-bin/rdxport.cgi", "the url to the Rivendell web-api") - temp_dir_s := flag.String("tmp-dir", os.TempDir(), "path to temporary files") - local_fetch_dir_s := flag.String("local-fetch-dir", os.TempDir(), "path to files that can be imported using local://") - help := flag.Bool("help", false, "show usage") - - flag.Parse() - if *help { - flag.Usage() - return - } - - conf, err := rhimport.NewConfig(rdconf_s, rdxport_url_s, temp_dir_s, local_fetch_dir_s) - if err != nil { - rhl.Println("Error reading configuration:", err) - return - } - - rddb, err := rhimport.NewRdDb(conf) - if err != nil { - rhl.Println("Error initializing Rivdenll DB:", err) - return - } - defer rddb.Cleanup() - +func session_test(conf *rhimport.Config, rddb *rhimport.RdDbChan) { sessions, err := rhimport.NewSessionStore(conf) if err != nil { rhl.Println("Error initializing Session Store:", err) @@ -80,7 +53,7 @@ func main() { store := sessions.GetInterface() - ctx := rhimport.NewImportContext(conf, rddb.GetInterface(), "hugo") + ctx := rhimport.NewImportContext(conf, rddb, "hugo") id, session, err := store.New(ctx) if err != nil { rhl.Printf("Error SessionStore.New(): %s", err) @@ -93,39 +66,67 @@ func main() { fmt.Printf("\n\nSESSION_STORE: %+v\n\n", sessions) - time.Sleep(12 * time.Second) + time.Sleep(5 * time.Second) + + store.Remove("hugo", id) + fmt.Printf("\n\nSESSION_STORE: %+v\n\n", sessions) + + time.Sleep(6 * time.Second) fmt.Printf("\n\nSESSION_STORE: %+v\n\n", sessions) store.Remove("hugo", id) fmt.Printf("\n\nSESSION_STORE: %+v\n\n", sessions) +} + +func main() { + web_addr_s := flag.String("web-addr", ":4080", "addr:port to listen on") + telnet_addr_s := flag.String("telnet-addr", ":4023", "addr:port to listen on") + rdconf_s := flag.String("rdconf", "/etc/rd.conf", "path to the Rivendell config file") + rdxport_url_s := flag.String("rdxport-url", "http://localhost/rd-bin/rdxport.cgi", "the url to the Rivendell web-api") + temp_dir_s := flag.String("tmp-dir", os.TempDir(), "path to temporary files") + local_fetch_dir_s := flag.String("local-fetch-dir", os.TempDir(), "path to files that can be imported using local://") + help := flag.Bool("help", false, "show usage") + + flag.Parse() + if *help { + flag.Usage() + return + } + + conf, err := rhimport.NewConfig(rdconf_s, rdxport_url_s, temp_dir_s, local_fetch_dir_s) + if err != nil { + rhl.Println("Error reading configuration:", err) + return + } + + rddb, err := rhimport.NewRdDb(conf) + if err != nil { + rhl.Println("Error initializing Rivdenll DB:", err) + return + } + defer rddb.Cleanup() + + // go session_test(conf, rddb.GetInterface()) var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() - for { - time.Sleep(10 * time.Second) - } + rhl.Println("starting web-ctrl") + StartControlWeb(*web_addr_s, conf, rddb.GetInterface()) + rhl.Println("web-ctrl finished") }() - // wg.Add(1) - // go func() { - // defer wg.Done() - // rhl.Println("starting web-ctrl") - // StartControlWeb(*web_addr_s, conf, rddb.GetInterface()) - // rhl.Println("web-ctrl finished") - // }() - - // wg.Add(1) - // go func() { - // defer wg.Done() - // rhl.Println("starting telnet-ctrl") - // StartControlTelnet(*telnet_addr_s, conf, rddb.GetInterface()) - // rhl.Println("telnet-ctrl finished") - // }() + wg.Add(1) + go func() { + defer wg.Done() + rhl.Println("starting telnet-ctrl") + StartControlTelnet(*telnet_addr_s, conf, rddb.GetInterface()) + rhl.Println("telnet-ctrl finished") + }() alldone := make(chan bool) go func() { |