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}',
+ ]),
+ ],
+ },
+ ],
+}