Home | History | Annotate | Download | only in channel_transport
      1 /*
      2  *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_MANAGER_WRAPPER_H_
     12 #define WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_MANAGER_WRAPPER_H_
     13 
     14 #include "webrtc/system_wrappers/include/static_instance.h"
     15 #include "webrtc/typedefs.h"
     16 
     17 namespace webrtc {
     18 namespace test {
     19 
     20 class UdpSocketWrapper;
     21 
     22 class UdpSocketManager
     23 {
     24 public:
     25     static UdpSocketManager* Create(const int32_t id,
     26                                     uint8_t& numOfWorkThreads);
     27     static void Return();
     28 
     29     // Initializes the socket manager. Returns true if the manager wasn't
     30     // already initialized.
     31     virtual bool Init(int32_t id, uint8_t& numOfWorkThreads) = 0;
     32 
     33     // Start listening to sockets that have been registered via the
     34     // AddSocket(..) API.
     35     virtual bool Start() = 0;
     36     // Stop listening to sockets.
     37     virtual bool Stop() = 0;
     38 
     39     virtual uint8_t WorkThreads() const;
     40 
     41     // Register a socket with the socket manager.
     42     virtual bool AddSocket(UdpSocketWrapper* s) = 0;
     43     // Unregister a socket from the manager.
     44     virtual bool RemoveSocket(UdpSocketWrapper* s) = 0;
     45 
     46 protected:
     47     UdpSocketManager();
     48     virtual ~UdpSocketManager() {}
     49 
     50     uint8_t _numOfWorkThreads;
     51 
     52     // Factory method.
     53     static UdpSocketManager* CreateInstance();
     54 
     55 private:
     56     // Friend function to allow the UDP destructor to be accessed from the
     57     // instance template.
     58     friend UdpSocketManager* webrtc::GetStaticInstance<UdpSocketManager>(
     59         CountOperation count_operation);
     60 
     61     static UdpSocketManager* StaticInstance(
     62         CountOperation count_operation,
     63         const int32_t id,
     64         uint8_t& numOfWorkThreads);
     65 };
     66 
     67 }  // namespace test
     68 }  // namespace webrtc
     69 
     70 #endif  // WEBRTC_TEST_CHANNEL_TRANSPORT_UDP_SOCKET_MANAGER_WRAPPER_H_
     71