Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Loading...
Searching...
No Matches
basic_port.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2019 Roc Streaming authors
3 *
4 * This Source Code Form is subject to the terms of the Mozilla Public
5 * License, v. 2.0. If a copy of the MPL was not distributed with this
6 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 */
8
9//! @file roc_netio/target_libuv/roc_netio/basic_port.h
10//! @brief Base class for ports.
11
12#ifndef ROC_NETIO_BASIC_PORT_H_
13#define ROC_NETIO_BASIC_PORT_H_
14
16#include "roc_core/iarena.h"
17#include "roc_core/list_node.h"
22
23namespace roc {
24namespace netio {
25
26//! Base class for ports.
27//!
28//! Port is a transport-level endpoint, sending or receiving data from remote
29//! peer, like UDP sender or receiver, TCP listening socket, or TCP connection.
30//!
31//! The following rules must be followed:
32//!
33//! - if you called open(), you're responsible for calling async_close(),
34//! even if open() failed
35//! - if async_close() returned AsyncOp_Completed, the port was closed
36//! immediately, and you can now destroy it
37//! - if async_close() returned AsyncOp_Started, you should wait until
38//! close handler callback is invoked before destroying port
39class BasicPort : public core::RefCounted<BasicPort, core::ArenaAllocation>,
40 public core::ListNode<> {
41public:
42 //! Initialize.
44
45 //! Destroy.
46 virtual ~BasicPort();
47
48 //! Get a human-readable port description.
49 //!
50 //! @note
51 //! Port descriptor may change during initial configuration.
52 const char* descriptor() const;
53
54 //! Open port.
55 //!
56 //! @remarks
57 //! Should be called from the event loop thread.
58 virtual bool open() = 0;
59
60 //! Asynchronous close.
61 //!
62 //! @remarks
63 //! Should be called from the event loop thread.
64 //!
65 //! @returns
66 //! status code indicating whether operation was completed immediately or
67 //! is scheduled for asynchronous execution
69 void* handler_arg) = 0;
70
71protected:
72 //! Format descriptor and store into internal buffer.
74
75 //! Implementation of descriptor formatting.
77
78private:
79 enum { MaxDescriptorLen = address::SocketAddr::MaxStrLen * 2 + 48 };
80
81 char descriptor_[MaxDescriptorLen];
82};
83
84} // namespace netio
85} // namespace roc
86
87#endif // ROC_NETIO_BASIC_PORT_H_
Memory arena interface.
Definition iarena.h:23
Base class for List element.
Definition list_node.h:48
Base class for object with reference counter.
Definition ref_counted.h:40
const char * descriptor() const
Get a human-readable port description.
virtual bool open()=0
Open port.
virtual AsyncOperationStatus async_close(ICloseHandler &handler, void *handler_arg)=0
Asynchronous close.
virtual void format_descriptor(core::StringBuilder &b)=0
Implementation of descriptor formatting.
BasicPort(core::IArena &)
Initialize.
void update_descriptor()
Format descriptor and store into internal buffer.
virtual ~BasicPort()
Destroy.
Close handler interface.
Memory arena interface.
Close handler interface.
Linked list node.
Network I/O.
AsyncOperationStatus
Asynchronous operation status.
Root namespace.
Asynchronous operation status.
Base class for object with reference counter.
Socket address.
String builder.