Skip to content

Commit 268dfac

Browse files
committed
Clean package, separated main and plugin system
1 parent d6342d3 commit 268dfac

17 files changed

+343
-292
lines changed

Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM scratch
1+
FROM debian:jessie
22

33
ADD esc-amd64 /esc
44

Dockerfile.arm

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM scratch
1+
FROM resin/rpi-raspbian
22

33
ADD esc-arm /esc
44

Makefile

+7-3
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ all: clean build
44
build: esc-amd64 esc-arm
55

66
esc-amd64:
7-
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w' -o esc-amd64
7+
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w' -o esc-amd64 cmd/esc/main.go
88

99
esc-arm:
10-
CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=6 go build -a -tags netgo -ldflags '-w' -o esc-arm
10+
CGO_ENABLED=1 GOOS=linux GOARCH=arm GOARM=6 go build -a -tags netgo -ldflags '-w' -o esc-arm cmd/esc/main.go
1111

1212
docker: esc-amd64
1313
docker build -t diogok/esc .
@@ -24,10 +24,14 @@ deps:
2424
go get github.com/diogok/gorpc
2525
go get github.com/patrickmn/go-cache
2626
go get github.com/yuin/gopher-lua
27-
#go get github.com/layeh/gopher-json
2827
go get layeh.com/gopher-json
2928
go get github.com/cjoudrey/gluahttp
3029

3130
push:
3231
docker push diogok/esc
3332

33+
run:
34+
go run -race cmd/esc/main.go
35+
36+
install:
37+
go install cmd/esc/main.go

builtin.go

-60
This file was deleted.

cmd/esc/main.go

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package main
2+
3+
import "esc"
4+
5+
func main() {
6+
esc.Start()
7+
8+
end := make(chan bool, 1)
9+
<-end
10+
}

config.go

+15-23
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package main
1+
package esc
22

33
import (
44
"flag"
@@ -9,40 +9,32 @@ import (
99
"os"
1010
)
1111

12-
type Config struct {
13-
Host string
14-
Node string `json:"node"`
15-
Join string `json:"join"`
16-
IFace string `json:"iface"`
17-
Discovery int `json:"discovery"`
18-
Port int `json:"port"`
19-
Scripts string `json:"scripts"`
20-
Net *net.Interface
21-
IPs []net.IP
22-
Extras map[string]string `json:"extras"`
23-
}
12+
var config *EscConfig
2413

25-
func defaultConfig() Config {
14+
func defaultConfig() EscConfig {
2615
host, err := os.Hostname()
2716
if err != nil {
2817
panic(err)
2918
}
3019

31-
config := Config{
20+
config := EscConfig{
3221
Node: host,
3322
Host: host,
3423
Port: 8901,
3524
Discovery: 8902,
3625
IFace: "eth0",
37-
Scripts: "scripts",
26+
Directory: "files",
3827
Extras: make(map[string]string),
3928
}
4029

4130
return config
4231
}
4332

44-
func LoadConfig() *Config {
45-
config := Config{}
33+
func Config() *EscConfig {
34+
if config != nil {
35+
return config
36+
}
37+
config = &EscConfig{}
4638

4739
defaultConfig := defaultConfig()
4840

@@ -52,7 +44,7 @@ func LoadConfig() *Config {
5244
}
5345

5446
_, err := os.Stat(configFile)
55-
var fileConfig Config
47+
var fileConfig EscConfig
5648
if err == nil {
5749
content, err0 := ioutil.ReadFile(configFile)
5850
if err0 != nil {
@@ -79,8 +71,8 @@ func LoadConfig() *Config {
7971
if fileConfig.Port != 0 {
8072
defaultConfig.Port = fileConfig.Port
8173
}
82-
if fileConfig.Scripts != "" {
83-
defaultConfig.Scripts = fileConfig.Scripts
74+
if fileConfig.Directory != "" {
75+
defaultConfig.Directory = fileConfig.Directory
8476
}
8577
if fileConfig.Extras != nil {
8678
config.Extras = fileConfig.Extras
@@ -92,7 +84,7 @@ func LoadConfig() *Config {
9284
flag.StringVar(&config.Node, "node", defaultConfig.Node, "Name of this node")
9385
flag.StringVar(&config.Join, "join", defaultConfig.Join, "Address of node to join")
9486
flag.StringVar(&config.IFace, "iface", defaultConfig.IFace, "Network Interface to bind to")
95-
flag.StringVar(&config.Scripts, "scripts", defaultConfig.Scripts, "Scripts directory")
87+
flag.StringVar(&config.Directory, "dir", defaultConfig.Directory, "Plugin/Directory directory")
9688
flag.IntVar(&config.Discovery, "discovery", defaultConfig.Discovery, "Port for network discovery")
9789
flag.IntVar(&config.Port, "port", defaultConfig.Port, "Port for cluster conns")
9890
flag.Parse()
@@ -119,5 +111,5 @@ func LoadConfig() *Config {
119111
}
120112

121113
log.Printf("%v\n", config)
122-
return &config
114+
return config
123115
}

config.yml

-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
node: "localhost"
22
port: 8901
33
discovery: 8902
4-
scripts: "scripts"
54
iface: "wlan0"
65
extras:
76
foo: "bar"

discovery.go

+11-21
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package main
1+
package esc
22

33
import (
44
"fmt"
@@ -9,21 +9,9 @@ import (
99
"time"
1010
)
1111

12-
var serviceName string
13-
14-
func Self() string {
15-
return fmt.Sprintf("%s.%s.local.", config.Node, serviceName)
16-
}
17-
18-
func NameOf(node string) string {
19-
return fmt.Sprintf("%s.%s.local.", node, serviceName)
20-
}
21-
22-
func startDiscovery() chan *mdns.ServiceEntry {
23-
nodeIn := make(chan *mdns.ServiceEntry)
24-
25-
serviceName = "_esc._tcp"
26-
service, err0 := mdns.NewMDNSService(config.Node, serviceName, "", config.Host, config.Discovery, config.IPs, []string{"esc"})
12+
func startDiscovery() chan *Service {
13+
nodeIn := make(chan *Service)
14+
service, err0 := mdns.NewMDNSService(Config().Node, ServiceName(), "", Config().Host, config.Discovery, config.IPs, []string{"esc"})
2715
if err0 != nil {
2816
panic(err0)
2917
}
@@ -37,10 +25,14 @@ func startDiscovery() chan *mdns.ServiceEntry {
3725
entries := make(chan *mdns.ServiceEntry, 4)
3826
go func() {
3927
for entry := range entries {
40-
if strings.HasSuffix(entry.Name, fmt.Sprintf("%s.local.", serviceName)) {
28+
if strings.HasSuffix(entry.Name, fmt.Sprintf("%s.local.", ServiceName())) {
4129
if _, ok := found.Get(entry.Name); !ok {
4230
log.Printf("Found node %s\n", entry.Name)
43-
nodeIn <- entry
31+
nodeIn <- &Service{
32+
Name: entry.Name,
33+
Port: Config().Port,
34+
AddrV4: &entry.AddrV4,
35+
}
4436
}
4537
found.Set(entry.Name, entry.Name, cache.DefaultExpiration)
4638
}
@@ -50,11 +42,9 @@ func startDiscovery() chan *mdns.ServiceEntry {
5042
ticker := time.NewTicker(8 * time.Second)
5143
go func() {
5244
for {
53-
mdns.Lookup(serviceName, entries)
45+
mdns.Lookup(ServiceName(), entries)
5446
<-ticker.C
5547
}
5648
}()
57-
5849
return nodeIn
59-
6050
}

scripts/demo.lua files/scripts/demo.lua

-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
11

2-
set("foo","bar")
3-
4-
foo = get("foo")
5-
62
log(foo)
73

84
log("CFG "..config("foo"))
File renamed without changes.

filesync.go

+21-22
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package main
1+
package esc
22

33
import (
44
"crypto/sha256"
@@ -17,13 +17,6 @@ var fileOut chan *File
1717
var fileRm chan string
1818
var newNode chan string
1919

20-
type File struct {
21-
Name string
22-
Hash string
23-
Time time.Time
24-
Content []byte
25-
}
26-
2720
func startDirSync() {
2821
newNode = make(chan string, 4)
2922
fileIn = make(chan *File, 4)
@@ -34,28 +27,28 @@ func startDirSync() {
3427
OnEvent("*", "fileRemoved", onFileRemoved)
3528
OnEvent("*", "connected", onNewNode)
3629

37-
if config.Scripts != "" {
38-
DirSync(config.Scripts)
30+
if config.Directory != "" {
31+
DirSync(config.Directory)
3932
}
4033
}
4134

4235
func onNewNode(message *Message) {
43-
if string(message.Payload) == Self() {
36+
if message.Payload == Self() {
4437
return
4538
}
46-
log.Println("Sending files cause of new node", string(message.Payload))
47-
newNode <- string(message.Payload)
39+
log.Println("Sending files cause of new node", message.Payload)
40+
newNode <- message.Payload
4841
}
4942

5043
func onFileRemoved(message *Message) {
5144
if message.From == Self() {
5245
return
5346
}
54-
fileRm <- string(message.Payload)
47+
fileRm <- message.Payload
5548
}
5649

5750
func onFileChanged(message *Message) {
58-
parts := strings.SplitN(string(message.Payload), ",", 3)
51+
parts := strings.SplitN(message.Payload, ",", 3)
5952

6053
fileName := parts[0]
6154

@@ -109,10 +102,14 @@ func ScanDir(registeredFiles map[string]*File, got map[string]bool, dirName stri
109102

110103
if _, ok := registeredFiles[fileName]; !ok {
111104
log.Println("Sending new file", fileName)
112-
fileOut <- &file
105+
go func() {
106+
fileOut <- &file
107+
}()
113108
} else if registeredFiles[fileName].Hash != hash {
114109
log.Println("Sending changed file", fileName)
115-
fileOut <- &file
110+
go func() {
111+
fileOut <- &file
112+
}()
116113
}
117114

118115
registeredFiles[fileName] = &file
@@ -122,7 +119,7 @@ func ScanDir(registeredFiles map[string]*File, got map[string]bool, dirName stri
122119
for name, _ := range registeredFiles {
123120
if _, ok := got[name]; !ok {
124121
log.Println("Removed file", name)
125-
SendEvent("fileRemoved", []byte(name))
122+
SendEvent("fileRemoved", name)
126123
fileRm <- name
127124
}
128125
}
@@ -145,19 +142,21 @@ func DirSync(dirName string) {
145142
case <-newNode:
146143
log.Println("new node, sending files")
147144
for _, file := range registeredFiles {
148-
fileOut <- file
145+
go func() {
146+
fileOut <- file
147+
}()
149148
}
150149
case file := <-fileIn:
151150
log.Println("Got file", file.Name)
152151
if _, ok := registeredFiles[file.Name]; !ok {
153152
log.Println("New file", file.Name)
154-
ioutil.WriteFile(file.Name, []byte(file.Content), 0755)
153+
ioutil.WriteFile(file.Name, file.Content, 0755)
155154
registeredFiles[file.Name] = file
156155
} else if registeredFiles[file.Name].Hash != file.Hash {
157156
log.Println("Changed file", file.Name)
158157
if registeredFiles[file.Name].Time.Before(file.Time) {
159158
log.Println("Their file is newer", file.Name)
160-
ioutil.WriteFile(file.Name, []byte(file.Content), 0755)
159+
ioutil.WriteFile(file.Name, file.Content, 0755)
161160
registeredFiles[file.Name] = file
162161
} else {
163162
log.Println("Our", file.Name, "is older")
@@ -171,7 +170,7 @@ func DirSync(dirName string) {
171170
case file := <-fileOut:
172171
log.Println("Sending out file", file.Name)
173172
time, _ := file.Time.MarshalText()
174-
SendEventC("fileSync", []byte(fmt.Sprintf("%s,%s,%s", file.Name, time, base64.StdEncoding.EncodeToString(file.Content))), true)
173+
SendEventC("fileSync", fmt.Sprintf("%s,%s,%s", file.Name, time, base64.StdEncoding.EncodeToString(file.Content)), true)
175174
case <-ticker.C:
176175
got := make(map[string]bool)
177176
ScanDir(registeredFiles, got, dirName)

0 commit comments

Comments
 (0)