summaryrefslogtreecommitdiff
path: root/src/globster/globster.go
blob: b511e5bf9a6aabb0ad7018ca76311d0af500e011 (plain)
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)
	}
}