blob: dc413e88ced3927774bae15b50cae033b01b5248 [file] [log] [blame]
Jiri Simsa5293dcb2014-05-10 09:56:38 -07001// Binary signallingserver is a simple implementation of the BoxSignalling
2// rendezvous service.
3package main
4
5import (
6 "log"
7
8 "veyron/examples/boxes"
9 "veyron/lib/signals"
10
11 "veyron2/ipc"
12 "veyron2/rt"
13)
14
15const (
16 signallingServiceName = "signalling"
17 signallingServicePort = ":8509"
18)
19
20type boxAppEndpoint string
21
Matt Rosencrantzf5afcaf2014-06-02 11:31:22 -070022func (b *boxAppEndpoint) Add(_ ipc.ServerContext, Endpoint string) (err error) {
Jiri Simsa5293dcb2014-05-10 09:56:38 -070023 *b = boxAppEndpoint(Endpoint)
24 log.Printf("Added endpoint %v to signalling service", *b)
25 return nil
26}
27
Matt Rosencrantzf5afcaf2014-06-02 11:31:22 -070028func (b *boxAppEndpoint) Get(_ ipc.ServerContext) (Endpoint string, err error) {
Jiri Simsa5293dcb2014-05-10 09:56:38 -070029 log.Printf("Returning endpoints:%v from signalling service", *b)
30 return string(*b), nil
31}
32
33func main() {
34 r := rt.Init()
35
36 // Create a new server instance.
37 s, err := r.NewServer()
38 if err != nil {
39 log.Fatal("failed NewServer: ", err)
40 }
41
42 var boxApp boxAppEndpoint
43 srv := boxes.NewServerBoxSignalling(&boxApp)
44 if err := s.Register(signallingServiceName, ipc.SoloDispatcher(srv, nil)); err != nil {
45 log.Fatal("failed to Register signalling service: ", err)
46 }
47
48 // Create an endpoint and begin listening.
49 if endPt, err := s.Listen("tcp", signallingServicePort); err == nil {
50 log.Printf("SignallingService listening at: %v\n", endPt)
51 } else {
52 log.Fatal("failed Listen: ", err)
53 }
54
55 if err := s.Publish("/" + signallingServiceName); err != nil {
56 log.Fatal("failed Publish:", err)
57 }
58
59 <-signals.ShutdownOnSignals()
60}