...
1 package zenith
2
3 import (
4 "errors"
5 "sync"
6 )
7
8
9 type Tracker struct {
10 db *Database
11 sync.RWMutex
12 }
13
14
15 type TrackerOptions struct {
16 Database *Database
17 Web string
18 }
19
20
21 func NewTracker(options *TrackerOptions) (*Tracker, error) {
22 if options == nil || options.Database == nil {
23 return nil, errors.New("failed to initialize tracker: database is a required option")
24 }
25
26 t := &Tracker{
27 db: options.Database,
28 }
29
30 if options.Web != "" {
31 go hostWebInterface(t, options.Web)
32 }
33
34 return t, nil
35 }
36
37
38 func (t *Tracker) Track(results ...*MatchResult) error {
39 t.Lock()
40 defer t.Unlock()
41
42 err := t.db.Track(results...)
43 if err != nil {
44 return err
45 }
46
47 return nil
48 }
49
50
51 func (t *Tracker) PlayersByStanding(start int, end int) []*Player {
52 return nil
53 }
54
55
56 func (t *Tracker) Player(game, player int) (*Player, error) {
57 return t.db.Player(game, player)
58 }
59
View as plain text