The C++ framework for developing highly scalable, high performance servers on Windows platforms.

Protected destructors on abstract base classes
[Programming Concepts]

Collaboration diagram for Protected destructors on abstract base classes:

Detailed Description

Many of the abstract base classes that we use as interfaces have protected destructors rather than the more usual public virtual destructors. This is because we never delete an instance of the object through a pointer to the interface concerned and by making the destructor protected we make such deletion impossible). See here for more details.

This section contains links to the code that implements this concept.


Classes

class  IAcceptRuntimes
class  IEventSinkCallback
 A callback interface that is used by CCLREventSink to report events. More...
class  IHandleExceptions
class  IHostPolicyManagerCallback
 A callback interface that is used by CHostPolicyManager to report events. More...
class  IConfiguration
 Provides an interface to a tree structured configuration such as something that could easily be modelled by an XML file or the registry. More...
class  IIndexedOpaqueUserData
 Provides an interface that allows access to 'opaque user data' that is data that is stored as either a void * or an unsigned long and that is basically anything that the user wants to store. The data is stored by index and an implementation of this class is free to store the data in any way that it sees fit. An index represents a single storage location so a call to GetUserPointer() and GetUserData() on the same index will return the same data, just viewed in different ways. More...
class  ILogMessages
 An interface for logging messages. These can be debug trace messages or more structured logging. The messages are sent to a log, which can be pretty much anything. More...
class  IManageThreadPoolThreads
 An interface to allow a thread pool to monitor the actions of the threads that it manages. More...
class  IMonitorCallbackTimerQueue
 An interface to allow a class to monitor the operation of an instance of CCallbackTimerQueue. More...
class  IMonitorThreadedCallbackTimerQueue
 An interface to allow a class to monitor the operation of an instance of CCallbackTimerQueue. More...
class  IMonitorThreadPool
 An interface to allow a class to monitor an instance of a thread pool. The interface assumes that threads in the pool go through the following life-cycle: created, begin processing, end processing, destroyed, and that they may optionally (hopefully not) generate errors. Obviously a thread is likely to begin and end processing several work items before it is destroyed. The methods on this interface can be called either from any thread and may not be called from the thread pool thread itself. Incrementing a counter when OnThreadCreated() is called and decrementing it when OnThreadDestroyed() is called will give you a count of the number of threads that are in existence at any one time. A corresponding counter that is incremented in OnThreadBeginProcessing() and decremented in OnThreadEndProcessing() is called will give a count of the threads that are currently in use. More...
class  IProvideRandomBytes
class  IProvideRandomNumbers
class  IProvideSystemTime
 An interface that provides access to the operating system GetSystemTime() call. Code can access this service via an instance to IProvideSystemTime so that the provider can be replaced (usually for testing purposes). See here for more details. More...
class  IProvideUserData
 An interface that works with IIndexedOpaqueUserData to allow users of a class that provides opaque user data to request a named 'slot' for their data. Generally what happens is that an allocator will expose this interface and the allocated items will expose the interface to access the user data. Users of the allocator can request named slots of user data before allocating the first item and then all items are created with the required amount of user data space. More...
class  IQueueTimers
 An interface representing a class that manages timers that implement the IQueueTimers::Timer interface and and which have their IQueueTimers::Timer::OnTimer() method called when the the timer expires. See here for more details. More...
class  IRunnable
 An interface to code that can be Run() on a thread. Usually passed to the CThread constructor. More...
class  IThreadPoolWorkerThreadCallback
 An interface to an object that acts as a worker thread for a work queue. The life-cycle of an object that implements this interface is as follows: one call to Initialise() (and, if it returns true), 0 or many calls to Process() and then one call to Shutdown(). More...
class  IThreadPoolWorkerThreadFactory
 An interface to create instances of IThreadPoolWorkerThreadCallback. Usually passed to the CThreadPool constructor. More...
class  IWaitable
 An interface to code that can be waited for, either via the methods on the interface or by passing a handle to one of the Wait Functions. More...
class  CRandomByteProvider
class  IAddBuffersToPool
class  IAllocateBuffer
class  IAllocateBufferHandles
 An interface to a class that allocates instances of CBufferHandle which can be attached to an instance of an IBuffer. More...
class  IAllocateBuffers
 An interface to a class that allocates instances of IBuffer of a fixed size. Each instance of IBuffer has opaque user data associated with it and so this allocator derives from IProvideUserData to allow the user to request user data "slots" from the allocator; you must request all of your slots before calling Allocate() for the first time. More...
class  IAssociateDeviceWithIOSubSystem
class  IAsyncIOStream
 An interface onto an asynchrnonous I/O stream. Calls to Write() are not guaranteed to have completed when the call returns and calls to Read() simply request that a Read() happens and do not, in any way, result in incoming data being placed in the provided buffer before the call returns. Objects that implement this interface must provide another way to provide the caller with the data that is read from the stream when the read actually completes. More...
class  IBufferBase
 An interface to a I/O buffer (with a partially refactored name!). Initially IBuffer and IBufferBase was one class, it was split to make it easier to mock and in an attempt to remove some of the socket stuff. Classes that implement this interface represent a byte buffer that can be used for overlapped I/O and that consist of a contiguous array of bytes and an insertion point which moves along the buffer as data is added to it. More work needs to be done. More...
class  IBufferChain
class  ICloseableOutputStream
 An extension to IOutputStream that allows the user to call Close() on it. More...
class  IDispatchToWorkerThread
class  IHandleFileCreationFailure
class  IHandler
 An interface that represents code that handles operations on I/O buffers. More...
class  IInputStream
 An interface to an input stream (which may be sync or async). More...
class  IIOPool
 An interface to an I/O thread pool (usually based on an I/O completion port) that can have operations on buffers and handlers dispatched to it (either directly or as a result of an I/O completion packet being generated by some asynchronous I/O event) and that handles these events on one of the threads in the pool. More...
class  IIterateableBufferChain
class  ILimitPendingWrites
 An interface to an object that manages the number of writes currently in progress and that can disallow any more write requests being made. Call CanWrite() when you wish to issue a new write request and when it returns you can issue your write and call WriteComplete() when the write is complete. More...
class  IManageBufferHandleLifeCycle
 A helper interface to remove a friend relationship between buffers and their allocators... More...
class  IManageBufferLifeCycle
 A helper interface to remove a friend relationship between buffers and their allocators... More...
class  IManageWorkerThreads
class  IMonitorAsyncFileReader
 An interface to allow a class to monitor an instance of an async file reader. More...
class  IMonitorAsyncFileWriter
 An interface to allow a class to monitor an instance of an async file writer. More...
class  IMonitorBufferAllocation
 An interface to allow a class to monitor the operation of a class that allocates buffers. The interface assumes that buffers go through the following life-cycle: created, allocated, released, destroyed. Allocators that pool buffers can allow a buffer to be created once and then allocated and released several times before being deleted. Incrementing a counter when OnBufferCreated() is called and decrementing it when OnBufferDestroyed() is called will give you a count of the number of buffers that are in existence at any one time. A corresponding counter that is incremented in OnBufferAllocated() and decremented when OnBufferReleased() is called will give a count of the buffers that are currently in use. More...
class  IOutputStream
 An interface to an output stream (which may be sync or async). More...
class  IPoolBuffers
class  IProvideWorkItems
 A restricted interface onto a queue of work items (such as an I/O completion port, perhaps). More...
class  IStream
 An interface to an stream... More...
class  IUnsortedBufferChain
class  CNullBufferPool
class  IInstallPerformanceMonitorCounters
 An interface to an object that can install performance counters on a system. See here for more details. More...
class  IAcceptDatagramSocketConnectionFilters
 This interface works in conjunction with IFilterDatagramSocketConnections and allows datagram filters to be added to a class that can use them. More...
class  IAcceptStreamSocketConnectionFilters
 This interface works in conjunction with IFilterStreamSocketConnections and allows stream filters to be added to a class that can use them. More...
class  IAddress
 An interface that represents a Winsock address. This interface only deals with the data that's available from the underlying address; none of the 'meta-data' related to the address type is available; see IFullAddress for that stuff. More...
class  IAddressRef
 A reference counted IAddress. More...
class  IAddressType
 An interface that provides meta-data information about the type of a Winsock Address. More...
class  IAllocateDatagramServerSockets
 An interface for allocating IPoolableDatagramServerSocket. More...
class  IAllocateDatagramSockets
 An interface for allocating IPoolableDatagramSocket. More...
class  IAllocatePoolableSockets
 An interface for managing IPoolableSocket. More...
class  IAllocateSequencedStreamSockets
 An interface for allocating instances of IPoolableStreamSocket that support sequencing of reads and writes. Before you allocate the first socket you can request that the socket manage buffer sequencing counters for you by requesting a "sequnce id". This id can then be passed to IManageStreamSocketConnectionFilters::ReadCompleted() and IManageStreamSocketConnectionFilters::RequestWrite() calls to have the buffer sequenced using the specified sequnce id. Sockets allocated with this interface automatically support sequencing of the 'primary' byte stream. More...
class  IAllocateStreamSockets
 An interface for allocating instances of IPoolableStreamSocket. More...
class  IAsyncSocket
 An interface to the functionality common to all asynchronous sockets. The "Try" functions add to the functions from JetByteTools::IO::IAsyncIOStream by adding versions that return false on failure rather than by throwing an exception. More...
class  ICreateFilteredStreamSocketConnections
 An interface used to create outgoing stream socket connections. More...
class  ICreateStreamSocketConnections
 An interface used to create outgoing stream socket connections. More...
class  IDatagramSendSocket
class  IDatagramServerSocket
 This interface provides an equivalent interface to the one provided by IAsyncSocket for IDatagramSocket and IStreamSocket. It does not feature the ability to issue Read() calls as the sockets derived from this interface are purely disconnected, datagram, server sockets; i.e. they're how you send a datagram back to whoever sent you the datagram that has just arrived. IDatagramSocket supports a pseudo connected interface where you can issue Read() calls ... More...
class  IDatagramServerSocketCallback
 The socket server callback interface is composed from more specific interfaces using inheritance. This is purely to allow the framework to work in terms of the narrowest interface internally and does not affect the user of the code. This is, effectively, the first interface that the user would wish to implement. More...
class  IDatagramServerSocketConnectionManager
 An interface that is used to allow a socket to communicate with the connection manager that manages it. This interface is supplied to the socket in the call to Attach(). More...
class  IDatagramServerSocketConnectionManagerIO
class  IDatagramServerSocketEx
 A socket interface that adds functionality that is used internally by the socket server classe. More...
class  IDatagramSocket
 This interface adds datagram socket specific functionality to the IAsyncSocket interface. Note that instances of IDatagramSocket support a pseudo connected interface where you can issues Read() calls and RecvFrom() any address. IDatagramServerSocket presents a much more restricted interface intended for use from "pure" datagram servers. More...
class  IDatagramSocketCallback
 The connection manager and socket server callback interfaces are composed from more specific interfaces using inheritance. This is purely to allow the framework to work in terms of the narrowest interface internally and does not affect the user of the code. Effectively the first interface that the user would wish to implement is at the IXXXConnectionManagerCallback level and above. More...
class  IDatagramSocketConnectionManager
 An interface that is used to allow a socket to communicate with the connection manager that manages it. This interface is supplied to the socket in the call to Attach(). More...
class  IDatagramSocketConnectionManagerCallback
 The connection manager and socket server callback interfaces are composed from more specific interfaces using inheritance. This is purely to allow the framework to work in terms of the narrowest interface internally and does not affect the user of the code. Effectively the first interface that the user would wish to implement is at the IXXXConnectionManagerCallback level and above. More...
class  IDatagramSocketConnectionManagerIO
class  IDatagramSocketEx
 A socket interface that adds functionality that is used internally by the connection manager and socket server classes. More...
class  IDatagramSocketServerCallback
 The socket server callback interface is composed from more specific interfaces using inheritance. This is purely to allow the framework to work in terms of the narrowest interface internally and does not affect the user of the code. This is, effectively, the first interface that the user would wish to implement. More...
class  IFilterableDatagramSocket
 An interface which adds functionality that is useful when filtering a connection. More...
class  IFilterableStreamSocket
 An interface which adds functionality that is useful when filtering a connection. More...
class  IFilterDatagramSocketConnections
 An interface for objects that wish to filter datagrams. An instance of this interface can be added to a CDatagramSocketConnectionManager as a filter by calling AddConnectionFilter(). Filters are called in order to process calls with requests being called from "top to bottom" and completions being called from "bottom to top". For example, if we call AddConnectionFilter() with filter A and then with filter B and then make a write request the data would be processed first by filter B and then by filter A (user -> B -> A -> wire). When a read completes the data is processed first by filter A and then by filter B (wire -> A -> B -> user). Each filter can manipulate the contents of the datagram flow and may or may not pass calls onto filters below it in the chain. Thus a filter can swallow requests from layers above it by not passing them on and can also generate requests of its own. A filter is initialised once by the connection manager before it is used and during this initialisation it is given a management interface that can be used to generate new read and write events. More...
class  IFilterStreamSocketConnections
 An interface for objects that wish to filter a byte stream. An instance of this interface can be added to a CStreamSocketConnectionManager as a filter by calling AddConnectionFilter(). Filters are called in order to process calls with requests being called from "top to bottom" and completions being called from "bottom to top". For example, if we call AddConnectionFilter() with filter A and then with filter B and then make a write request the data would be processed first by filter B and then by filter A (user -> B -> A -> wire). When a read completes the data is processed first by filter A and then by filter B (wire -> A -> B -> user). Each filter can manipulate the connection and data flow and may or may not pass calls onto filters below it in the chain. Thus a filter can swallow requests from layers above it by not passing them on and can also generate requests of its own. A filter is initialised once by the connection manager before it is used and during this initialisation it is given a management interface that can be used to generate new read and write events. More...
class  IIPAddress
 An interface that represents an IP address which knows about its port. More...
class  ILimitConnections
 An interface to an object that manages the number of connections currently in progress and that can disallow any more connections being made. Call CanCreateConnection() when you wish to create a new connection and if it returns true then you can create your connection and call ReleaseConnection() when the connection terminates. If it returns false then you should not create your connection. More...
class  IMaintainStreamSocketConnections
 An interface used to create and maintain outgoing stream socket connections. More...
class  IManageDatagramSocketConnectionFilters
 This interface works in conjunction with IFilterDatagramSocketConnections to allow datagram filters to issue new read and write events. Any filter that either can swallow data buffers (by not passing on calls to the next filter in the chain) or that generates data buffers (passing data to the next filter in the chain when that data wasn't generated by a previous layer in the chain) should always use this interface to pass data buffers to the next layer in the chain. Failure to do so will affect any additional filter processing that may (or may not) be occurring. More...
class  IManageNamedServers
class  IManageStreamSocketConnectionFilters
 This interface works in conjunction with IFilterStreamSocketConnections to allow stream filters to issue new read and write events. Any filter that either can swallow data buffers (by not passing on calls to the next filter in the chain) or that generates data buffers (passing data to the next filter in the chain when that data wasn't generated by a previous layer in the chain) should always use this interface to pass data buffers to the next layer in the chain. Failure to do so will affect any buffer sequencing that may (or may not) be occurring. A filter can specify that its own sequence counter is used by requesting one from the socket allocator and then by passing the sequence id to the relevant calls. If a filter only ever injects new data into a stream then it can use the socket's own sequence counter and calls to the methods that don't take an explicit sequence id. More...
class  IMonitorDatagramSocketFlowControl
class  IMonitorSocketAllocation
 An interface to allow a class to monitor the operation of a class that allocates sockets. The design of the interface assumes that sockets go through the following life-cycle: created, allocated, released, destroyed. Allocators that pool sockets can allow a socket to be created once and then allocated and released several times before being deleted. Incrementing a counter when OnSocketCreated() is called and decrementing it when OnSocketDestroyed() is called will give you a count of the number of sockets that are in existence at any one time. A corresponding counter that is incremented in OnSocketAttached() and decremented in OnSocketReleased() is called will give a count of the sockets that are currently in use. More...
class  IMonitorStreamSocketFlowControl
 An interface to allow a class to monitor the operation of a class that implements flow control for stream socket connections. The design of the interface assumes that only buffers that are affected by flow control are noted by the monitor. The effects of flow control on a buffer that is being sent on a connection are as follows: delayed, sent or discarded. A buffer that is delayed is being held for a while until it can be sent. A buffer that has been sent is a buffer that was previously delayed and that has now been written to the connection. A buffer that is discarded can either be a new buffer that is being discarded rather than delayed or an existing delayed buffer that will now never be sent. Incrementing a counter when OnBufferDelayed() is called and decrementing it when OnBufferSent() is called, OR when 'wasDelayed' is true and OnBufferDiscarded() is called will give you a count of buffers that are currently delayed. Incrementing a counter when OnBufferDiscarded() is called will give you a count of all the buffers that were discarded. You can use the 'id' value as a way of maintaining these counts on a per-connection basis. The Id that you return from a call to OnConnectionEstablished() will be passed with every call to the other monitor functions. Note that if all you require is a unique id per connection then you can simply cast the address of the supplied socket to a ConnectionId in OnConnectionEstablished() and return that. More...
class  IPoolableDatagramServerSocket
 An interface that exists purely to tie together the poolable nature of a socket and the datagram server socket nature of a socket into a poolable datagram server socket. The CDatagramServerSocketAllocator object works in terms of this interface. More...
class  IPoolableDatagramSocket
 An interface that exists purely to tie together the poolable nature of a socket and the datagram socket nature of a socket into a poolable datagram socket. The CDatagramSocketAllocator object works in terms of this interface. More...
class  IPoolableStreamSocket
 An interface that exists purely to tie together the poolable nature of a socket and the stream socket nature of a socket into a poolable stream socket. The CStreamSocketAllocator and CSequencedStreamSocketAllocator objects work in terms of this interface. More...
class  IReleaseCreatedConnections
class  IRenderAddresses
 An interface to an object that can take an instance of IAddress and produce a readable textual representation of that address. So, for example, it could takean IPv4 address and render it in standard dotted IP format xxx.xxx.xxx.xxx, etc. More...
class  ISocketCallback
 The connection manager and socket server callback interfaces are composed from more specific interfaces using inheritance. This is purely to allow the framework to work in terms of the narrowest interface internally and does not affect the user of the code. Effectively the first interface that the user would wish to implement is at the IXXXConnectionManagerCallback level and above. More...
class  IStreamSocket
 This interface adds stream socket specific functionality to the IAsyncSocket interface. As you can see that isn't much. This is the interface that you will interact with to access socket functionality when you write a client or server as this is the interface to the socket connection that you are passed when callback events occur on a connection. More...
class  IStreamSocketCallback
 The connection manager and socket server callback interfaces are composed from more specific interfaces using inheritance. This is purely to allow the framework to work in terms of the narrowest interface internally and does not affect the user of the code. Effectively the first interface that the user would wish to implement is at the IXXXConnectionManagerCallback level and above. More...
class  IStreamSocketConnectionManager
 An interface that is used to allow a socket to communicate with the connection manager that manages it. This interface is supplied to the socket in the call to Attach(). More...
class  IStreamSocketConnectionManagerCallback
 The connection manager and socket server callback interfaces are composed from more specific interfaces using inheritance. This is purely to allow the framework to work in terms of the narrowest interface internally and does not affect the user of the code. Effectively the first interface that the user would wish to implement is at the IXXXConnectionManagerCallback level and above. More...
class  IStreamSocketConnectionManagerIO
class  IStreamSocketEx
 A socket interface that adds functionality that is used internally by the connection manager and socket server classes. More...
class  IStreamSocketServerCallback
 The connection manager and socket server callback interfaces are composed from more specific interfaces using inheritance. This is purely to allow the framework to work in terms of the narrowest interface internally and does not affect the user of the code. Effectively the first interface that the user would wish to implement is at the IXXXConnectionManagerCallback level and above. More...
class  IStreamSocketServerExCallback
 The connection manager and socket server callback interfaces are composed from more specific interfaces using inheritance. This is purely to allow the framework to work in terms of the narrowest interface internally and does not affect the user of the code. Effectively the first interface that the user would wish to implement is at the IXXXConnectionManagerCallback level and above. More...
class  ISupportMulticast
 The interface used to support multicasting. More...
class  IWritableAddress
 An interface which represents an address that can be written to and updated. A typical way that this interface would be used is like this: getsockname(socket, address.GetStorage(), address.GetSize()). More...
class  IWritableAddressRef
 A reference counted IWritableAddress. More...
class  IAssignProcessesToJobs
 Provides an interface that can assign a process to a job. More...
class  ICreateMiniDumps
 Provides an interface that can create a mini dump of a process. More...
class  IHandleJobEvents
 An interface to allow a class to handle the events that are generated by operating system Job objects. More...
class  IKernelObjectName
 An interface that represents a name in the kernel object namespace See here for more details. More...
class  IManageEnvironmentVariables
 An interface for manipulating operating system environment variables. More...
class  IManageJobEvents
 An interface to a class that manages the asynchronous events generated by an operating system job object and routes them to the supplied handler interface. More...
class  IMonitorJobs
 An interface to allow a class to monitor the events that are generated by instances of CJob. More...
class  IProvideEnvironmentBlock
 An interface for providing operating system environment variable blocks as detailed here. More...

Defines

#define JETBYTE_IO_IBUFFER_ALIGNMENT_REQUIREMENT   16
 An interface to a buffer used for socket I/O (this, probably should be refactored and split into two interfaces, one derived from the other and one of them should live in the Socket Tools library).


Define Documentation

#define JETBYTE_IO_IBUFFER_ALIGNMENT_REQUIREMENT   16

An interface to a buffer used for socket I/O (this, probably should be refactored and split into two interfaces, one derived from the other and one of them should live in the Socket Tools library).


Generated on Sun Sep 12 19:06:48 2021 for The Server Framework - v7.4 by doxygen 1.5.3