web_socket_write_queue.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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.
4
5#ifndef MOJO_SERVICES_PUBLIC_CPP_NETWORK_WEB_SOCKET_WRITE_QUEUE_H_
6#define MOJO_SERVICES_PUBLIC_CPP_NETWORK_WEB_SOCKET_WRITE_QUEUE_H_
7
8#include "base/callback.h"
9#include "base/memory/scoped_vector.h"
10#include "mojo/common/handle_watcher.h"
11#include "mojo/public/cpp/system/data_pipe.h"
12
13namespace mojo {
14
15// This class simplifies the handling of multiple Writes on a DataPipe. It
16// writes each chunk all at once (or waits until the pipe is ready before
17// writing), calling the callback when finished. Callbacks are owned by this
18// class, and are guaranteed not to be called after this class is destroyed.
19// See also: WebSocketReadQueue
20class WebSocketWriteQueue {
21 public:
22  WebSocketWriteQueue(DataPipeProducerHandle handle);
23  ~WebSocketWriteQueue();
24
25  void Write(const char* data,
26             uint32_t num_bytes,
27             base::Callback<void(const char*)> callback);
28
29 private:
30  struct Operation;
31
32  MojoResult TryToWrite();
33  void Wait();
34  void OnHandleReady(MojoResult result);
35
36  DataPipeProducerHandle handle_;
37  common::HandleWatcher handle_watcher_;
38  ScopedVector<Operation> queue_;
39  bool is_waiting_;
40};
41
42}  // namespace mojo
43
44#endif  // MOJO_SERVICES_PUBLIC_CPP_NETWORK_WEB_SOCKET_WRITE_QUEUE_H_
45