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 SOCKET_ECHO_SERVER_H_ 6 #define SOCKET_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 12 static 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. 17 class EchoServer { 18 public: EchoServer(pp::Instance * instance,uint16_t port)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 // SOCKET_ECHO_SERVER_H_ 47