Communications Toolkit™

Communications Toolkit™

Cross platform object serialization, network, and design patterns

The Communications Toolkit consists of Standards Toolkit plus six class libraries. You can install and use any combination of these libraries independently from another provided you have a version of the ANSI/ISO C++ Standard Library:

  • Streaming Toolkit™ Library – A high-performance implementation of the Universal Streaming Service. The only non-intrusive solution for persisting objects across heterogeneous networks!
  • Network Toolkit™ Library – A complete set of object-oriented classes for TCP/IP-based socket programming. Also includes portable interfaces for network information services and I/O multiplexing.
  • Pipe Toolkit™ Library – A portable interface for pipe communication, a popular protocol on Microsoft Windows-based operating systems.
  • File Toolkit™ Library – The most complete class library for platform-independent manipulation of files, paths, directories, and record locks.
  • Security Toolkit™ Library – A set of object-oriented classes for manipulating users and groups.
  • IO Toolkit™ Library – A collection of common I/O-related classes that are used by other Recursion Software components.
  • Framework Toolkit™ Library – A collection of common design pattern implementations that are used as the framework for which to build robust, scalable applications.

Streaming Toolkit™ Library

Streaming Toolkit is a complete implementation of the Universal Streaming Service, a non-intrusive mechanism for facilitating platform‚ independent object persistence and network transport of objects. Unlike many proprietary solutions, Streaming Toolkit does not require invasive modifications to class definitions or alterations to inheritance structures. This library is designed for use with your own objects, other vendors’ objects, or any STL container. It is the only serialization mechanism available today with complete C++ advanced language feature support, including full serialization of advanced templates.

Streaming Toolkit contains a set of classes that provide:

  • Object persistence and transport – Easily store and retrieve objects to and from files, as well as send objects across TCP sockets or other devices to another computer.
  • IOStream device interfaces – Use familiar text-streaming interfaces and manipulators on a variety of I/O devices, such as TCP sockets.

Streaming Toolkit was carefully designed to provide the following benefits:

  • Ease of Use – All stream interfaces in Streaming Toolkit are based on well-known semantics using operator>> and operator<<.
  • Non-intrusive Design – Streaming Toolkit is designed to provide object persistence and transport without requiring class modifications. Using Streaming Toolkit requires no inheritance and, in most cases, requires no code changes at all.
  • Full Language Support – Streaming Toolkit fully supports all advanced language features including templates, multiple inheritance, and virtual base classes.
  • Cross-platform Support – Streaming Toolkit uses the Network Data Representation (NDR) protocol by default to ensure data is portable between different operating systems. Issues such as byte ordering or data size are correctly managed.
  • Protocol Independence – The powerful layered architecture in Streaming Toolkit allows users to easily change protocols. In addition to NDR, native and ASCII protocols are provided; users can easily extend this to include their own variants.
  • Vendor Neutrality – Due to its non-intrusive design, Streaming Toolkit can stream any of your own objects, any standard library container or string, and any of several third-party vendor objects with the same mechanism.
  • Device Independence – The Streaming Toolkit architecture allows easy adaptation to support any number of devices. All Recursion Software devices are automatically supported, including files, pipes, and sockets. Customers have readily adapted Streaming Toolkit to OLE and a variety of other transport mechanisms.

Network Toolkit™ Library

Network Toolkit is a complete, cross-platform C++ encapsulation of TCP and UDP socket programming interfaces. Sockets are bi-directional communication mechanisms providing communication between processes, even if they are on different machines. Designed for distributed applications, Network Toolkit provides all the mechanisms necessary for creating robust, high-performance systems:

  • TCP sockets – Reliable, connection-based transport typically used in distributed or Internet-based applications.
  • UDP sockets – Efficient, packet-based transport commonly used in real-time and broadcast-oriented applications.
  • I/O multiplexing – Sophisticated socket manager that manages multiple sockets simultaneously by selecting the socket that needs attention.
  • Information interfaces – Information retrieval from accessible hosts, services, and networks.

Network Toolkit was carefully designed to provide the following important benefits:

  • Availability – With the rapid growth of the Internet, the Internet Protocol is one of the fastest growing, generally available transport protocols in existence. This makes Network Toolkit a generally available solution for network programming today and long into the future.
  • Ease of Use – Socket programming using C interfaces is difficult to learn and use safely. Network Toolkit provides a C++ hierarchy that makes creating and using TCP and UDP sockets simple and intuitive.
  • Comprehensive Interfaces – Network Toolkit interfaces provide simplicity for common use, but not at the expense of low level control. Network Toolkit provides access to all the underlying socket control parameters and allows for late binding. Full database interfaces for host, network, and service data are provided.
  • Portable Object Transport, with Streaming Toolkit – Combining the Streaming Toolkit with Network Toolkit allows portable object transport between machines and intuitive IOStream interfaces to sockets.

Pipe Toolkit™ Library

Pipe Toolkit provides a portable interface for pipe communications. These object-oriented interfaces are designed to allow developers to upgrade to TCP/IP-based protocols with minimal code modifications:

  • Client – Connects to named pipe services for transaction processing.
  • Server – Establishes a named pipe service and accepts connection requests.

Pipe Toolkit offers the following benefits to programmers:

  • Portability – Though pipes behave somewhat differently among operating systems, Pipe Toolkit brings together the common behaviors in a way that allows portable source code development for pipe-based communications.
  • Consistency – For pipe programmers, a consistent C++ interface makes programs easy to understand and maintain.
  • Simplicity – Creating and connecting to pipes using Pipe Toolkit is easy and intuitive.
  • Streaming Toolkit – When used in conjunction with Streaming Toolkit, programmers can use textual IOStream interfaces for pipe communication, as well as binary object transport across pipes.

File Toolkit™ Library

File Toolkit provides a portable interface to paths, files, and directories. Problems such as manipulating path names in C++ using strings or accessing a list of files in a directory are simplified with these intuitive C++ interfaces:

  • Paths and files – Cross-platform file and directory path representation and a complete portable encapsulation of a file’s interface.
  • File lock – Interfaces for locking all or part of a file for protection.
  • Directory – A cross-platform C++ interface to directories and folders.

File Toolkit offers the following benefits to programmers:

  • Portability – File Toolkit provides completely portable interfaces. These interfaces address the inconsistent implementation of path names, file handles, file locking, and the creation and use of directories across operating systems.
  • Simplicity – Problems such as manipulating path names in C++, accessing a list of files in a directory, or simply determining if a file exists are simplified with the intuitive C++ interfaces found in File Toolkit.

Security Toolkit™ Library

Security Toolkit provides the ability to manipulate users and groups in an object-oriented way, since most entities, such as files and IPC mechanisms, are owned by a particular user and have an associated group:

IO Toolkit Library

IO Toolkit is a collection of common I/O-related classes that are used by other Recursion Software components, including File Toolkit, Network Toolkit, Pipe Toolkit, Streaming Toolkit, Security Toolkit, and Unix Toolkit for UNIX. The functionality provided by IO Toolkit can be classified into the following sections:

  • Device Adapters – Lightweight mechanisms that provide a uniform interface for manipulating and communicating with I/O devices.
  • Device Cache – A specialized device adapter that provides read/write caching capabilities to other device adapters.
  • Common I/O Behaviors – Mechanism to access/modify the behavior of I/O devices.

Framework Toolkit™ Library

Framework Toolkit is a collection of common design pattern implementations that are used as the framework for which to build robust, scalable applications. The functionality provided by Framework Toolkit can be classified into the following sections:

  • Singleton – Templatized Singleton pattern that adorns other objects, without requiring modification to the original class.
  • Observer – Templatized pattern class that decouples the responsibility of an object to send change notification to its dependents and to update them automatically.
  • Execution Concurrency Strategies – Patterns that define a concurrency policy for executing a runnable object. Three types of strategies are provided and include the same thread execution, new thread execution, and thread pool execution concurrency strategy.
  • Acceptor/Connector – Patterns that decouple the responsibility of connection establishment and service initialization in a network application from the processing that the application is designed to perform.
  • Dispatcher – Pattern that provides a framework for demultiplexing events and dispatching the appropriate service handlers.