| Index: remoting/protocol/host_message_dispatcher.h
|
| diff --git a/remoting/protocol/host_message_dispatcher.h b/remoting/protocol/host_message_dispatcher.h
|
| index aab7fbf530b084025196dacfd84a7ecf95c1c609..23dc55af06a92dfe2fa7f4e49d0f339d4804f173 100644
|
| --- a/remoting/protocol/host_message_dispatcher.h
|
| +++ b/remoting/protocol/host_message_dispatcher.h
|
| @@ -9,58 +9,73 @@
|
| #include "base/ref_counted.h"
|
| #include "base/scoped_ptr.h"
|
|
|
| -namespace base {
|
| -class MessageLoopProxy;
|
| -} // namespace base
|
| -
|
| namespace remoting {
|
|
|
| -class ChromotingClientMessage;
|
| -class ChromotingConnection;
|
| -class EventStreamReader;
|
| +class ChromotocolConnection;
|
| +class ClientControlMessage;
|
| +class ClientEventMessage;
|
| class HostControlMessageHandler;
|
| class HostEventMessageHandler;
|
| +class MessageReader;
|
|
|
| // A message dispatcher used to listen for messages received in
|
| -// ChromotingConnection. It dispatches messages to the corresponding
|
| +// ChromotocolConnection. It dispatches messages to the corresponding
|
| // handler.
|
| //
|
| // Internally it contains an EventStreamReader that decodes data on
|
| // communications channels into protocol buffer messages.
|
| -// EventStreamReader is registered with ChromotingConnection given to it.
|
| +// EventStreamReader is registered with ChromotocolConnection given to it.
|
| //
|
| // Object of this class is owned by ChromotingHost to dispatch messages
|
| // to itself.
|
| -class HostMessageDispatcher {
|
| +class HostMessageDispatcher :
|
| + public base::RefCountedThreadSafe<HostMessageDispatcher> {
|
| public:
|
| - // Construct a message dispatcher that dispatches messages received
|
| - // in ChromotingConnection.
|
| - HostMessageDispatcher(base::MessageLoopProxy* message_loop_proxy,
|
| - ChromotingConnection* connection,
|
| - HostControlMessageHandler* control_message_handler,
|
| - HostEventMessageHandler* event_message_handler);
|
| -
|
| + // Construct a message dispatcher.
|
| + HostMessageDispatcher();
|
| virtual ~HostMessageDispatcher();
|
|
|
| + // Initialize the message dispatcher with the given connection and
|
| + // message handlers.
|
| + // Return true if initalization was successful.
|
| + bool Initialize(ChromotocolConnection* connection,
|
| + HostControlMessageHandler* control_message_handler,
|
| + HostEventMessageHandler* event_message_handler);
|
| +
|
| private:
|
| + // A single protobuf can contain multiple messages that will be handled by
|
| + // different message handlers. We use this wrapper to ensure that the
|
| + // protobuf is only deleted after all the handlers have finished executing.
|
| + template <typename T>
|
| + class RefCountedMessage : public base::RefCounted<RefCountedMessage<T> > {
|
| + public:
|
| + RefCountedMessage(T* message) : message_(message) { }
|
| +
|
| + T* message() { return message_.get(); }
|
| +
|
| + private:
|
| + scoped_ptr<T> message_;
|
| + };
|
| +
|
| // This method is called by |control_channel_reader_| when a control
|
| // message is received.
|
| - void OnControlMessageReceived(ChromotingClientMessage* message);
|
| + void OnControlMessageReceived(ClientControlMessage* message);
|
|
|
| // This method is called by |event_channel_reader_| when a event
|
| // message is received.
|
| - void OnEventMessageReceived(ChromotingClientMessage* message);
|
| + void OnEventMessageReceived(ClientEventMessage* message);
|
|
|
| - // Message loop to dispatch the messages.
|
| - scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
|
| + // Dummy methods to destroy messages.
|
| + template <class T>
|
| + static void DeleteMessage(scoped_refptr<T> message) { }
|
|
|
| - // EventStreamReader that runs on the control channel. It runs a loop
|
| - // that parses data on the channel and then delegate the message to this
|
| + // MessageReader that runs on the control channel. It runs a loop
|
| + // that parses data on the channel and then delegates the message to this
|
| // class.
|
| - scoped_ptr<EventStreamReader> control_channel_reader_;
|
| + scoped_ptr<MessageReader> control_message_reader_;
|
|
|
| - // EventStreamReader that runs on the event channel.
|
| - scoped_ptr<EventStreamReader> event_channel_reader_;
|
| + // MessageReader that runs on the event channel.
|
| + scoped_ptr<MessageReader> event_message_reader_;
|
|
|
| // Event handlers for control channel and event channel respectively.
|
| // Method calls to these objects are made on the message loop given.
|
|
|