Recode parser logic

This commit is contained in:
d3m0k1d
2026-01-05 17:12:01 +03:00
parent f85ebe6ada
commit 4efc3b6667

View File

@@ -2,27 +2,75 @@ package parser
import ( import (
"bufio" "bufio"
"github.com/d3m0k1d/BanForge/internal/logger"
"os" "os"
"time"
"github.com/d3m0k1d/BanForge/internal/logger"
) )
type Event struct { type Event struct {
Data string Data string
} }
type Scaner struct { type Scanner struct {
scanner *bufio.Scanner scanner *bufio.Scanner
ch chan Event ch chan Event
stopCh chan struct{}
logger *logger.Logger
file *os.File
pollDelay time.Duration
} }
func CreateScaner(path string) *Scaner { func NewScanner(path string) (*Scanner, error) {
log := logger.New(false)
file, err := os.Open(path) file, err := os.Open(path)
if err != nil { if err != nil {
log.Error(err.Error()) return nil, err
}
return &Scaner{
scanner: bufio.NewScanner(file),
ch: make(chan Event),
} }
return &Scanner{
scanner: bufio.NewScanner(file),
ch: make(chan Event, 100),
stopCh: make(chan struct{}),
logger: logger.New(false),
file: file,
pollDelay: 100 * time.Millisecond,
}, nil
}
func (s *Scanner) Start() {
s.logger.Info("Scanner started")
go func() {
for {
select {
case <-s.stopCh:
s.logger.Info("Scanner stopped")
return
default:
if s.scanner.Scan() {
s.ch <- Event{
Data: s.scanner.Text(),
}
} else {
if err := s.scanner.Err(); err != nil {
s.logger.Error("Scanner error:", err)
return
}
time.Sleep(s.pollDelay)
}
}
}
}()
}
func (s *Scanner) Stop() {
close(s.stopCh)
time.Sleep(150 * time.Millisecond)
s.file.Close()
close(s.ch)
}
func (s *Scanner) Events() <-chan Event {
return s.ch
} }