Skip to content

Commit 97adf5a

Browse files
Merge pull request #47 from connectivecpp/develop
Develop
2 parents 8f8dfb1 + eb3fdfa commit 97adf5a

File tree

94 files changed

+8337
-4277
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

94 files changed

+8337
-4277
lines changed

.travis.yml

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
2+
dist: bionic
3+
language: cpp
4+
cache: ccache
5+
6+
common_sources: &all_sources
7+
- ubuntu-toolchain-r-test
8+
- llvm-toolchain-trusty
9+
- llvm-toolchain-trusty-3.9
10+
- llvm-toolchain-trusty-4.0
11+
- llvm-toolchain-xenial-5.0
12+
- llvm-toolchain-xenial-6.0
13+
14+
matrix:
15+
include:
16+
17+
# 1/ Linux Clang Builds
18+
19+
- os: linux
20+
compiler: clang
21+
addons:
22+
apt:
23+
sources: *all_sources
24+
packages: ['clang-3.9']
25+
env: COMPILER='clang++-3.9'
26+
27+
- os: linux
28+
compiler: clang
29+
addons:
30+
apt:
31+
sources: *all_sources
32+
packages: ['clang-4.0']
33+
env: COMPILER='clang++-4.0'
34+
35+
- os: linux
36+
dist: bionic
37+
compiler: clang
38+
addons:
39+
apt:
40+
sources: *all_sources
41+
packages: ['clang-5.0']
42+
env: COMPILER='clang++-5.0'
43+
44+
- os: linux
45+
dist: bionic
46+
compiler: clang
47+
addons:
48+
apt:
49+
sources: *all_sources
50+
packages: ['clang-6.0']
51+
env: COMPILER='clang++-6.0'
52+
53+
# 2/ Linux GCC Builds
54+
- os: linux
55+
compiler: gcc
56+
addons:
57+
apt:
58+
sources: *all_sources
59+
packages: ['g++-5']
60+
env: COMPILER='g++-5'
61+
62+
- os: linux
63+
compiler: gcc
64+
addons: &gcc6
65+
apt:
66+
sources: *all_sources
67+
packages: ['g++-6']
68+
env: COMPILER='g++-6'
69+
70+
- os: linux
71+
compiler: gcc
72+
addons: &gcc7
73+
apt:
74+
sources: *all_sources
75+
packages: ['g++-7']
76+
env: COMPILER='g++-7'
77+
78+
- os: linux
79+
compiler: gcc
80+
addons: &gcc8
81+
apt:
82+
sources: *all_sources
83+
packages: ['g++-8']
84+
env: COMPILER='g++-8'
85+
86+
# 3b/ Linux C++14 Clang builds
87+
# Note that we need newer libstdc++ for C++14 support
88+
- os: linux
89+
compiler: clang
90+
addons:
91+
apt:
92+
sources: *all_sources
93+
packages: ['clang-3.9', 'libstdc++-6-dev']
94+
env: COMPILER='clang++-3.9' CPP17=1
95+
96+
- os: linux
97+
compiler: clang
98+
addons:
99+
apt:
100+
sources: *all_sources
101+
packages: ['clang-4.0', 'libstdc++-6-dev']
102+
env: COMPILER='clang++-4.0' CPP17=1
103+
104+
- os: linux
105+
dist: bionic
106+
compiler: clang
107+
addons:
108+
apt:
109+
sources: *all_sources
110+
packages: ['clang-5.0', 'libstdc++-6-dev']
111+
env: COMPILER='clang++-5.0' CPP17=1
112+
113+
- os: linux
114+
dist: bionic
115+
compiler: clang
116+
addons:
117+
apt:
118+
sources: *all_sources
119+
packages: ['clang-6.0', 'libstdc++-6-dev']
120+
env: COMPILER='clang++-6.0' CPP17=1
121+
122+
123+
# 4a/ Linux C++14 GCC builds
124+
- os: linux
125+
compiler: gcc
126+
addons: *gcc6
127+
env: COMPILER='g++-6'
128+
129+
- os: linux
130+
compiler: gcc
131+
addons: *gcc7
132+
env: COMPILER='g++-7'
133+
134+
- os: linux
135+
compiler: gcc
136+
addons: *gcc8
137+
env: COMPILER='g++-8'
138+
139+
before install:
140+
141+
install:
142+
143+
before_script:
144+
- cd ..
145+
- wget https://github.com/connectivecpp/utility-rack/archive/develop.tar.gz && mkdir utility-rack && tar -zxvf develop.tar.gz -C utility-rack --strip-components=1
146+
- wget https://github.com/chriskohlhoff/asio/archive/asio-1-14-0.tar.gz && mkdir asio && tar -zxvf asio-1-14-0.tar.gz -C asio --strip-components=1
147+
- wget https://github.com/catchorg/Catch2/archive/v2.10.2.tar.gz && mkdir Catch2 && tar -zxvf v2.10.2.tar.gz -C Catch2 --strip-components=1
148+
- mkdir build && cd build
149+
- cmake ../chops-net-ip/
150+
151+
script:
152+
- make all -j2
153+
- make test

README.md

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,26 @@
1+
Branch | Status
2+
|---|---|
3+
**Master** | [![Build Status](https://travis-ci.org/connectivecpp/chops-net-ip.svg?branch=master)](https://travis-ci.org/connectivecpp/chops-net-ip)
4+
**Develop** | [![Build Status](https://travis-ci.org/connectivecpp/chops-net-ip.svg?branch=develop)](https://travis-ci.org/connectivecpp/chops-net-ip)
5+
6+
17
# Chops Net IP - Connective Handcrafted Openwork Software for Asynchronous IP Networking
28

3-
Chops Net IP is a C++ library that makes asynchronous networking programming fun. Or at least if not fun, it makes network programming Asio, easier and safer, without significantly sacrificing performance. It is layered on top of the Asio asynchronous networking library, which is not an easy library to use correctly. It handles Internet Protocol (IP) communications including TCP, UDP, and UDP multicast. It is written using modern C++ design idioms and the latest (2017) C++ standard.
9+
Chops Net IP is a C++ library that makes asynchronous networking programming fun. Or at least if not fun, it makes network programming easier and safer, without significantly sacrificing performance. Chops Net IP handles Internet Protocol (IP) communications including TCP, UDP, and UDP multicast. It is written using modern C++ design idioms and the latest (2017) C++ standard.
410

511
Chops Net IP is not like any other high-level, general purpose C++ socket library.
612

13+
Chops Net IP is layered on top of the Asio asynchronous networking library, taking advantage of the portability and functionality that Asio provides. However, it simplifies network programming compared to coding against the Asio API, while providing easy scalability through the asynchronous facilities.
14+
715
# License
816

17+
[![Licence](https://img.shields.io/badge/license-boost-4480cc.svg)](http://www.boost.org/LICENSE_1_0.txt)
18+
919
This project is distributed under the [Boost Software License](LICENSE.txt).
1020

1121
## Chops Net IP Release Status
1222

13-
Release 1.0 is under development as of March 2019, awaiting `std::expected` (proposed for C++ 20) error handling improvement, CMake config file completion, and additional testing under multiple compilers and platforms.
23+
Release 1.0 is under development as of January 2020, awaiting CMake enhancements, a comprehensive tutorial, and additional testing under multiple compilers and platforms.
1424

1525
Release notes and upcoming development plans are [available here](doc/release.md).
1626

@@ -51,7 +61,7 @@ Example environments where Chops Net IP is a good fit:
5161
- Applications that are event driven or highly asynchronous in nature.
5262
- Applications where data is generated and handled in a non-symmetric manner. For example, data may be generated on the TCP acceptor side, or may be generated on a TCP connector side, or on both sides depending on the use case. Similarly, applications where the data flow is bi-directional and sends or receives are data-driven versus pattern-driven work well with this library.
5363
- Applications interacting with multiple (many) connections (e.g. handling multiple sensors or inputs or outputs), each with low to moderate throughput needs (i.e. IoT environments, chat networks, gaming networks).
54-
- Small footprint or embedded environments, where all network processing is run inside a single thread. In particular, environments where a JVM (or similar run-time support) is too costly in terms of system resource, but have a relatively rich operating environment (e.g. Linux running on a small chip) are a very good fit. (Currently the main constraint is small system support in the Networking TS implementation.)
64+
- Small footprint or embedded environments, where all network processing is run inside a single thread. In particular, environments where a JVM (or similar run-time support) is too costly in terms of system resources, but have a relatively rich operating environment (e.g. Linux running on a small chip) are a very good fit. (Currently the main constraint is small system support in the Asio library implementation.)
5565
- Applications with relatively simple network processing that need an easy-to-use and quick-for-development networking library.
5666
- Applications with configuration driven networks that may need to switch (for example) between TCP connect versus TCP accept for a given connection, or between TCP and UDP for a given communication path.
5767
- Peer-to-peer applications where the application doesn't care which side connects or accepts.
@@ -69,31 +79,32 @@ A detailed overview, a C++ socket library comparison, and a FAQ is [available he
6979

7080
# C++ Language Requirements and Alternatives
7181

72-
C++ 17 is the primary standards baseline for this repository. There is also one future C++ facility in use (`std::expected`, for better and simpler error handling).
82+
C++ 17 is the primary standards baseline for this repository. There is also one future C++ facility in use (`std::expected`, allowing error handling without using exceptions).
7383

74-
A significant number of C++ 11 features are in the implementation and API. There are also limited C++ 14 and 17 features in use, although they tend to be relatively simple features of those standards (e.g. `std::byte`, structured bindings). For users that don't want to use the latest C++ compilers or compile with C++ 17 flags, Martin Moene provides an excellent set of header-only libraries that implement many useful C++ library features, both C++ 17 as well as future C++ standards (see [References](doc/references.md)).
84+
A significant number of C++ 11 features are in the implementation and API. There are also C++ 14 and 17 features in use such as `std::byte`, `std::optional`, `std::variant` and `auto` parameters in lambda functions. For users that don't want to use the latest C++ compilers or compile with C++ 17 flags, Martin Moene provides an excellent set of header-only libraries that implement many useful C++ 17 library features (for older compilers or standards), as well as future C++ features (see [References](doc/references.md)).
7585

76-
While the main production branch will always be developed and tested with C++ 17 features (and relatively current compilers), alternative branches and forks for older compiler versions are expected. In particular, a branch using Martin's libraries and general C++ 11 (or C++ 14) conformance is expected for the future, and collaboration (through forking, change requests, etc) is very welcome. A branch supporting a pre-C++ 11 compiler or language conformance is not likely to be directly supported through this repository (since it would require so many changes that it would result in a defacto different codebase).
86+
While the main production branch will always be developed and tested with C++ 17 features (and relatively current compilers), alternative branches and forks for older compiler versions are welcome. In particular, a branch using Martin's libraries and general C++ 11 (or C++ 14) conformance would be useful. A branch supporting a pre-C++ 11 compiler or language conformance is not likely to be directly supported through this repository (since it would require so many changes that it would result in a defacto different codebase).
7787

7888
# External Dependencies
7989

80-
The libraries and API's have minimal (as possible) library dependencies (there are heavy dependencies on the C++ standard library in all of the code). ~~There are more dependencies in the test code than in the production code.~~
90+
The libraries and API's have minimal (as possible) library dependencies (there are heavy dependencies on the C++ standard library in all of the code). There are more dependencies in the test code than in the production code.
8191

8292
All the dependencies listed below have links that will take you to the library or repository.
8393

8494
Production external dependencies:
8595

86-
- Version 1.12 (or later) of Chris Kohlhoff's [`asio`](https://think-async.com/Asio/) repository is required. Note that it is the stand-alone library, not the Boost Asio implementation.
87-
- Version 0.9 (or later) of [`utility-rack`](https://connectivecpp.github.io/utility-rack), which is a repository in the same GitHub account as Chops Net IP (`shared_buffer.hpp` and `erase_where.hpp` are required).
88-
- ~~Version 0.1 (or later) of Martin Moene's `expected-lite` library.~~
89-
- Version 1.65.1 (or later) of the [Boost library](https://www.boost.org/). We are currently using version `1.69.0`.
96+
- Version 1.13 (or later) of Chris Kohlhoff's [`asio`](https://github.com/chriskohlhoff/asio) library is required. Note that it is the stand-alone Asio library, not the Boost Asio version.
97+
- The [`utility-rack`](https://github.com/connectivecpp/utility-rack) library, which is a repository in the same GitHub account as Chops Net IP.
9098

9199
Test external dependencies:
92100

93-
- Version 2.1.0 (or later) of Phil Nash's [Catch 2](https://github.com/catchorg/Catch2) is required for all test scenarios.
94-
- ~~Version 1.65.1 (or later) of the Boost library is required in some test scenarios (`boost.endian` at minimum).~~
101+
- Version 2.8.0 (or later) of Phil Nash's [`Catch2`](https://github.com/catchorg/Catch2) library is required for all test scenarios.
102+
103+
There are single file headers that have been copied into the `third_party` directory of the `utility-rack` repository from various GitHub repositories and do not require any external dependency management. These are:
95104

96-
See [References](doc/references.md) for additional details on the above libraries.
105+
- Martin Moene's [`expected-lite`](https://github.com/martinmoene/expected-lite) library.
106+
107+
See [References](doc/references.md) for additional details.
97108

98109
# Supported Compilers and Platforms
99110

@@ -102,6 +113,8 @@ Chops Net IP has been compiled and tests run on:
102113
- g++ 7.2, g++ 7.3, Linux (Ubuntu 17.10 - kernel 4.13, Ubuntu 18.04 - kernel 4.15)
103114
- (TBD, will include at least clang on linux and vc++ on Windows)
104115

116+
Follow the CI links for additional build environments.
117+
105118
# Installation
106119

107120
Chops Net IP is header-only, so installation consists of downloading or cloning and setting compiler include paths appropriately. No compile time configuration macros are defined.
@@ -112,9 +125,5 @@ See [References](doc/references.md) for details on dependencies and inspirations
112125

113126
# About
114127

115-
The primary author of Chops is Cliff Green, cliffg at connectivecpp dot com. The primary co-author is Thurman Gillespy, thurmang at connectivecpp dot com, and Roxanne Agerone roxannea at connectivecpp dot com.
116-
117-
Collaborators include Roxanne Agerone and Nathan Deutsch.
118-
119-
Additional information including author comments is [available here](doc/about.md).
128+
Team member information is [available here](https://connectivecpp.github.io/), and a few random author comments are [available here](doc/about.md).
120129

doc/about.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,8 @@
11
# Author Notes and Contributor Information
22

3-
The primary author of Chops Net IP is Cliff Green, cliffg at connectivecpp dot com. Cliff is a software engineer and has worked for many years writing infrastructure libraries and applications for use in networked and distributed systems, typically where high reliability or uptime is required. The domains where he has worked include wireless networks (in particular cellular 9-1-1), location technology, and large scale embedded and simulation systems in the military aerospace industry. He has volunteered every year at CppCon and presented at BoostCon (before it was renamed to C++ Now).
4-
5-
Cliff lives in the Seattle area and you may know him from other interests including volleyball, hiking, railroading (both the model variety and the real life big ones), music, or even parent support activities (if you are having major difficulties with your teen check out the Changes Parent Support Network, http://cpsn.org).
6-
7-
The primary co-author of Chops Net IP is Thurman Gillespy, thurmang at connectivecpp dot com. Thurman's first career was in diagnostic radiology, with stints at the University of Florida (1985 - 1990), University of Washington (1990 - 2008) and private practice in Seattle (2008 - 2015). In the 1990's, Thurman wrote Dr Razz, the first application that could display and manipulate radiology images on a Macintosh computer. In 2015 Thurman left medicine and went back to school to transform a life long hobby of programming into a second career as a software developer.
8-
93
## A Cliff Note on the Chops Name
104

11-
>Yes, the name / acronym is a stretch. Quite a stretch. I like the word "chops", which is a jazz term for strong technique, so I decided on that for a name. For example, "Check out Tal Wilkenfeld, she's got mad chops."
5+
>(from Cliff, 2018) Yes, the name / acronym is a stretch. Quite a stretch. I like the word "chops", which is a jazz term for strong technique, so I decided on that for a name. For example, "Check out Tal Wilkenfeld, she's got mad chops."
126
137
>I considered many names, at least two or three dozen, but my favorite ideas were all taken (or too close to existing names and could create confusion). It seems that a lot of software developers have similar creative ideas when it comes to names.
148

0 commit comments

Comments
 (0)