-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.go
71 lines (64 loc) · 1.61 KB
/
utils.go
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
package main
import (
"os"
"sync"
"runtime"
"os/signal"
"io/ioutil"
"path/filepath"
ma "github.com/multiformats/go-multiaddr"
)
type makeEndpoints func() (daemon, client ma.Multiaddr, cleanup func(), err error)
func createTempDir() (string, string, func(), error) {
root := os.TempDir()
dir, err := ioutil.TempDir(root, "p2pd")
if err != nil {
return "", "", nil, err
}
daemonPath := filepath.Join(dir, "daemon.sock")
clientPath := filepath.Join(dir, "client.sock")
closer := func() {
os.RemoveAll(dir)
}
return daemonPath, clientPath, closer, nil
}
func makeTcpLocalhostEndpoints() (daemon, client ma.Multiaddr, cleanup func(), err error) {
daemon, err = ma.NewMultiaddr("/ip4/127.0.0.1/tcp/0")
if err != nil {
return nil, nil, nil, err
}
client, err = ma.NewMultiaddr("/ip4/127.0.0.1/tcp/0")
if err != nil {
return nil, nil, nil, err
}
cleanup = func() {}
return daemon, client, cleanup, nil
}
func makeUnixEndpoints() (daemon, client ma.Multiaddr, cleanup func(), err error) {
daemonPath, clientPath, cleanup, err := createTempDir()
if err != nil {
return nil, nil, nil, err
}
daemon, _ = ma.NewComponent("unix", daemonPath)
client, _ = ma.NewComponent("unix", clientPath)
return
}
func getEndpointsMaker() makeEndpoints {
if runtime.GOOS == "windows" {
return makeTcpLocalhostEndpoints
} else {
return makeUnixEndpoints
}
}
func chanwait() {
var end_waiter sync.WaitGroup
end_waiter.Add(1)
var signal_channel chan os.Signal
signal_channel = make(chan os.Signal, 1)
signal.Notify(signal_channel, os.Interrupt)
go func() {
<-signal_channel
end_waiter.Done()
}()
end_waiter.Wait()
}