Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(610)

Unified Diff: examples/go/echo_client.go

Issue 1008543002: go: echo app (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: examples/go/echo_client.go
diff --git a/examples/go/echo_client.go b/examples/go/echo_client.go
new file mode 100644
index 0000000000000000000000000000000000000000..a67e1d0267e7540f25d08d754d2dfda902b7bac1
--- /dev/null
+++ b/examples/go/echo_client.go
@@ -0,0 +1,90 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package main
+
+import (
+ "fmt"
+ "log"
+
+ "code.google.com/p/go.mobile/app"
+
+ "mojo/public/go/bindings"
+ "mojo/public/go/system"
+
+ "examples/echo/echo"
+ "mojo/public/interfaces/application/application"
+ "mojo/public/interfaces/application/service_provider"
+ "mojo/public/interfaces/application/shell"
+)
+
+//#include "mojo/public/c/system/types.h"
+import "C"
+
+// AppImpl implements mojo interface application.
+type AppImpl struct {
+ shell *shell.ShellProxy
+ serviceProvider *service_provider.ServiceProviderProxy
+ echo *echo.EchoProxy
+}
+
+func (impl *AppImpl) Initialize(inShell shell.ShellPointer, inArgs *[]string, inUrl string) error {
+ impl.shell = shell.NewShellProxy(inShell, bindings.GetAsyncWaiter())
+ // Connect to another mojo application.
+ request, pointer := service_provider.CreateMessagePipeForServiceProvider()
+ if err := impl.shell.ConnectToApplication("mojo:echo_server", &request, nil); err != nil {
+ return err
+ }
+ impl.serviceProvider = service_provider.NewServiceProviderProxy(pointer, bindings.GetAsyncWaiter())
+ // Connect to service.
+ echoRequest, echoPointer := echo.CreateMessagePipeForEcho()
+ if err := impl.serviceProvider.ConnectToService("mojo::examples::Echo", echoRequest.PassMessagePipe()); err != nil {
+ return err
+ }
+ impl.echo = echo.NewEchoProxy(echoPointer, bindings.GetAsyncWaiter())
+ // Send and receive echo request.
+ response, err := impl.echo.EchoString(bindings.StringPointer("Hello Go world!"))
+ if response != nil {
+ fmt.Println(*response)
jamesr 2015/03/12 22:26:06 question: why does this fmt.Println()...
+ } else {
+ return fmt.Errorf("nil echo response")
+ }
+ return err
+}
+
+func (impl *AppImpl) AcceptConnection(inRequestorUrl string, inServices *service_provider.ServiceProviderRequest, inExposedServices *service_provider.ServiceProviderPointer, inResolvedUrl string) error {
+ if inServices != nil {
+ inServices.Close()
+ }
+ if inExposedServices != nil {
+ inExposedServices.Close()
+ }
+ return nil
+}
+
+func (impl *AppImpl) RequestQuit() error {
+ impl.echo.Close_proxy()
+ impl.serviceProvider.Close_proxy()
+ impl.shell.Close_proxy()
+ return fmt.Errorf("closed")
+}
+
+//export MojoMain
+func MojoMain(handle C.MojoHandle) C.MojoResult {
+ appHandle := system.GetCore().AcquireNativeHandle(system.MojoHandle(handle)).ToMessagePipeHandle()
+ appRequest := application.ApplicationRequest{bindings.NewMessagePipeHandleOwner(appHandle)}
+ stub := application.NewApplicationStub(appRequest, &AppImpl{}, bindings.GetAsyncWaiter())
+ for {
+ if err := stub.ServeRequest(); err != nil {
+ log.Println(err)
+ stub.Close()
+ break
+ }
+ }
+ return C.MOJO_RESULT_OK
+}
+
+func main() {
+ app.Run(app.Callbacks{})
+}
« no previous file with comments | « examples/go/README.txt ('k') | examples/go/echo_server.go » ('j') | examples/go/echo_server.go » ('J')

Powered by Google App Engine
This is Rietveld 408576698