session.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package main
  2. import (
  3. "fmt"
  4. "io/ioutil"
  5. "os"
  6. "time"
  7. "golang-fave/utils"
  8. "github.com/vladimirok5959/golang-server-sessions/session"
  9. )
  10. func session_clean_do(www_dir string, stop chan bool) {
  11. files, err := ioutil.ReadDir(www_dir)
  12. if err == nil {
  13. for _, file := range files {
  14. select {
  15. case <-stop:
  16. break
  17. default:
  18. tmpdir := www_dir + string(os.PathSeparator) + file.Name() + string(os.PathSeparator) + "tmp"
  19. if utils.IsDirExists(tmpdir) {
  20. session.Clean(tmpdir)
  21. }
  22. }
  23. }
  24. }
  25. }
  26. func session_clean_start(www_dir string) (chan bool, chan bool) {
  27. ch := make(chan bool)
  28. stop := make(chan bool)
  29. // Cleanup at start
  30. session_clean_do(www_dir, stop)
  31. go func() {
  32. for {
  33. select {
  34. case <-time.After(1 * time.Hour):
  35. // Cleanup every one hour
  36. session_clean_do(www_dir, stop)
  37. case <-ch:
  38. ch <- true
  39. return
  40. }
  41. }
  42. }()
  43. return ch, stop
  44. }
  45. func session_clean_stop(ch, stop chan bool) {
  46. for {
  47. select {
  48. case stop <- true:
  49. case ch <- true:
  50. <-ch
  51. return
  52. case <-time.After(8 * time.Second):
  53. fmt.Println("Session cleaner error: force exit by timeout after 8 seconds")
  54. return
  55. }
  56. }
  57. }