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
|
package main
import (
"flag"
"globster/hub"
"globster/userlist"
"blicky.net/tanja"
"log"
"net"
)
func listen(node *tanja.Node, path string) (e error) {
var addr *net.UnixAddr
if addr, e = net.ResolveUnixAddr("unix", path); e != nil {
return
}
var lst *net.UnixListener
if lst, e = net.ListenUnix("unix", addr); e != nil {
return
}
i := 0
for {
var conn net.Conn
if conn, e = lst.Accept(); e != nil {
return
}
i++
log.Printf("%03d: Incoming connection on UNIX socket.", i)
lnk := node.Link(conn)
go func(i int) {
err := <-lnk.Start()
if err == nil {
log.Printf("%03d: Disconnected.", i)
} else {
log.Printf("%03d: %s", i, err)
}
}(i)
}
return
}
func main() {
path := flag.String("l", "/tmp/globster.sock", "Path to the UNIX listen socket.")
flag.Parse()
n := tanja.NewNode()
hub := hub.New(n)
go hub.Run()
userlist := userlist.New(n)
go userlist.Run()
if err := listen(n, *path); err != nil {
log.Fatalf("Error listening on UNIX socket: %s", err)
}
}
|