Got everything to build.

Change-Id: Id495fe9e50c2ea14c95b1863d852a536013367a8
diff --git a/Makefile b/Makefile
index 0a60354..fc0ecee 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,7 @@
 
 MOJO_SHELL_FLAGS := $(MOJO_SHELL_FLAGS) \
 	--config-alias DISCOVERY_DIR=$(PWD) \
-	--config-alias DISCOVERY_BUILD_DIR=$(DISCOVYER_BUILD_DIR)
+	--config-alias DISCOVERY_BUILD_DIR=$(DISCOVERY_BUILD_DIR)
 
 all: $(DISCOVERY_BUILD_DIR)/discovery.mojo
 
@@ -22,4 +22,18 @@
 
 
 $(DISCOVERY_BUILD_DIR)/discovery.mojo: $(V23_GO_FILES) $(MOJO_SHARED_LIB) go/src/mojom/vanadium/discovery/discovery.mojom.go | mojo-env-check
-	$(call MOGO_BUILD,vanadium/discovery,$@)
\ No newline at end of file
+	$(call MOGO_BUILD,vanadium/discovery,$@)
+
+$(DISCOVERY_BUILD_DIR)/advertiser.mojo: $(V23_GO_FILES) $(MOJO_SHARED_LIB) go/src/mojom/vanadium/discovery/discovery.mojom.go | mojo-env-check
+	$(call MOGO_BUILD,examples/advertiser,$@)
+
+$(DISCOVERY_BUILD_DIR)/scanner.mojo: $(V23_GO_FILES) $(MOJO_SHARED_LIB) go/src/mojom/vanadium/discovery/discovery.mojom.go | mojo-env-check
+	$(call MOGO_BUILD,examples/scanner,$@)
+
+run-advertiser: $(DISCOVERY_BUILD_DIR)/advertiser.mojo $(DISCOVERY_BUILD_DIR)/discovery.mojo
+	sudo $(MOJO_DIR)/src/mojo/devtools/common/mojo_run --config-file $(PWD)/mojoconfig $(MOJO_SHELL_FLAGS) $(MOJO_ANDROID_FLAGS) https://mojo.v.io/advertiser.mojo \
+	--args-for="https://mojo.v.io/discovery.mojo host1"
+
+run-scanner: $(DISCOVERY_BUILD_DIR)/scanner.mojo $(DISCOVERY_BUILD_DIR)/discovery.mojo
+	sudo $(MOJO_DIR)/src/mojo/devtools/common/mojo_run --config-file $(PWD)/mojoconfig $(MOJO_SHELL_FLAGS) $(MOJO_ANDROID_FLAGS) https://mojo.v.io/scanner.mojo \
+	--args-for="https://mojo.v.io/discovery.mojo host2"
\ No newline at end of file
diff --git a/go/src/examples/advertiser/advertiser.go b/go/src/examples/advertiser/advertiser.go
new file mode 100644
index 0000000..bd05870
--- /dev/null
+++ b/go/src/examples/advertiser/advertiser.go
@@ -0,0 +1,56 @@
+package main
+
+import (
+	"log"
+
+	"mojo/public/go/application"
+	"mojo/public/go/system"
+	"mojo/public/go/bindings"
+
+	"mojom/vanadium/discovery"
+)
+
+//#include "mojo/public/c/system/types.h"
+import "C"
+
+type advDelegate struct {
+	id int32
+	proxy *discovery.Discoverer_Proxy
+}
+
+func (a *advDelegate) Initialize(ctx application.Context) {
+	req, ptr := discovery.CreateMessagePipeForDiscoverer()
+	ctx.ConnectToApplication("https://mojo.v.io/discovery.mojo").ConnectToService(&req)
+	a.proxy = discovery.NewDiscovererProxy(ptr, bindings.GetAsyncWaiter())
+	s := discovery.Service{
+		InterfaceName: "v.io/discovery.T",
+		Addrs: []string{"localhost:1000", "localhost:2000"},
+		Attrs: map[string]string{ "foo" : "bar"},
+	}
+	id, e1, e2 := a.proxy.Advertise(s, nil)
+	if e1 != nil  || e2 != nil{
+		log.Println("Error occurred", e1, e2)
+		return
+	}
+
+	a.id = id
+}
+
+
+func (*advDelegate) AcceptConnection(connection *application.Connection) {
+	connection.Close()
+}
+
+func (s *advDelegate) Quit() {
+	s.proxy.StopAdvertising(s.id)
+}
+
+
+//export MojoMain
+func MojoMain(handle C.MojoHandle) C.MojoResult {
+	application.Run(&advDelegate{}, system.MojoHandle(handle))
+	return C.MOJO_RESULT_OK
+}
+
+func main() {
+}
diff --git a/go/src/examples/scanner/scanner.go b/go/src/examples/scanner/scanner.go
new file mode 100644
index 0000000..6c749fe
--- /dev/null
+++ b/go/src/examples/scanner/scanner.go
@@ -0,0 +1,78 @@
+package main
+
+import (
+	"log"
+
+	"mojo/public/go/application"
+	"mojo/public/go/system"
+	"mojo/public/go/bindings"
+
+	"mojom/vanadium/discovery"
+)
+
+//#include "mojo/public/c/system/types.h"
+import "C"
+
+type handler struct {}
+
+func (*handler) Found(s discovery.Service) error {
+	log.Println("Found a new service", s)
+	return nil
+}
+
+func (*handler) Lost(s discovery.Service) error {
+	log.Println("Lost a new service", s)
+	return nil
+}
+
+type scannerDelegate struct {
+	id int32
+	proxy *discovery.Discoverer_Proxy
+	stub *bindings.Stub
+}
+
+func (s *scannerDelegate) Initialize(ctx application.Context) {
+	req, ptr := discovery.CreateMessagePipeForDiscoverer()
+	ctx.ConnectToApplication("https://mojo.v.io/discovery.mojo").ConnectToService(&req)
+	s.proxy = discovery.NewDiscovererProxy(ptr, bindings.GetAsyncWaiter())
+	scanReq, scanPtr := discovery.CreateMessagePipeForScanHandler()
+	s.stub = discovery.NewScanHandlerStub(scanReq, &handler{}, bindings.GetAsyncWaiter())
+	id, e1, e2 := s.proxy.Scan("v.io/discovery.T", scanPtr)
+	if e1 != nil  || e2 != nil{
+		log.Println("Error occurred", e1, e2)
+		return
+	}
+
+	s.id = id
+	go func() {
+		for {
+			if err := s.stub.ServeRequest(); err != nil {
+				connectionError, ok := err.(*bindings.ConnectionError)
+				if !ok || !connectionError.Closed() {
+					log.Println(err)
+				}
+				break
+			}
+		}
+	}()
+}
+
+
+func (*scannerDelegate) AcceptConnection(connection *application.Connection) {
+	connection.Close()
+}
+
+func (s *scannerDelegate) Quit() {
+	s.proxy.StopScan(s.id)
+	s.stub.Close()
+}
+
+
+//export MojoMain
+func MojoMain(handle C.MojoHandle) C.MojoResult {
+	application.Run(&scannerDelegate{}, system.MojoHandle(handle))
+	return C.MOJO_RESULT_OK
+}
+
+func main() {
+}
diff --git a/go/src/vanadium/discovery/discovery.go b/go/src/vanadium/discovery/discovery.go
index db5e423..599f02b 100644
--- a/go/src/vanadium/discovery/discovery.go
+++ b/go/src/vanadium/discovery/discovery.go
@@ -1,4 +1,4 @@
-package discovery
+package main
 
 import (
 	"log"
@@ -13,6 +13,8 @@
 	"v.io/x/ref/lib/discovery/plugins/ble"
 	"v.io/x/ref/lib/discovery/plugins/mdns"
 
+	_ "v.io/x/ref/runtime/factories/generic"
+
 	mojom "mojom/vanadium/discovery"
 
 	"mojo/public/go/application"
diff --git a/mojoconfig b/mojoconfig
new file mode 100644
index 0000000..9e2c0d5
--- /dev/null
+++ b/mojoconfig
@@ -0,0 +1,14 @@
+# Derived from $MOJO_DIR/mojoconfig.
+
+{
+  'dev_servers': [
+    {
+      'host': 'https://mojo.v.io/',
+      'mappings': [
+        ('', [
+          '@{DISCOVERY_BUILD_DIR}',
+        ]),
+      ],
+    },
+  ],
+}