File tree Expand file tree Collapse file tree 4 files changed +91
-1
lines changed Expand file tree Collapse file tree 4 files changed +91
-1
lines changed Original file line number Diff line number Diff line change @@ -14,6 +14,13 @@ func GetWebsocketPanicHandler() func(conn *websocket.Conn) {
1414 }
1515}
1616
17+ func SaveOnPanic (storage * Storage ) {
18+ if err := recover (); err != nil {
19+ storage .Save ()
20+ HandlePanic (err )
21+ }
22+ }
23+
1724func RecoverGoroutine (function func ()) {
1825 if err := recover (); err != nil {
1926 HandlePanic (err )
Original file line number Diff line number Diff line change 1+ package internal
2+
3+ import (
4+ "bufio"
5+ "os"
6+ )
7+
8+ type Storage struct {
9+ queue Queue [string ]
10+ }
11+
12+ func NewStorage (queue Queue [string ]) * Storage {
13+ return & Storage {
14+ queue : queue ,
15+ }
16+ }
17+
18+ func (S * Storage ) clear () {
19+ err := os .WriteFile ("./data" , []byte ("" ), 0644 )
20+ if err != nil {
21+ panic (err )
22+ }
23+ }
24+
25+ func (S * Storage ) Save () {
26+ S .clear ()
27+
28+ file , err := os .OpenFile ("./data" , os .O_RDWR | os .O_CREATE , 0644 )
29+ if err != nil {
30+ panic (err )
31+ }
32+ defer file .Close ()
33+ for ! S .queue .IsEmpty () {
34+ value , _ := S .queue .Dequeue ()
35+ //err := os.OpenFile("./data", []byte(value+"\n"), 0644)
36+ _ , err = file .WriteString (value + "\n " )
37+ if err != nil {
38+ panic (err )
39+ }
40+ }
41+ }
42+
43+ func (S * Storage ) Load () {
44+ file , err := os .OpenFile ("./data" , os .O_RDONLY , 0644 )
45+ if err != nil {
46+ return
47+ }
48+ defer file .Close ()
49+
50+ scanner := bufio .NewScanner (file )
51+ for scanner .Scan () {
52+ text := scanner .Text ()
53+ if text == "" {
54+ continue
55+ }
56+ S .queue .Enqueue (text )
57+ }
58+ }
Original file line number Diff line number Diff line change 1+ package internal
2+
3+ import (
4+ "github.com/gofiber/fiber/v2/log"
5+ "os"
6+ "os/signal"
7+ )
8+
9+ func HandleOsSignal (storage * Storage ) {
10+ sigchan := make (chan os.Signal , 1 )
11+ signals := []os.Signal {os .Kill , os .Interrupt }
12+ signal .Notify (sigchan , signals ... )
13+ <- sigchan
14+
15+ storage .Save ()
16+
17+ log .Debug ("os signal received" )
18+
19+ os .Exit (0 )
20+ }
Original file line number Diff line number Diff line change @@ -11,6 +11,12 @@ import (
1111
1212func main () {
1313
14+ queue := internal .NewLinkedListQueue [string ]()
15+ storage := internal .NewStorage (queue )
16+ storage .Load ()
17+ defer internal .SaveOnPanic (storage )
18+ go internal .HandleOsSignal (storage )
19+
1420 app := fiber .New (fiber.Config {
1521 // Override default error handler
1622 ErrorHandler : func (ctx * fiber.Ctx , err error ) error {
@@ -22,7 +28,6 @@ func main() {
2228 app .Use (logger .New ())
2329 app .Use (cors .New ())
2430
25- queue := internal .NewLinkedListQueue [string ]()
2631 http := internal .NewHTTP (app , queue )
2732 http .SetupRoutes ()
2833
You can’t perform that action at this time.
0 commit comments