1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_SYNC_DISPATCHER_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_SYNC_DISPATCHER_H_
8 #include "mojo/public/cpp/bindings/lib/filter_chain.h"
9 #include "mojo/public/cpp/bindings/lib/message_header_validator.h"
10 #include "mojo/public/cpp/system/core.h"
14 class MessageReceiver
;
16 // Waits for one message to arrive on the message pipe, and dispatch it to the
17 // receiver. Returns true on success, false on failure.
19 // NOTE: The message hasn't been validated and may be malformed!
20 bool WaitForMessageAndDispatch(MessagePipeHandle handle
,
21 mojo::MessageReceiver
* receiver
);
23 template<typename Interface
> class SyncDispatcher
{
25 SyncDispatcher(ScopedMessagePipeHandle message_pipe
, Interface
* sink
)
26 : message_pipe_(message_pipe
.Pass()) {
29 filters_
.Append
<internal::MessageHeaderValidator
>();
30 filters_
.Append
<typename
Interface::RequestValidator_
>();
31 filters_
.SetSink(&stub_
);
34 bool WaitAndDispatchOneMessage() {
35 return WaitForMessageAndDispatch(message_pipe_
.get(),
40 ScopedMessagePipeHandle message_pipe_
;
41 typename
Interface::Stub_ stub_
;
42 internal::FilterChain filters_
;
47 #endif // MOJO_PUBLIC_CPP_BINDINGS_SYNC_DISPATCHER_H_