forked from FactomProject/FactomCode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata.go
More file actions
101 lines (82 loc) · 1.7 KB
/
data.go
File metadata and controls
101 lines (82 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package main
import (
"errors"
"fmt"
"github.com/firelizzard18/dynrsrc"
"github.com/firelizzard18/gobundle"
"github.com/NotaryChains/NotaryChainCode/notaryapi"
"io/ioutil"
"path/filepath"
"sync"
"time"
)
var blocks []*notaryapi.Block
var blockMutex = &sync.Mutex{}
var saveTicker = time.NewTicker(time.Hour)
func watchError(err error) {
panic(err)
}
func readError(err error) {
fmt.Println("error: ", err)
}
func templates_init() {
dynrsrc.Start(watchError, readError)
notaryapi.StartDynamic(gobundle.DataFile("html.gwp"), readError)
}
func templates_fini() {
dynrsrc.Stop()
}
func loadBlocks() {
matches, err := filepath.Glob(gobundle.DataFile("store.*.block"))
if err != nil {
panic(err)
}
blocks = make([]*notaryapi.Block, len(matches))
num := 0
for _, match := range matches {
data, err := ioutil.ReadFile(match)
if err != nil {
panic(err)
}
block := new(notaryapi.Block)
err = block.UnmarshalBinary(data)
if err != nil {
panic(err)
}
blocks[num] = block
num++
}
for i := 0; i < len(blocks); i = i + 1 {
if uint64(i) != blocks[i].BlockID {
panic(errors.New("BlockID does not equal index"))
}
}
notaryapi.UpdateNextBlockID(uint64(len(blocks)))
}
func saveBlocks_init() {
go func() {
for _ = range saveTicker.C {
saveBlocks()
}
}()
}
func saveBlocks_fini() {
saveTicker.Stop()
saveBlocks()
}
func saveBlocks() {
bcp := make([]*notaryapi.Block, len(blocks))
blockMutex.Lock()
copy(bcp, blocks)
blockMutex.Unlock()
for i, block := range bcp {
data, err := block.MarshalBinary()
if err != nil {
panic(err)
}
err = ioutil.WriteFile(gobundle.DataFile(fmt.Sprintf(`store.%d.block`, i)), data, 0777)
if err != nil {
panic(err)
}
}
}