up3
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
Build and deploy / Build (push) Has been cancelled
Build and deploy / Update Contributors (push) Has been cancelled
Build and deploy / Deploy (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package playerdb
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"github.com/df-mc/dragonfly/server/player"
|
||||
"github.com/df-mc/dragonfly/server/world"
|
||||
"github.com/df-mc/goleveldb/leveldb"
|
||||
"github.com/df-mc/goleveldb/leveldb/opt"
|
||||
"github.com/google/uuid"
|
||||
"os"
|
||||
)
|
||||
|
||||
// Provider is a player data provider that uses a LevelDB database to store data. The data passed on
|
||||
// will first be converted to make sure it can be marshaled into JSON. This JSON (in bytes) will then
|
||||
// be stored in the database under a key that is the byte representation of the player's UUID.
|
||||
type Provider struct {
|
||||
db *leveldb.DB
|
||||
}
|
||||
|
||||
// NewProvider creates a new player data provider that saves and loads data using
|
||||
// a LevelDB database.
|
||||
func NewProvider(path string) (*Provider, error) {
|
||||
if _, err := os.Stat(path); os.IsNotExist(err) {
|
||||
_ = os.Mkdir(path, 0777)
|
||||
}
|
||||
db, err := leveldb.OpenFile(path, &opt.Options{Compression: opt.SnappyCompression})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &Provider{db: db}, nil
|
||||
}
|
||||
|
||||
// Save ...
|
||||
func (p *Provider) Save(id uuid.UUID, d player.Config, w *world.World) error {
|
||||
b, err := json.Marshal(p.toJson(d, w))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return p.db.Put(id[:], b, nil)
|
||||
}
|
||||
|
||||
// Load ...
|
||||
func (p *Provider) Load(id uuid.UUID, world func(world.Dimension) *world.World) (player.Config, *world.World, error) {
|
||||
b, err := p.db.Get(id[:], nil)
|
||||
if err != nil {
|
||||
return player.Config{}, nil, err
|
||||
}
|
||||
var d jsonData
|
||||
err = json.Unmarshal(b, &d)
|
||||
if err != nil {
|
||||
return player.Config{}, nil, err
|
||||
}
|
||||
conf, w := p.fromJson(d, world)
|
||||
|
||||
return conf, w, nil
|
||||
}
|
||||
|
||||
// Close ...
|
||||
func (p *Provider) Close() error {
|
||||
return p.db.Close()
|
||||
}
|
||||
Reference in New Issue
Block a user