// OnConnect implements the ConnectionHandler interface. func (k *KeybaseDaemonRPC) OnConnect(ctx context.Context, conn *rpc.Connection, rawClient rpc.GenericClient, server *rpc.Server) error { protocols := []rpc.Protocol{ keybase1.LogUiProtocol(daemonLogUI{k.daemonLog}), keybase1.IdentifyUiProtocol(daemonIdentifyUI{k.daemonLog}), keybase1.NotifySessionProtocol(k), keybase1.NotifyUsersProtocol(k), } for _, p := range protocols { err := server.Register(p) if err != nil { if _, ok := err.(rpc.AlreadyRegisteredError); !ok { return err } } } // Using conn.GetClient() here would cause problematic // recursion. c := keybase1.NotifyCtlClient{Cli: rawClient} err := c.SetNotifications(ctx, keybase1.NotificationChannels{ Session: true, Users: true, }) if err != nil { return err } // Introduce ourselves. TODO: move this to SharedKeybaseConnection // somehow? configClient := keybase1.ConfigClient{Cli: rawClient} err = configClient.HelloIAm(ctx, keybase1.ClientDetails{ Pid: os.Getpid(), ClientType: keybase1.ClientType_KBFS, Argv: os.Args, Version: VersionString(), }) if err != nil { return err } return nil }
func NewLogUIProtocol() rpc.Protocol { return keybase1.LogUiProtocol(&LogUIServer{G.Log}) }