Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Api v2 #14

Merged
merged 208 commits into from
Feb 2, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
208 commits
Select commit Hold shift + click to select a range
02c0933
Implement ACKMessage #2
Jacquwes Mar 22, 2023
de6ccea
Implement ErrorMessage #2
Jacquwes Mar 22, 2023
e498d21
Implement HelloMessage unit test #2
Jacquwes Mar 22, 2023
9ee3dd2
Implement IdentifyMessage #2
Jacquwes Mar 22, 2023
eac395d
Implement KeepAliveMessage unit test
Jacquwes Mar 22, 2023
eca88f8
Implement KeepAliveMessage unit test #2
Jacquwes Mar 22, 2023
e68fd83
Merge branch 'api-v2' of https://github.com/Jacquwes/Pine into api-v2
Jacquwes Mar 22, 2023
25a2d35
Implement ReceiveChatMessage #2
Jacquwes Mar 22, 2023
797db0e
Increase readability
Jacquwes Mar 22, 2023
59cc8c0
Implement SendChatMessage #2
Jacquwes Mar 22, 2023
14092c1
Increase readability
Jacquwes Mar 22, 2023
f2dec75
Improve thread safety
Jacquwes Mar 23, 2023
047dc5d
Implement Unit Tests for connection
Jacquwes Mar 23, 2023
928183a
Make connection support more message types
Jacquwes Mar 23, 2023
494e103
Add id to message header
Jacquwes Mar 24, 2023
98b8813
Implement EstablishConnection #3
Jacquwes Mar 24, 2023
32f0f2b
Remove logging
Jacquwes Mar 24, 2023
f4b317a
Increase thread safety
Jacquwes Mar 24, 2023
4fe5ca5
Add unacceptable messages type to server message handler
Jacquwes Mar 24, 2023
c57cf71
Remove useless variable
Jacquwes Mar 24, 2023
4170d32
Implement Send and Receive chat message #4
Jacquwes Mar 24, 2023
24b94c6
Implement Send and Receive chat message #3
Jacquwes Mar 24, 2023
21310e0
Merge branch 'api-v2' of https://github.com/Jacquwes/Pine into api-v2
Jacquwes Mar 24, 2023
ce3b07f
Move server from executable to library
Jacquwes Mar 25, 2023
eb5e768
Create server integration tests project
Jacquwes Mar 25, 2023
bdbc7d7
Fix SendChatMessage able to parse wrong messages
Jacquwes Mar 25, 2023
3ce47cc
Add server integration tests
Jacquwes Mar 27, 2023
406ed57
Differenciate server and client connections for ease of use while tes…
Jacquwes Mar 27, 2023
29781cc
Increase consistency
Jacquwes Mar 27, 2023
32d6bd1
Add more conversions for snowflake ID
Jacquwes Mar 27, 2023
7cbd852
Add SetUsername function to user class
Jacquwes Mar 27, 2023
78a374f
Don't use pointers for user storage
Jacquwes Mar 27, 2023
0292e8e
Adopt new strategy to delete ended connections
Jacquwes Mar 27, 2023
e6a827e
Add utilitary function
Jacquwes Mar 30, 2023
1083c3c
Add chat integration tests
Jacquwes Mar 30, 2023
156e58e
Add cast
Jacquwes Mar 30, 2023
84a2fd5
Fix typo
Jacquwes Sep 7, 2023
627102c
Move tests to their own directory
Jacquwes Sep 7, 2023
e98e57f
Create cmakefile and add shared
Jacquwes Sep 7, 2023
db58a57
Move snowflake to shared and delete visual studio files
Jacquwes Sep 7, 2023
61b2a18
Fix return type to constexpr
Jacquwes Sep 7, 2023
b725980
Document
Jacquwes Sep 7, 2023
d5b2e4b
Add content table and snowflake specifications
Jacquwes Sep 7, 2023
b7a1673
Include direct file to std::ostream
Jacquwes Sep 7, 2023
5bd413c
Remove obsolete keywords
Jacquwes Sep 7, 2023
1d56c25
Setup tests
Jacquwes Sep 7, 2023
59e9903
Fix snowflake assigment operator
Jacquwes Sep 7, 2023
661b237
Move message to cmake project
Jacquwes Sep 7, 2023
013ab2d
Conform to Github's markdown standards
Jacquwes Sep 7, 2023
1b87cf4
Use simpler names for members
Jacquwes Sep 7, 2023
c82ae03
Rename snowflake_test to snowflake
Jacquwes Sep 7, 2023
917dfd6
Write message_header tests
Jacquwes Sep 7, 2023
b2e2590
Fix test using wrong endian numbers
Jacquwes Sep 7, 2023
df696ba
Write tests for message
Jacquwes Sep 7, 2023
e9f195e
Include vector
Jacquwes Sep 7, 2023
dc52129
Move user to cmake project and remove getter/setter
Jacquwes Sep 7, 2023
b788002
Move coroutine to cmake project
Jacquwes Sep 7, 2023
0ad3283
Move socket messages to cmake project
Jacquwes Sep 7, 2023
9025f01
Implement ack_message in .cpp
Jacquwes Sep 7, 2023
04319a5
Remove default constructor
Jacquwes Sep 7, 2023
f9f7688
Enable C++20
Jacquwes Sep 7, 2023
7179619
Uppercase enum
Jacquwes Sep 7, 2023
f23e012
Lowercase files
Jacquwes Sep 7, 2023
083ca28
Uppercase enum
Jacquwes Sep 7, 2023
fda18f6
Implement error_message in .cpp
Jacquwes Sep 7, 2023
8148d7e
Include required files
Jacquwes Sep 7, 2023
cd05857
Include type_traits
Jacquwes Sep 7, 2023
972b35a
Implement hello_message in .cpp
Jacquwes Sep 8, 2023
b3ad53b
Implement identify_message
Jacquwes Sep 8, 2023
b91df74
Implement keep_alive_message
Jacquwes Sep 8, 2023
50022a5
Implement receive_chat_message
Jacquwes Sep 8, 2023
2c1b1d5
Clean includes
Jacquwes Sep 8, 2023
a84e781
Use std::copy_n instead of std::memcpy
Jacquwes Sep 8, 2023
4390d76
Implement send_chat_message
Jacquwes Sep 8, 2023
2721c17
Auto include new source files
Jacquwes Sep 8, 2023
651e6a5
Move tests main function to new file
Jacquwes Sep 8, 2023
0239d12
Remove unused header
Jacquwes Sep 8, 2023
dd1e43d
Fix function signature
Jacquwes Sep 8, 2023
48546c3
Cast error_code* to uint8_t*
Jacquwes Sep 8, 2023
10a2839
Fix acknowledged_message id padding
Jacquwes Sep 8, 2023
c80aff7
Add tests for ack message
Jacquwes Sep 8, 2023
8ccb084
Remove member prefix
Jacquwes Sep 8, 2023
6926f16
Add test body size
Jacquwes Sep 8, 2023
f6658ea
Add tests for error_message
Jacquwes Sep 8, 2023
e40d262
Remove Visual Studio project files
Jacquwes Sep 8, 2023
a2ca2c4
Add hello message tests
Jacquwes Sep 8, 2023
dd6fb42
Make check_username const and use .size() instead of .length()
Jacquwes Sep 8, 2023
ff2fa78
Write tests for identify message
Jacquwes Sep 8, 2023
b538823
Fix link error
Jacquwes Sep 8, 2023
d215f4e
Fix test, header size not computed with name assignment
Jacquwes Sep 8, 2023
9570f1b
Add keep alive message test
Jacquwes Sep 8, 2023
9b70f42
Add tests for receive chat message
Jacquwes Sep 8, 2023
a0949de
Add checks for username lenght
Jacquwes Sep 8, 2023
6eef234
Make receive message checks static
Jacquwes Sep 8, 2023
a133521
Change check message content from send chat message to static
Jacquwes Sep 8, 2023
306a7e4
Add check for message length
Jacquwes Sep 8, 2023
046a428
Add tests for send message
Jacquwes Sep 8, 2023
bb667e2
Remove Visual Studio projects
Jacquwes Sep 8, 2023
a7f5d07
Move connection to shared
Jacquwes Sep 8, 2023
c34c3f9
Conform names
Jacquwes Sep 8, 2023
7554d1b
Move connection to shared
Jacquwes Sep 8, 2023
6b80fdc
Remove Visual Studio files
Jacquwes Sep 8, 2023
a501a5d
Add default constructor and remove const
Jacquwes Sep 8, 2023
4601549
Conform code style
Jacquwes Sep 8, 2023
2928a6e
Add server cmake project
Jacquwes Sep 8, 2023
5c9cb81
Remove Visual Studio files
Jacquwes Sep 8, 2023
3bd43c1
Add required headers
Jacquwes Sep 8, 2023
f9c6a1f
Move files to cmake project
Jacquwes Sep 8, 2023
c40c27c
Replace Visual Studio build system with CMake
Jacquwes Sep 8, 2023
f2c8720
Remove visual studio user specific file from repository
Jacquwes Sep 15, 2023
e3c4395
Include asio
Jacquwes Sep 15, 2023
1ce2b0c
Change Winsocks to asio
Jacquwes Sep 15, 2023
f9c6ea9
Remove const attribute
Jacquwes Sep 15, 2023
8eda2cb
Remove const attribute
Jacquwes Sep 15, 2023
6225a71
Clean headers
Jacquwes Sep 15, 2023
fea9d6d
Implement close connection function
Jacquwes Sep 15, 2023
f68070c
Remove ununsed file
Jacquwes Sep 15, 2023
4f833d2
Remove const attribute
Jacquwes Sep 15, 2023
c8447ac
Remove unreachable break
Jacquwes Sep 15, 2023
fbe2909
Winsocks -> asio
Jacquwes Sep 15, 2023
58576cd
Use asio instead of Winsocks
Jacquwes Sep 15, 2023
e092796
Use copy_n instead of memcpy
Jacquwes Sep 15, 2023
e29c34a
Removed member prefix
Jacquwes Sep 15, 2023
a03e528
Remove member prefix
Jacquwes Sep 15, 2023
7e0080c
Add constructor
Jacquwes Sep 15, 2023
78158cf
Replace Winsocks with asio
Jacquwes Sep 15, 2023
bdf44fa
Prepare integration tests
Jacquwes Sep 15, 2023
9bba1e0
Create documentation config
Jacquwes Sep 26, 2023
5e5adb3
Document user
Jacquwes Sep 26, 2023
56bdd5d
Don't use transitive header
Jacquwes Sep 26, 2023
fd4382b
Change documentation format
Jacquwes Sep 26, 2023
da39b88
Document message
Jacquwes Sep 26, 2023
0e64854
Add documentation
Jacquwes Sep 26, 2023
3bd5057
Add documentation
Jacquwes Sep 26, 2023
84f2273
Better navigation panel for doxygen
Jacquwes Sep 26, 2023
aaf14e9
Create doxygen.yml
Jacquwes Sep 26, 2023
dc583a6
Update doxygen.yml
Jacquwes Sep 26, 2023
de91023
Update doxyfile name
Jacquwes Sep 26, 2023
2e096a7
Checkout branch
Jacquwes Sep 26, 2023
ea9eee5
Merge pull request #10 from Jacquwes/docs
Jacquwes Sep 26, 2023
e707ee9
Integrate GoogleTest to CTest command
Jacquwes Sep 27, 2023
5c67370
Add cmake build and test workflow
Jacquwes Sep 27, 2023
3df2132
Update target branch
Jacquwes Sep 27, 2023
795b25c
Update target branch
Jacquwes Sep 27, 2023
4b7c1df
Remove unused unit header file
Jacquwes Sep 27, 2023
fb20800
Use new syntax for os detection
Jacquwes Sep 27, 2023
c7cb4ee
Use other syntax for os detection
Jacquwes Sep 27, 2023
fd883eb
Move definition to header
Jacquwes Sep 27, 2023
a6ac3d1
Include algorithm
Jacquwes Sep 27, 2023
ec02645
Use copy_n instead of memcpy
Jacquwes Sep 27, 2023
8a87aa2
Remove constexpr
Jacquwes Sep 27, 2023
e787517
Add explicit comparison for clang
Jacquwes Sep 27, 2023
4525611
Add more explicit comparison operators for clang
Jacquwes Sep 27, 2023
188dea6
Remove workflow for clang
Jacquwes Sep 27, 2023
87e130b
Update README.md
Jacquwes Sep 27, 2023
d26e751
Add workflow badge
Jacquwes Sep 27, 2023
b0773ac
Change return type to match definition
Jacquwes Sep 27, 2023
edf7945
Remove ununsed function
Jacquwes Sep 27, 2023
0782c9e
Remove windows warning
Jacquwes Sep 27, 2023
ce360ce
Remove delete_disconnected_clients
Jacquwes Sep 27, 2023
00701d4
Remove unused variables
Jacquwes Sep 27, 2023
41cdd02
Add transitive includes
Jacquwes Sep 27, 2023
9e89ea1
Open acceptor only if closed
Jacquwes Sep 27, 2023
52d7692
Add logging messages
Jacquwes Sep 27, 2023
4f77334
Use new disconnection strategy
Jacquwes Sep 27, 2023
173d902
Add example project
Jacquwes Sep 27, 2023
25d8529
Change action name
Jacquwes Sep 27, 2023
f45658e
Define windows specific macro only for windows
Jacquwes Sep 27, 2023
e334966
Only build if source is modified
Jacquwes Sep 28, 2023
07eaedf
Only build if documentation changed
Jacquwes Sep 28, 2023
acfbff9
Deploy documentation to github pages
Jacquwes Sep 28, 2023
2a02505
Add workflow_dispatch
Jacquwes Sep 28, 2023
06ba171
Move server example in base directory
Jacquwes Sep 28, 2023
5f9beb0
Implement client
Jacquwes Sep 28, 2023
dd9345b
Connect synchronously
Jacquwes Sep 28, 2023
5163984
Add client example
Jacquwes Sep 28, 2023
7b19d03
Use error_code instead of exception and don't display error message o…
Jacquwes Sep 28, 2023
1b39c57
fix permissions for pages artifact
Jacquwes Sep 28, 2023
73f7afa
Implement client class
Jacquwes Sep 28, 2023
55634f7
Change docs dir
Jacquwes Sep 28, 2023
45cf251
Upload gh pages artifact
Jacquwes Sep 28, 2023
aef4c81
Fix wrong dependency name
Jacquwes Sep 28, 2023
d16b2c3
Move artifact step to build
Jacquwes Sep 28, 2023
9570ad2
Create gh pages branch
Jacquwes Sep 28, 2023
5bb1d81
Remove create branch
Jacquwes Sep 28, 2023
b8baf7d
Add permissions
Jacquwes Sep 28, 2023
0d03425
Remove permissions
Jacquwes Sep 28, 2023
4c55bf2
Enable workflows for more events
Jacquwes Sep 28, 2023
4ec3d6b
Merge pull request #12 from Jacquwes/asio
Jacquwes Sep 28, 2023
1a93f0a
Store io_context instead of socket
Jacquwes Sep 28, 2023
a2ec11b
Implement disconnect and listen
Jacquwes Sep 28, 2023
d04215c
Use dynamic message handlers and new server_connection
Jacquwes Sep 28, 2023
c7f0d49
Copy socket and remove shared_from_this
Jacquwes Sep 28, 2023
43c045f
Add server integration tests
Jacquwes Sep 28, 2023
dee7757
Use client interface
Jacquwes Sep 28, 2023
012b2e1
Use copy of map to clear clients
Jacquwes Sep 28, 2023
3faca9d
More precise logs
Jacquwes Sep 28, 2023
99c2657
Reduce logging verbose
Jacquwes Sep 29, 2023
10c2dcc
Add on_ready server event
Jacquwes Sep 29, 2023
532982b
Use connection close
Jacquwes Sep 29, 2023
ba0601c
Correct major threading issues
Jacquwes Sep 29, 2023
b3b0b4e
Close socket on disconnect
Jacquwes Sep 29, 2023
dc2c62d
Close socket before waiting for listening to stop
Jacquwes Sep 29, 2023
f4430ee
Log tests failures
Jacquwes Sep 29, 2023
a0b2066
Document client_connection
Jacquwes Sep 29, 2023
18e255f
Rerun failed tests with ouput message
Jacquwes Sep 29, 2023
341748c
Exclude integration tests
Jacquwes Oct 2, 2023
84446f3
Add failure event
Jacquwes Oct 7, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
79 changes: 0 additions & 79 deletions .editorconfig

This file was deleted.

108 changes: 108 additions & 0 deletions .github/workflows/ctest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# This starter workflow is for a CMake project running on multiple platforms. There is a different starter workflow if you just want a single platform.
# See: https://github.com/actions/starter-workflows/blob/main/ci/cmake-single-platform.yml
name: CTest on multiple platforms

on:
workflow_dispatch:
push:
branches: [ "master", "api-v2", "asio" ]
paths:
- '**.cpp'
- '**.h'
- '**.hpp'
- '**.c'
- '**/CMakeLists.txt'
pull_request:
branches: [ "master", "api-v2", "asio" ]
paths:
- '**.cpp'
- '**.h'
- '**.hpp'
- '**.c'
- '**/CMakeLists.txt'

jobs:
build:
runs-on: ${{ matrix.os }}

strategy:
# Set fail-fast to false to ensure that feedback is delivered for all matrix combinations. Consider changing this to true when your workflow is stable.
fail-fast: false

# Set up a matrix to run the following 3 configurations:
# 1. <Windows, Release, latest MSVC compiler toolchain on the default runner image, default generator>
# 2. <Linux, Release, latest GCC compiler toolchain on the default runner image, default generator>
# 3. <Linux, Release, latest Clang compiler toolchain on the default runner image, default generator>
#
# To add more build types (Release, Debug, RelWithDebInfo, etc.) customize the build_type list.
matrix:
os: [ubuntu-latest, windows-latest]
build_type: [Release]
c_compiler: [gcc, cl]
include:
- os: windows-latest
c_compiler: cl
cpp_compiler: cl
- os: ubuntu-latest
c_compiler: gcc
cpp_compiler: g++
exclude:
- os: windows-latest
c_compiler: gcc
- os: ubuntu-latest
c_compiler: cl

steps:
- uses: actions/checkout@v3

- name: Install vcpkg
# Install vcpkg to a known location
run: git clone https://github.com/microsoft/vcpkg.git ${{ github.workspace }}/vcpkg

- name: Bootstrap vcpkg linux
# Bootstrap vcpkg using the appropriate triplet for the current runner operating system
if: matrix.os == 'ubuntu-latest'
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.sh -disableMetrics

- name: Bootstrap vcpkg windows
# Bootstrap vcpkg using the appropriate triplet for the current runner operating system
if: matrix.os == 'windows-latest'
run: ${{ github.workspace }}/vcpkg/bootstrap-vcpkg.bat -disableMetrics

- name: Install asio and gtest linux
# Install dependencies using the appropriate triplet for the current runner operating system
run: ${{ github.workspace }}/vcpkg/vcpkg install asio:x64-linux gtest:x64-linux
if: matrix.os == 'ubuntu-latest'

- name: Install asio and gtest windows
# Install dependencies using the appropriate triplet for the current runner operating system
run: ${{ github.workspace }}/vcpkg/vcpkg install asio:x64-windows gtest:x64-windows
if: matrix.os == 'windows-latest'

- name: Set reusable strings
# Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file.
id: strings
shell: bash
run: |
echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT"

- name: Configure CMake
# Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
# See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
run: >
cmake -B ${{ steps.strings.outputs.build-output-dir }}
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }}
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }}
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
-DCMAKE_TOOLCHAIN_FILE=${{ github.workspace }}/vcpkg/scripts/buildsystems/vcpkg.cmake
-S ${{ github.workspace }}

- name: Build
# Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }}

- name: Test
working-directory: ${{ steps.strings.outputs.build-output-dir }}
# Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator).
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ctest --build-config --rerun-failed --output-on-failure --exclude-regex integration* ${{ matrix.build_type }}
52 changes: 52 additions & 0 deletions .github/workflows/doxygen.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
on:
workflow_dispatch:
push:
branches: [ "master", "api-v2", "asio" ]
paths:
- '**.h'
- '**.md'
- '**doxygen.yml'
- '**doxyfile'
pull_request:
branches: [ "master", "api-v2", "asio" ]
paths:
- '**.h'
- '**.md'
- '**doxygen.yml'
- '**doxyfile'

name: Build doxygen documentation
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install Doxygen and Dot
run: sudo apt install doxygen graphviz

- name: Run doxygen
run: doxygen doxyfile

- name: Upload artifact
uses: actions/upload-pages-artifact@v2
with:
path: docs/html

deploy:
runs-on: ubuntu-latest
needs:
- build

permissions:
pages: write
id-token: write

environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}

steps:
- name: Deploy to Github Pages
id: deployment
uses: actions/deploy-pages@v2
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

docs

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
CMakeSettings.json

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
Expand Down
21 changes: 21 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
cmake_minimum_required(VERSION 3.15)

project(Pine)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

enable_testing()

find_package(asio CONFIG REQUIRED)
find_package(GTest CONFIG REQUIRED)

if (WIN32)
add_definitions(-D_WIN32_WINNT=0x0A00)
endif()

add_subdirectory(client)
add_subdirectory(examples)
add_subdirectory(shared)
add_subdirectory(server)
add_subdirectory(tests)
Loading
Loading