Add stub for protocoldb
build
Details
build
Details
This commit is contained in:
parent
0e932342e0
commit
80f1578fb5
|
@ -0,0 +1,94 @@
|
|||
package protocoldb
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"gitea.mmo.to/ProtocolPacketForger/ppf/protocol"
|
||||
"gitea.mmo.to/ProtocolPacketForger/ppf/protocolctl"
|
||||
)
|
||||
|
||||
type PPFDatabases struct {
|
||||
Databases []ProtocolDatabaseProvider
|
||||
}
|
||||
|
||||
type ProtocolDatabaseProvider interface {
|
||||
Open(path string) error
|
||||
Close() error
|
||||
Protocols() map[string]protocol.DOPMeta
|
||||
}
|
||||
|
||||
type ProtocolDatabaseManager interface {
|
||||
Add(prot *protocol.ProtocolStructure, path string)
|
||||
Update(prot *protocol.ProtocolStructure, path string)
|
||||
// no remove.
|
||||
UpdateDatabase() error // scans for new protocols
|
||||
}
|
||||
|
||||
type DatabaseEntry struct {
|
||||
Path string
|
||||
Protocol protocol.DOPMeta
|
||||
}
|
||||
|
||||
// FileDatabase implements ProtocolDatabaseProvider and ProtocolDatabaseManager
|
||||
type FileDatabase struct {
|
||||
Path string
|
||||
protocols map[string]DatabaseEntry
|
||||
closed bool
|
||||
}
|
||||
|
||||
type FileDatabaseFromGitRemote struct {
|
||||
FileDatabase
|
||||
RemoteGitRepository string
|
||||
}
|
||||
|
||||
func (fd *FileDatabase) Open(path string) error {
|
||||
fileinfo, err := os.Stat(path)
|
||||
if err == os.ErrNotExist {
|
||||
return err
|
||||
}
|
||||
if !fileinfo.IsDir() {
|
||||
return fmt.Errorf("Path %s is not a directory", path)
|
||||
}
|
||||
fd.Path = path
|
||||
fd.closed = false
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fd *FileDatabase) Close() error {
|
||||
for k := range fd.protocols {
|
||||
delete(fd.protocols, k)
|
||||
}
|
||||
fd.closed = true
|
||||
return nil
|
||||
}
|
||||
|
||||
func (fd *FileDatabase) Protocols() map[string]DatabaseEntry {
|
||||
if !fd.closed {
|
||||
fd.protocols = map[string]DatabaseEntry{}
|
||||
// recurse recursively through the path
|
||||
filepath.Walk(fd.Path, func(path string, info fs.FileInfo, err error) error {
|
||||
if !info.IsDir() {
|
||||
prot, err := protocolctl.LoadNew(path)
|
||||
if err != nil {
|
||||
// add to map
|
||||
fd.protocols[prot.Metadata.Name] = DatabaseEntry{path, prot.Metadata}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
return fd.protocols
|
||||
}
|
||||
|
||||
func (fd *FileDatabase) Add(prot *protocol.ProtocolStructure, path string) {
|
||||
|
||||
}
|
||||
func (fd *FileDatabase) Update(prot *protocol.ProtocolStructure, path string) {
|
||||
|
||||
}
|
||||
func (fd *FileDatabase) UpdateDatabase() error {
|
||||
|
||||
}
|
Loading…
Reference in New Issue