| // Binary vsyncd is the sync daemon. |
| package main |
| |
| import ( |
| "flag" |
| "os" |
| |
| "veyron/runtimes/google/vsync" |
| vflag "veyron/security/flag" |
| |
| "veyron2/rt" |
| "veyron2/vlog" |
| ) |
| |
| func main() { |
| peerEndpoints := flag.String("peers", "", |
| "comma separated list of endpoints of the vsync peer") |
| peerDeviceIDs := flag.String("peerids", "", |
| "comma separated list of deviceids of the vsync peer") |
| devid := flag.String("devid", "", "Device ID") |
| storePath := flag.String("store", os.TempDir(), "path to store files") |
| vstoreEndpoint := flag.String("vstore", "", "endpoint of the local Veyron store") |
| // TODO(rthellend): Remove the address flag when the config manager is working. |
| address := flag.String("address", ":0", "address to listen on") |
| syncTick := flag.Duration("synctick", 0, "clock tick duration for sync with a peer (e.g. 10s)") |
| |
| flag.Parse() |
| if *devid == "" { |
| vlog.Fatalf("syncd:: --devid needs to be specified") |
| } |
| |
| // Create the runtime. |
| r := rt.Init() |
| defer r.Cleanup() |
| |
| // Create a new server instance. |
| s, err := r.NewServer() |
| if err != nil { |
| vlog.Fatalf("syncd:: failure creating server: err %v", err) |
| } |
| |
| // Create a new SyncService. |
| syncd := vsync.NewSyncd(*peerEndpoints, *peerDeviceIDs, *devid, *storePath, *vstoreEndpoint, *syncTick) |
| syncService := vsync.NewServerSync(syncd) |
| |
| // Create the authorizer. |
| auth := vflag.NewAuthorizerOrDie() |
| |
| // Register the service. |
| syncDisp := vsync.NewSyncDispatcher(syncService, auth) |
| |
| // Create an endpoint and begin listening. |
| if endpoint, err := s.Listen("tcp", *address); err == nil { |
| vlog.VI(0).Infof("syncd:: Listening now at %v", endpoint) |
| } else { |
| vlog.Fatalf("syncd:: error listening to service: err %v", err) |
| } |
| |
| // Publish the vsync service. |
| name := "global/vsync/" + *devid |
| if err := s.Serve(name, syncDisp); err != nil { |
| vlog.Fatalf("syncd: error publishing service: err %v", err) |
| } |
| |
| // Wait forever. |
| done := make(chan struct{}) |
| <-done |
| } |