chat: Change many uses of v23.NewServer to use xrpc.New*Server instead.

This is designed to reduce boilerplate and prove out the xrpc interface.
All but about 10 uses were replaced.

Some of the remaining calls are more complicated because the services/dispatchers
currently take the serving address as a construction parameter.

MultiPart: 5/9

Change-Id: Ief85e100ff5c3e9a7968e4473c5882d802393043
diff --git a/clients/shell/go/src/v.io/x/chat/channel.go b/clients/shell/go/src/v.io/x/chat/channel.go
index d14ea07..203df6e 100644
--- a/clients/shell/go/src/v.io/x/chat/channel.go
+++ b/clients/shell/go/src/v.io/x/chat/channel.go
@@ -42,6 +42,7 @@
 	"v.io/v23/security/access"
 	mt "v.io/v23/services/mounttable"
 	"v.io/x/chat/vdl"
+	"v.io/x/ref/lib/xrpc"
 	_ "v.io/x/ref/runtime/factories/roaming"
 )
 
@@ -104,7 +105,7 @@
 	// The implementation of the chat server.
 	chatServerMethods *chatServerMethods
 	// The chat server.
-	server rpc.Server
+	server *xrpc.Server
 	// Channel that emits incoming messages.
 	messages chan message
 	// Cached list of channel members.
@@ -200,32 +201,17 @@
 
 // join starts a chat server and mounts it in the channel path.
 func (cr *channel) join() error {
-	// Create a new server.
-	s, err := v23.NewServer(cr.ctx)
-	if err != nil {
-		return err
-	}
-
-	// Start listening for incoming connections.
-	if _, err := s.Listen(v23.GetListenSpec(cr.ctx)); err != nil {
-		return err
-	}
-
 	// Get a locked name in the mounttable that we can mount our server on.
 	name, err := cr.getLockedName()
 	if err != nil {
 		return err
 	}
-
 	// Serve the chat server on the locked name.
 	serverChat := vdl.ChatServer(cr.chatServerMethods)
-	if err := s.Serve(name, serverChat, security.AllowEveryone()); err != nil {
-		return err
-	}
 
-	cr.server = s
-
-	return nil
+	// Create a new server.
+	cr.server, err = xrpc.NewServer(cr.ctx, name, serverChat, security.AllowEveryone())
+	return err
 }
 
 // leave stops the chat server and removes our mounted name from the
diff --git a/clients/shell/go/src/v.io/x/chat/channel_test.go b/clients/shell/go/src/v.io/x/chat/channel_test.go
index 7bdb1de..120eda1 100644
--- a/clients/shell/go/src/v.io/x/chat/channel_test.go
+++ b/clients/shell/go/src/v.io/x/chat/channel_test.go
@@ -14,6 +14,7 @@
 	"v.io/v23/context"
 	"v.io/v23/options"
 
+	"v.io/x/ref/lib/xrpc"
 	"v.io/x/ref/services/mounttable/mounttablelib"
 	"v.io/x/ref/test"
 	"v.io/x/ref/test/modules"
@@ -25,24 +26,16 @@
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 
-	lspec := v23.GetListenSpec(ctx)
-	server, err := v23.NewServer(ctx, options.ServesMountTable(true))
-	if err != nil {
-		return fmt.Errorf("root failed: %v", err)
-	}
 	mt, err := mounttablelib.NewMountTableDispatcher("", "", "mounttable")
 	if err != nil {
 		return fmt.Errorf("mounttable.NewMountTableDispatcher failed: %s", err)
 	}
-	eps, err := server.Listen(lspec)
+	server, err := xrpc.NewDispatchingServer(ctx, "", mt, options.ServesMountTable(true))
 	if err != nil {
-		return fmt.Errorf("server.Listen failed: %s", err)
-	}
-	if err := server.ServeDispatcher("", mt); err != nil {
-		return fmt.Errorf("root failed: %s", err)
+		return fmt.Errorf("root failed: %v", err)
 	}
 	fmt.Fprintf(env.Stdout, "PID=%d\n", os.Getpid())
-	for _, ep := range eps {
+	for _, ep := range server.Status().Endpoints {
 		fmt.Fprintf(env.Stdout, "MT_NAME=%s\n", ep.Name())
 	}
 	modules.WaitForEOF(env.Stdin)