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

Unified Diff: third_party/mojo/src/mojo/public/go/bindings/stub.go

Issue 975973002: Update mojo sdk to rev f68e697e389943cd9bf9652397312280e96b127a (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: shake fist at msvc Created 5 years, 10 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: third_party/mojo/src/mojo/public/go/bindings/stub.go
diff --git a/third_party/mojo/src/mojo/public/go/bindings/stub.go b/third_party/mojo/src/mojo/public/go/bindings/stub.go
new file mode 100644
index 0000000000000000000000000000000000000000..b2b3120a08c0fe68c979b9657d4e95b399f9a755
--- /dev/null
+++ b/third_party/mojo/src/mojo/public/go/bindings/stub.go
@@ -0,0 +1,47 @@
+// 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 bindings
+
+// MessageReceiver can receive |Message| objects.
+type MessageReceiver interface {
+ // Accept receives a |Message|. Returns a error if the message was not
+ // handled.
+ Accept(message *Message) error
+}
+
+// Stub is a base implementation of Stub. Stubs receives messages from message
+// pipe, deserialize the payload and call the appropriate method in the
+// implementation. If the method returns result, the stub serializes the
+// response and sends it back.
+type Stub struct {
+ connector *Connector
+ receiver MessageReceiver
+}
+
+// NewStub returns a new Stub instance using provided |Connector| to send and
+// receive messages. Incoming messages are handled by the provided |receiver|.
+func NewStub(connector *Connector, receiver MessageReceiver) *Stub {
+ return &Stub{connector, receiver}
+}
+
+// ServeRequest synchronously serves one request from the message pipe: the
+// |Stub| waits on its underlying message pipe for a message and handles it.
+// Can be called from multiple goroutines. Each calling goroutine will receive
+// a different message or an error.
+func (s *Stub) ServeRequest() error {
+ message, err := s.connector.ReadMessage()
+ if err != nil {
+ return err
+ }
+ return s.receiver.Accept(message)
+}
+
+// Close immediately closes the |Stub| and its underlying message pipe. If the
+// |Stub| is waiting on its message pipe handle the wait process is interrupted.
+// All goroutines trying to serve will start returning errors as the underlying
+// message pipe becomes invalid.
+func (s *Stub) Close() {
+ s.connector.Close()
+}
« no previous file with comments | « third_party/mojo/src/mojo/public/go/bindings/router.go ('k') | third_party/mojo/src/mojo/public/go/bindings/util.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698