74 lines
1.2 KiB
Go
74 lines
1.2 KiB
Go
package sessionwriter
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"sync"
|
|
)
|
|
|
|
type Session struct {
|
|
lock *sync.Mutex
|
|
dom *File
|
|
dev *File
|
|
updated bool
|
|
}
|
|
|
|
func NewSession(sessID uint64, workDir string, bufSize int) (*Session, error) {
|
|
if sessID == 0 {
|
|
return nil, fmt.Errorf("wrong session id")
|
|
}
|
|
filePath := workDir + strconv.FormatUint(sessID, 10)
|
|
|
|
dom, err := NewFile(filePath, bufSize)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
dev, err := NewFile(filePath+"devtools", bufSize)
|
|
if err != nil {
|
|
dom.Close()
|
|
return nil, err
|
|
}
|
|
|
|
return &Session{
|
|
lock: &sync.Mutex{},
|
|
dom: dom,
|
|
dev: dev,
|
|
updated: false,
|
|
}, nil
|
|
}
|
|
|
|
func (s *Session) Write(domBuffer, devBuffer []byte) error {
|
|
s.lock.Lock()
|
|
defer s.lock.Unlock()
|
|
|
|
// Write dom buffer to the file (file buffer)
|
|
if err := s.dom.Write(domBuffer); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Write dev buffer to the file (file buffer)
|
|
if err := s.dev.Write(devBuffer); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Session) Sync() error {
|
|
s.lock.Lock()
|
|
defer s.lock.Unlock()
|
|
|
|
if err := s.dom.Sync(); err != nil {
|
|
return err
|
|
}
|
|
return s.dev.Sync()
|
|
}
|
|
|
|
func (s *Session) Close() error {
|
|
s.lock.Lock()
|
|
defer s.lock.Unlock()
|
|
|
|
if err := s.dom.Close(); err != nil {
|
|
return err
|
|
}
|
|
return s.dev.Close()
|
|
}
|