1// Copyright (c) 2013 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 ECHO_SERVER_H_
6#define ECHO_SERVER_H_
7
8#include "ppapi/cpp/instance.h"
9#include "ppapi/cpp/tcp_socket.h"
10#include "ppapi/utility/completion_callback_factory.h"
11
12static const int kBufferSize = 1024;
13
14// Simple "echo" server based on a listening pp::TCPSocket.
15// This server handles just one connection at a time and will
16// echo back whatever bytes get sent to it.
17class EchoServer {
18 public:
19  EchoServer(pp::Instance* instance, uint16_t port)
20    : instance_(instance),
21      callback_factory_(this) {
22    Start(port);
23  }
24
25 protected:
26  void Start(uint16_t port);
27
28  // Callback functions
29  void OnBindCompletion(int32_t result);
30  void OnListenCompletion(int32_t result);
31  void OnAcceptCompletion(int32_t result, pp::TCPSocket socket);
32  void OnReadCompletion(int32_t result);
33  void OnWriteCompletion(int32_t result);
34
35  void TryRead();
36  void TryAccept();
37
38  pp::Instance* instance_;
39  pp::CompletionCallbackFactory<EchoServer> callback_factory_;
40  pp::TCPSocket listening_socket_;
41  pp::TCPSocket incoming_socket_;
42
43  char receive_buffer_[kBufferSize];
44};
45
46#endif  // ECHO_SERVER_H_
47