├── .github └── workflows │ └── PSS_ASIO.yml ├── Build ├── Linux │ ├── server_config.json │ └── server_config_test_gcov.json └── Windows │ ├── ca.pem │ ├── dh2048.pem │ ├── libcrypto.dll │ ├── libssl.dll │ ├── server.pem │ └── server_config.json ├── CMakeLists.txt ├── Common ├── IFrameObject.h ├── IIoBridge.hpp ├── ISessionService.h ├── LoadLibrary.hpp ├── PerformanceCheck.hpp ├── ReadBuffer.hpp ├── SessionBuffer.hpp ├── ThreadQueue.h ├── TimeStamp.hpp ├── TimerManager.hpp ├── VersionConfig.h ├── VersionConfig.h.in ├── WriteBuffer.hpp ├── consoleoutput.hpp ├── define.h ├── singleton.h └── tms.hpp ├── Icon.jpg ├── LICENSE ├── Module_Logic └── Test_Logic │ ├── BaseCommand.cpp │ ├── BaseCommand.h │ ├── CMakeLists.txt │ ├── Test_Logic.cpp │ ├── Test_Logic.sln │ ├── Test_Logic.vcxproj │ ├── Test_Logic.vcxproj.filters │ └── Test_Logic.vcxproj.user ├── NOTES-LINUX.md ├── NOTES-WINDOWS.md ├── PSS_ASIO ├── CMakeLists.txt ├── Common │ ├── CommunicationService.cpp │ ├── CommunicationService.h │ ├── ConnectCounter.cpp │ ├── ConnectCounter.h │ ├── CoreTimer.hpp │ ├── FrameObject.hpp │ ├── ICommunicationService.h │ ├── ISession.h │ ├── IoContextPool.cpp │ ├── IoContextPool.h │ ├── IoListManager.h │ ├── IoNetServer.h │ ├── NetSvrManager.cpp │ ├── NetSvrManager.h │ ├── SendBuffer.h │ ├── ServerService.cpp │ ├── ServerService.h │ ├── serverconfig.cpp │ ├── serverconfig.h │ └── serverconfigtype.h ├── Message │ ├── Iobridge.cpp │ ├── Iobridge.h │ ├── IotoIo.cpp │ ├── IotoIo.h │ ├── LoadModule.cpp │ ├── LoadModule.h │ ├── LoadPacketParse.cpp │ ├── LoadPacketParse.h │ ├── ModuleInterfalce.cpp │ ├── ModuleInterfalce.h │ ├── ModuleLogic.cpp │ ├── ModuleLogic.h │ ├── SessionAddrList.cpp │ ├── SessionAddrList.h │ ├── SessionInterface.cpp │ ├── SessionInterface.h │ ├── SessionService.cpp │ ├── SessionService.h │ ├── SyncLogic.cpp │ └── SyncLogic.h ├── PSS_ASIO.cpp ├── PSS_ASIO.sln ├── PSS_ASIO.vcxproj ├── PSS_ASIO.vcxproj.filters ├── PSS_ASIO.vcxproj.user ├── QueueSession │ ├── QueueService.h │ └── Queueservice.cpp ├── TTySession │ ├── TtyServer.cpp │ └── TtyServer.h ├── TcpSession │ ├── TcpClientSession.cpp │ ├── TcpClientSession.h │ ├── TcpSSLClientSession.cpp │ ├── TcpSSLClientSession.h │ ├── TcpSSLServer.cpp │ ├── TcpSSLServer.h │ ├── TcpSSLSession.cpp │ ├── TcpSSLSession.h │ ├── TcpServer.cpp │ ├── TcpServer.h │ ├── TcpSession.cpp │ └── TcpSession.h ├── UdpSession │ ├── KcpServer.cpp │ ├── KcpServer.h │ ├── UdpClientSession.cpp │ ├── UdpClientSession.h │ ├── UdpServer.cpp │ └── UdpServer.h ├── lib │ ├── libcrypto.lib │ └── libssl.lib └── sonar-project.properties ├── PSS_ASIO_CLIENT ├── CMakeLists.txt ├── Common │ └── SendBuffer.h ├── PSS_ASIO_CLIENT.cpp ├── PSS_ASIO_CLIENT.sln ├── PSS_ASIO_CLIENT.vcxproj ├── PSS_ASIO_CLIENT.vcxproj.filters ├── PSS_ASIO_CLIENT.vcxproj.user ├── TcpSession │ ├── TcpSession.cpp │ └── TcpSession.h ├── UdpSession │ ├── UdpSession.cpp │ └── UdpSession.h ├── kcp │ ├── ikcp.c │ └── ikcp.h ├── kcp_client.cpp └── kcp_client.h ├── PSS_PLUGIN_LOGIC_MAKER ├── Build │ ├── plugin_maker.json │ └── template │ │ ├── CMakeLists.txt │ │ ├── template_Command.cpp │ │ ├── template_Command.h │ │ └── template_logic.cpp ├── CMakeLists.txt ├── PSS_PLUGIN_LOGIC_MAKER.cpp ├── PSS_PLUGIN_LOGIC_MAKER.sln ├── PSS_PLUGIN_LOGIC_MAKER.vcxproj ├── PSS_PLUGIN_LOGIC_MAKER.vcxproj.filters ├── PSS_PLUGIN_LOGIC_MAKER.vcxproj.user ├── logic_maker_type.h ├── read_logic_json_info.cpp └── read_logic_json_info.h ├── PacketParse_Http ├── Base64.hpp ├── CMakeLists.txt ├── HttpFormat.cpp ├── HttpFormat.h ├── PacketParse_Http.cpp ├── PacketParse_Http.sln ├── PacketParse_Http.vcxproj ├── PacketParse_Http.vcxproj.filters ├── PacketParse_Http.vcxproj.user ├── SHA1.hpp ├── WebsocketFormat.hpp ├── http_parser.c └── http_parser.h ├── PacketParse_Interface ├── CMakeLists.txt ├── PacketParse_Interface.cpp ├── PacketParse_Interface.sln ├── PacketParse_Interface.vcxproj ├── PacketParse_Interface.vcxproj.filters └── PacketParse_Interface.vcxproj.user ├── _config.yml ├── jemalloc.sh ├── md ├── How_to_config_server.md ├── How_to_make_logic_plugin.md ├── How_to_make_packetparse_plugin.md ├── How_to_use_framework_api_in_logic_plugin.md ├── How_to_use_http_or_websocket.md └── How_use_tools_make_logic_plugin.md ├── readme.md ├── tests ├── CMakeLists.txt ├── cmake │ └── FindGTEST.cmake ├── google_test.py ├── gtest_output.html ├── gtest_template.html ├── make_test_report_html.sh ├── test_Iotoio.cpp ├── test_Iotoio.h ├── test_buffpacket.cpp ├── test_buffpacket.h ├── test_pss_asio.cpp ├── test_pss_asio.sln ├── test_pss_asio.vcxproj ├── test_pss_asio.vcxproj.filters └── test_pss_asio.vcxproj.user └── third_include ├── asio.hpp ├── asio ├── any_completion_executor.hpp ├── any_completion_handler.hpp ├── any_io_executor.hpp ├── append.hpp ├── as_tuple.hpp ├── associated_allocator.hpp ├── associated_cancellation_slot.hpp ├── associated_executor.hpp ├── associated_immediate_executor.hpp ├── associator.hpp ├── async_result.hpp ├── awaitable.hpp ├── basic_datagram_socket.hpp ├── basic_deadline_timer.hpp ├── basic_file.hpp ├── basic_io_object.hpp ├── basic_random_access_file.hpp ├── basic_raw_socket.hpp ├── basic_readable_pipe.hpp ├── basic_seq_packet_socket.hpp ├── basic_serial_port.hpp ├── basic_signal_set.hpp ├── basic_socket.hpp ├── basic_socket_acceptor.hpp ├── basic_socket_iostream.hpp ├── basic_socket_streambuf.hpp ├── basic_stream_file.hpp ├── basic_stream_socket.hpp ├── basic_streambuf.hpp ├── basic_streambuf_fwd.hpp ├── basic_waitable_timer.hpp ├── basic_writable_pipe.hpp ├── bind_allocator.hpp ├── bind_cancellation_slot.hpp ├── bind_executor.hpp ├── bind_immediate_executor.hpp ├── buffer.hpp ├── buffer_registration.hpp ├── buffered_read_stream.hpp ├── buffered_read_stream_fwd.hpp ├── buffered_stream.hpp ├── buffered_stream_fwd.hpp ├── buffered_write_stream.hpp ├── buffered_write_stream_fwd.hpp ├── buffers_iterator.hpp ├── cancellation_signal.hpp ├── cancellation_state.hpp ├── cancellation_type.hpp ├── co_spawn.hpp ├── completion_condition.hpp ├── compose.hpp ├── connect.hpp ├── connect_pipe.hpp ├── consign.hpp ├── coroutine.hpp ├── deadline_timer.hpp ├── defer.hpp ├── deferred.hpp ├── detached.hpp ├── detail │ ├── array.hpp │ ├── array_fwd.hpp │ ├── assert.hpp │ ├── atomic_count.hpp │ ├── base_from_cancellation_state.hpp │ ├── base_from_completion_cond.hpp │ ├── bind_handler.hpp │ ├── blocking_executor_op.hpp │ ├── buffer_resize_guard.hpp │ ├── buffer_sequence_adapter.hpp │ ├── buffered_stream_storage.hpp │ ├── call_stack.hpp │ ├── chrono.hpp │ ├── chrono_time_traits.hpp │ ├── completion_handler.hpp │ ├── composed_work.hpp │ ├── concurrency_hint.hpp │ ├── conditionally_enabled_event.hpp │ ├── conditionally_enabled_mutex.hpp │ ├── config.hpp │ ├── consuming_buffers.hpp │ ├── cstddef.hpp │ ├── cstdint.hpp │ ├── date_time_fwd.hpp │ ├── deadline_timer_service.hpp │ ├── dependent_type.hpp │ ├── descriptor_ops.hpp │ ├── descriptor_read_op.hpp │ ├── descriptor_write_op.hpp │ ├── dev_poll_reactor.hpp │ ├── epoll_reactor.hpp │ ├── event.hpp │ ├── eventfd_select_interrupter.hpp │ ├── exception.hpp │ ├── executor_function.hpp │ ├── executor_op.hpp │ ├── fd_set_adapter.hpp │ ├── fenced_block.hpp │ ├── functional.hpp │ ├── future.hpp │ ├── global.hpp │ ├── handler_alloc_helpers.hpp │ ├── handler_cont_helpers.hpp │ ├── handler_tracking.hpp │ ├── handler_type_requirements.hpp │ ├── handler_work.hpp │ ├── hash_map.hpp │ ├── impl │ │ ├── buffer_sequence_adapter.ipp │ │ ├── descriptor_ops.ipp │ │ ├── dev_poll_reactor.hpp │ │ ├── dev_poll_reactor.ipp │ │ ├── epoll_reactor.hpp │ │ ├── epoll_reactor.ipp │ │ ├── eventfd_select_interrupter.ipp │ │ ├── handler_tracking.ipp │ │ ├── io_uring_descriptor_service.ipp │ │ ├── io_uring_file_service.ipp │ │ ├── io_uring_service.hpp │ │ ├── io_uring_service.ipp │ │ ├── io_uring_socket_service_base.ipp │ │ ├── kqueue_reactor.hpp │ │ ├── kqueue_reactor.ipp │ │ ├── null_event.ipp │ │ ├── pipe_select_interrupter.ipp │ │ ├── posix_event.ipp │ │ ├── posix_mutex.ipp │ │ ├── posix_serial_port_service.ipp │ │ ├── posix_thread.ipp │ │ ├── posix_tss_ptr.ipp │ │ ├── reactive_descriptor_service.ipp │ │ ├── reactive_socket_service_base.ipp │ │ ├── resolver_service_base.ipp │ │ ├── scheduler.ipp │ │ ├── select_reactor.hpp │ │ ├── select_reactor.ipp │ │ ├── service_registry.hpp │ │ ├── service_registry.ipp │ │ ├── signal_set_service.ipp │ │ ├── socket_ops.ipp │ │ ├── socket_select_interrupter.ipp │ │ ├── strand_executor_service.hpp │ │ ├── strand_executor_service.ipp │ │ ├── strand_service.hpp │ │ ├── strand_service.ipp │ │ ├── thread_context.ipp │ │ ├── throw_error.ipp │ │ ├── timer_queue_ptime.ipp │ │ ├── timer_queue_set.ipp │ │ ├── win_event.ipp │ │ ├── win_iocp_file_service.ipp │ │ ├── win_iocp_handle_service.ipp │ │ ├── win_iocp_io_context.hpp │ │ ├── win_iocp_io_context.ipp │ │ ├── win_iocp_serial_port_service.ipp │ │ ├── win_iocp_socket_service_base.ipp │ │ ├── win_mutex.ipp │ │ ├── win_object_handle_service.ipp │ │ ├── win_static_mutex.ipp │ │ ├── win_thread.ipp │ │ ├── win_tss_ptr.ipp │ │ ├── winrt_ssocket_service_base.ipp │ │ ├── winrt_timer_scheduler.hpp │ │ ├── winrt_timer_scheduler.ipp │ │ └── winsock_init.ipp │ ├── initiate_defer.hpp │ ├── initiate_dispatch.hpp │ ├── initiate_post.hpp │ ├── io_control.hpp │ ├── io_object_impl.hpp │ ├── io_uring_descriptor_read_at_op.hpp │ ├── io_uring_descriptor_read_op.hpp │ ├── io_uring_descriptor_service.hpp │ ├── io_uring_descriptor_write_at_op.hpp │ ├── io_uring_descriptor_write_op.hpp │ ├── io_uring_file_service.hpp │ ├── io_uring_null_buffers_op.hpp │ ├── io_uring_operation.hpp │ ├── io_uring_service.hpp │ ├── io_uring_socket_accept_op.hpp │ ├── io_uring_socket_connect_op.hpp │ ├── io_uring_socket_recv_op.hpp │ ├── io_uring_socket_recvfrom_op.hpp │ ├── io_uring_socket_recvmsg_op.hpp │ ├── io_uring_socket_send_op.hpp │ ├── io_uring_socket_sendto_op.hpp │ ├── io_uring_socket_service.hpp │ ├── io_uring_socket_service_base.hpp │ ├── io_uring_wait_op.hpp │ ├── is_buffer_sequence.hpp │ ├── is_executor.hpp │ ├── keyword_tss_ptr.hpp │ ├── kqueue_reactor.hpp │ ├── limits.hpp │ ├── local_free_on_block_exit.hpp │ ├── memory.hpp │ ├── mutex.hpp │ ├── non_const_lvalue.hpp │ ├── noncopyable.hpp │ ├── null_event.hpp │ ├── null_fenced_block.hpp │ ├── null_global.hpp │ ├── null_mutex.hpp │ ├── null_reactor.hpp │ ├── null_signal_blocker.hpp │ ├── null_socket_service.hpp │ ├── null_static_mutex.hpp │ ├── null_thread.hpp │ ├── null_tss_ptr.hpp │ ├── object_pool.hpp │ ├── old_win_sdk_compat.hpp │ ├── op_queue.hpp │ ├── operation.hpp │ ├── pipe_select_interrupter.hpp │ ├── pop_options.hpp │ ├── posix_event.hpp │ ├── posix_fd_set_adapter.hpp │ ├── posix_global.hpp │ ├── posix_mutex.hpp │ ├── posix_serial_port_service.hpp │ ├── posix_signal_blocker.hpp │ ├── posix_static_mutex.hpp │ ├── posix_thread.hpp │ ├── posix_tss_ptr.hpp │ ├── push_options.hpp │ ├── reactive_descriptor_service.hpp │ ├── reactive_null_buffers_op.hpp │ ├── reactive_socket_accept_op.hpp │ ├── reactive_socket_connect_op.hpp │ ├── reactive_socket_recv_op.hpp │ ├── reactive_socket_recvfrom_op.hpp │ ├── reactive_socket_recvmsg_op.hpp │ ├── reactive_socket_send_op.hpp │ ├── reactive_socket_sendto_op.hpp │ ├── reactive_socket_service.hpp │ ├── reactive_socket_service_base.hpp │ ├── reactive_wait_op.hpp │ ├── reactor.hpp │ ├── reactor_op.hpp │ ├── reactor_op_queue.hpp │ ├── recycling_allocator.hpp │ ├── regex_fwd.hpp │ ├── resolve_endpoint_op.hpp │ ├── resolve_op.hpp │ ├── resolve_query_op.hpp │ ├── resolver_service.hpp │ ├── resolver_service_base.hpp │ ├── scheduler.hpp │ ├── scheduler_operation.hpp │ ├── scheduler_task.hpp │ ├── scheduler_thread_info.hpp │ ├── scoped_lock.hpp │ ├── scoped_ptr.hpp │ ├── select_interrupter.hpp │ ├── select_reactor.hpp │ ├── service_registry.hpp │ ├── signal_blocker.hpp │ ├── signal_handler.hpp │ ├── signal_init.hpp │ ├── signal_op.hpp │ ├── signal_set_service.hpp │ ├── socket_holder.hpp │ ├── socket_ops.hpp │ ├── socket_option.hpp │ ├── socket_select_interrupter.hpp │ ├── socket_types.hpp │ ├── source_location.hpp │ ├── static_mutex.hpp │ ├── std_event.hpp │ ├── std_fenced_block.hpp │ ├── std_global.hpp │ ├── std_mutex.hpp │ ├── std_static_mutex.hpp │ ├── std_thread.hpp │ ├── strand_executor_service.hpp │ ├── strand_service.hpp │ ├── string_view.hpp │ ├── thread.hpp │ ├── thread_context.hpp │ ├── thread_group.hpp │ ├── thread_info_base.hpp │ ├── throw_error.hpp │ ├── throw_exception.hpp │ ├── timer_queue.hpp │ ├── timer_queue_base.hpp │ ├── timer_queue_ptime.hpp │ ├── timer_queue_set.hpp │ ├── timer_scheduler.hpp │ ├── timer_scheduler_fwd.hpp │ ├── tss_ptr.hpp │ ├── type_traits.hpp │ ├── utility.hpp │ ├── wait_handler.hpp │ ├── wait_op.hpp │ ├── win_event.hpp │ ├── win_fd_set_adapter.hpp │ ├── win_global.hpp │ ├── win_iocp_file_service.hpp │ ├── win_iocp_handle_read_op.hpp │ ├── win_iocp_handle_service.hpp │ ├── win_iocp_handle_write_op.hpp │ ├── win_iocp_io_context.hpp │ ├── win_iocp_null_buffers_op.hpp │ ├── win_iocp_operation.hpp │ ├── win_iocp_overlapped_op.hpp │ ├── win_iocp_overlapped_ptr.hpp │ ├── win_iocp_serial_port_service.hpp │ ├── win_iocp_socket_accept_op.hpp │ ├── win_iocp_socket_connect_op.hpp │ ├── win_iocp_socket_recv_op.hpp │ ├── win_iocp_socket_recvfrom_op.hpp │ ├── win_iocp_socket_recvmsg_op.hpp │ ├── win_iocp_socket_send_op.hpp │ ├── win_iocp_socket_service.hpp │ ├── win_iocp_socket_service_base.hpp │ ├── win_iocp_thread_info.hpp │ ├── win_iocp_wait_op.hpp │ ├── win_mutex.hpp │ ├── win_object_handle_service.hpp │ ├── win_static_mutex.hpp │ ├── win_thread.hpp │ ├── win_tss_ptr.hpp │ ├── winapp_thread.hpp │ ├── wince_thread.hpp │ ├── winrt_async_manager.hpp │ ├── winrt_async_op.hpp │ ├── winrt_resolve_op.hpp │ ├── winrt_resolver_service.hpp │ ├── winrt_socket_connect_op.hpp │ ├── winrt_socket_recv_op.hpp │ ├── winrt_socket_send_op.hpp │ ├── winrt_ssocket_service.hpp │ ├── winrt_ssocket_service_base.hpp │ ├── winrt_timer_scheduler.hpp │ ├── winrt_utils.hpp │ ├── winsock_init.hpp │ ├── work_dispatcher.hpp │ └── wrapped_handler.hpp ├── dispatch.hpp ├── error.hpp ├── error_code.hpp ├── execution.hpp ├── execution │ ├── allocator.hpp │ ├── any_executor.hpp │ ├── bad_executor.hpp │ ├── blocking.hpp │ ├── blocking_adaptation.hpp │ ├── context.hpp │ ├── context_as.hpp │ ├── executor.hpp │ ├── impl │ │ └── bad_executor.ipp │ ├── invocable_archetype.hpp │ ├── mapping.hpp │ ├── occupancy.hpp │ ├── outstanding_work.hpp │ ├── prefer_only.hpp │ └── relationship.hpp ├── execution_context.hpp ├── executor.hpp ├── executor_work_guard.hpp ├── experimental │ ├── append.hpp │ ├── as_single.hpp │ ├── as_tuple.hpp │ ├── awaitable_operators.hpp │ ├── basic_channel.hpp │ ├── basic_concurrent_channel.hpp │ ├── cancellation_condition.hpp │ ├── channel.hpp │ ├── channel_error.hpp │ ├── channel_traits.hpp │ ├── co_composed.hpp │ ├── co_spawn.hpp │ ├── concurrent_channel.hpp │ ├── coro.hpp │ ├── coro_traits.hpp │ ├── deferred.hpp │ ├── detail │ │ ├── channel_handler.hpp │ │ ├── channel_message.hpp │ │ ├── channel_operation.hpp │ │ ├── channel_payload.hpp │ │ ├── channel_receive_op.hpp │ │ ├── channel_send_functions.hpp │ │ ├── channel_send_op.hpp │ │ ├── channel_service.hpp │ │ ├── coro_completion_handler.hpp │ │ ├── coro_promise_allocator.hpp │ │ ├── has_signature.hpp │ │ ├── impl │ │ │ └── channel_service.hpp │ │ └── partial_promise.hpp │ ├── impl │ │ ├── as_single.hpp │ │ ├── channel_error.ipp │ │ ├── co_composed.hpp │ │ ├── coro.hpp │ │ ├── parallel_group.hpp │ │ ├── promise.hpp │ │ ├── use_coro.hpp │ │ └── use_promise.hpp │ ├── parallel_group.hpp │ ├── prepend.hpp │ ├── promise.hpp │ ├── use_coro.hpp │ └── use_promise.hpp ├── file_base.hpp ├── generic │ ├── basic_endpoint.hpp │ ├── datagram_protocol.hpp │ ├── detail │ │ ├── endpoint.hpp │ │ └── impl │ │ │ └── endpoint.ipp │ ├── raw_protocol.hpp │ ├── seq_packet_protocol.hpp │ └── stream_protocol.hpp ├── handler_continuation_hook.hpp ├── high_resolution_timer.hpp ├── impl │ ├── any_completion_executor.ipp │ ├── any_io_executor.ipp │ ├── append.hpp │ ├── as_tuple.hpp │ ├── awaitable.hpp │ ├── buffered_read_stream.hpp │ ├── buffered_write_stream.hpp │ ├── cancellation_signal.ipp │ ├── co_spawn.hpp │ ├── connect.hpp │ ├── connect_pipe.hpp │ ├── connect_pipe.ipp │ ├── consign.hpp │ ├── deferred.hpp │ ├── detached.hpp │ ├── error.ipp │ ├── error_code.ipp │ ├── execution_context.hpp │ ├── execution_context.ipp │ ├── executor.hpp │ ├── executor.ipp │ ├── io_context.hpp │ ├── io_context.ipp │ ├── multiple_exceptions.ipp │ ├── prepend.hpp │ ├── read.hpp │ ├── read_at.hpp │ ├── read_until.hpp │ ├── redirect_error.hpp │ ├── serial_port_base.hpp │ ├── serial_port_base.ipp │ ├── spawn.hpp │ ├── src.hpp │ ├── system_context.hpp │ ├── system_context.ipp │ ├── system_executor.hpp │ ├── thread_pool.hpp │ ├── thread_pool.ipp │ ├── use_awaitable.hpp │ ├── use_future.hpp │ ├── write.hpp │ └── write_at.hpp ├── io_context.hpp ├── io_context_strand.hpp ├── io_service.hpp ├── io_service_strand.hpp ├── ip │ ├── address.hpp │ ├── address_v4.hpp │ ├── address_v4_iterator.hpp │ ├── address_v4_range.hpp │ ├── address_v6.hpp │ ├── address_v6_iterator.hpp │ ├── address_v6_range.hpp │ ├── bad_address_cast.hpp │ ├── basic_endpoint.hpp │ ├── basic_resolver.hpp │ ├── basic_resolver_entry.hpp │ ├── basic_resolver_iterator.hpp │ ├── basic_resolver_query.hpp │ ├── basic_resolver_results.hpp │ ├── detail │ │ ├── endpoint.hpp │ │ ├── impl │ │ │ └── endpoint.ipp │ │ └── socket_option.hpp │ ├── host_name.hpp │ ├── icmp.hpp │ ├── impl │ │ ├── address.hpp │ │ ├── address.ipp │ │ ├── address_v4.hpp │ │ ├── address_v4.ipp │ │ ├── address_v6.hpp │ │ ├── address_v6.ipp │ │ ├── basic_endpoint.hpp │ │ ├── host_name.ipp │ │ ├── network_v4.hpp │ │ ├── network_v4.ipp │ │ ├── network_v6.hpp │ │ └── network_v6.ipp │ ├── multicast.hpp │ ├── network_v4.hpp │ ├── network_v6.hpp │ ├── resolver_base.hpp │ ├── resolver_query_base.hpp │ ├── tcp.hpp │ ├── udp.hpp │ ├── unicast.hpp │ └── v6_only.hpp ├── is_applicable_property.hpp ├── is_contiguous_iterator.hpp ├── is_executor.hpp ├── is_read_buffered.hpp ├── is_write_buffered.hpp ├── local │ ├── basic_endpoint.hpp │ ├── connect_pair.hpp │ ├── datagram_protocol.hpp │ ├── detail │ │ ├── endpoint.hpp │ │ └── impl │ │ │ └── endpoint.ipp │ ├── seq_packet_protocol.hpp │ └── stream_protocol.hpp ├── multiple_exceptions.hpp ├── packaged_task.hpp ├── placeholders.hpp ├── posix │ ├── basic_descriptor.hpp │ ├── basic_stream_descriptor.hpp │ ├── descriptor.hpp │ ├── descriptor_base.hpp │ └── stream_descriptor.hpp ├── post.hpp ├── prefer.hpp ├── prepend.hpp ├── query.hpp ├── random_access_file.hpp ├── read.hpp ├── read_at.hpp ├── read_until.hpp ├── readable_pipe.hpp ├── recycling_allocator.hpp ├── redirect_error.hpp ├── registered_buffer.hpp ├── require.hpp ├── require_concept.hpp ├── serial_port.hpp ├── serial_port_base.hpp ├── signal_set.hpp ├── signal_set_base.hpp ├── socket_base.hpp ├── spawn.hpp ├── ssl.hpp ├── ssl │ ├── context.hpp │ ├── context_base.hpp │ ├── detail │ │ ├── buffered_handshake_op.hpp │ │ ├── engine.hpp │ │ ├── handshake_op.hpp │ │ ├── impl │ │ │ ├── engine.ipp │ │ │ └── openssl_init.ipp │ │ ├── io.hpp │ │ ├── openssl_init.hpp │ │ ├── openssl_types.hpp │ │ ├── password_callback.hpp │ │ ├── read_op.hpp │ │ ├── shutdown_op.hpp │ │ ├── stream_core.hpp │ │ ├── verify_callback.hpp │ │ └── write_op.hpp │ ├── error.hpp │ ├── host_name_verification.hpp │ ├── impl │ │ ├── context.hpp │ │ ├── context.ipp │ │ ├── error.ipp │ │ ├── host_name_verification.ipp │ │ ├── rfc2818_verification.ipp │ │ └── src.hpp │ ├── rfc2818_verification.hpp │ ├── stream.hpp │ ├── stream_base.hpp │ ├── verify_context.hpp │ └── verify_mode.hpp ├── static_thread_pool.hpp ├── steady_timer.hpp ├── strand.hpp ├── stream_file.hpp ├── streambuf.hpp ├── system_context.hpp ├── system_error.hpp ├── system_executor.hpp ├── system_timer.hpp ├── this_coro.hpp ├── thread.hpp ├── thread_pool.hpp ├── time_traits.hpp ├── traits │ ├── equality_comparable.hpp │ ├── execute_member.hpp │ ├── prefer_free.hpp │ ├── prefer_member.hpp │ ├── query_free.hpp │ ├── query_member.hpp │ ├── query_static_constexpr_member.hpp │ ├── require_concept_free.hpp │ ├── require_concept_member.hpp │ ├── require_free.hpp │ ├── require_member.hpp │ ├── static_query.hpp │ ├── static_require.hpp │ └── static_require_concept.hpp ├── ts │ ├── buffer.hpp │ ├── executor.hpp │ ├── internet.hpp │ ├── io_context.hpp │ ├── net.hpp │ ├── netfwd.hpp │ ├── socket.hpp │ └── timer.hpp ├── unyield.hpp ├── use_awaitable.hpp ├── use_future.hpp ├── uses_executor.hpp ├── version.hpp ├── wait_traits.hpp ├── windows │ ├── basic_object_handle.hpp │ ├── basic_overlapped_handle.hpp │ ├── basic_random_access_handle.hpp │ ├── basic_stream_handle.hpp │ ├── object_handle.hpp │ ├── overlapped_handle.hpp │ ├── overlapped_ptr.hpp │ ├── random_access_handle.hpp │ └── stream_handle.hpp ├── writable_pipe.hpp ├── write.hpp ├── write_at.hpp └── yield.hpp ├── jemalloc ├── COPYING ├── ChangeLog ├── INSTALL.md ├── Makefile ├── Makefile.in ├── README ├── TUNING.md ├── VERSION ├── autogen.sh ├── bin │ ├── jemalloc-config │ ├── jemalloc-config.in │ ├── jemalloc.sh │ ├── jemalloc.sh.in │ ├── jeprof │ └── jeprof.in ├── build-aux │ ├── config.guess │ ├── config.sub │ └── install-sh ├── config.log ├── config.stamp ├── config.stamp.in ├── config.status ├── configure ├── configure.ac ├── configure~ ├── doc │ ├── html.xsl │ ├── html.xsl.in │ ├── jemalloc.xml │ ├── jemalloc.xml.in │ ├── manpages.xsl │ ├── manpages.xsl.in │ └── stylesheet.xsl ├── doc_internal │ ├── PROFILING_INTERNALS.md │ └── jemalloc.svg ├── include │ ├── jemalloc │ │ ├── internal │ │ │ ├── activity_callback.h │ │ │ ├── arena_externs.h │ │ │ ├── arena_inlines_a.h │ │ │ ├── arena_inlines_b.h │ │ │ ├── arena_stats.h │ │ │ ├── arena_structs.h │ │ │ ├── arena_types.h │ │ │ ├── assert.h │ │ │ ├── atomic.h │ │ │ ├── atomic_c11.h │ │ │ ├── atomic_gcc_atomic.h │ │ │ ├── atomic_gcc_sync.h │ │ │ ├── atomic_msvc.h │ │ │ ├── background_thread_externs.h │ │ │ ├── background_thread_inlines.h │ │ │ ├── background_thread_structs.h │ │ │ ├── base.h │ │ │ ├── bin.h │ │ │ ├── bin_info.h │ │ │ ├── bin_stats.h │ │ │ ├── bin_types.h │ │ │ ├── bit_util.h │ │ │ ├── bitmap.h │ │ │ ├── buf_writer.h │ │ │ ├── cache_bin.h │ │ │ ├── ckh.h │ │ │ ├── counter.h │ │ │ ├── ctl.h │ │ │ ├── decay.h │ │ │ ├── div.h │ │ │ ├── ecache.h │ │ │ ├── edata.h │ │ │ ├── edata_cache.h │ │ │ ├── ehooks.h │ │ │ ├── emap.h │ │ │ ├── emitter.h │ │ │ ├── eset.h │ │ │ ├── exp_grow.h │ │ │ ├── extent.h │ │ │ ├── extent_dss.h │ │ │ ├── extent_mmap.h │ │ │ ├── fb.h │ │ │ ├── fxp.h │ │ │ ├── hash.h │ │ │ ├── hook.h │ │ │ ├── hpa.h │ │ │ ├── hpa_hooks.h │ │ │ ├── hpa_opts.h │ │ │ ├── hpdata.h │ │ │ ├── inspect.h │ │ │ ├── jemalloc_internal_decls.h │ │ │ ├── jemalloc_internal_defs.h │ │ │ ├── jemalloc_internal_defs.h.in │ │ │ ├── jemalloc_internal_externs.h │ │ │ ├── jemalloc_internal_includes.h │ │ │ ├── jemalloc_internal_inlines_a.h │ │ │ ├── jemalloc_internal_inlines_b.h │ │ │ ├── jemalloc_internal_inlines_c.h │ │ │ ├── jemalloc_internal_macros.h │ │ │ ├── jemalloc_internal_types.h │ │ │ ├── jemalloc_preamble.h │ │ │ ├── jemalloc_preamble.h.in │ │ │ ├── large_externs.h │ │ │ ├── lockedint.h │ │ │ ├── log.h │ │ │ ├── malloc_io.h │ │ │ ├── mpsc_queue.h │ │ │ ├── mutex.h │ │ │ ├── mutex_prof.h │ │ │ ├── nstime.h │ │ │ ├── pa.h │ │ │ ├── pac.h │ │ │ ├── pages.h │ │ │ ├── pai.h │ │ │ ├── peak.h │ │ │ ├── peak_event.h │ │ │ ├── ph.h │ │ │ ├── private_namespace.sh │ │ │ ├── private_symbols.awk │ │ │ ├── private_symbols.sh │ │ │ ├── private_symbols_jet.awk │ │ │ ├── prng.h │ │ │ ├── prof_data.h │ │ │ ├── prof_externs.h │ │ │ ├── prof_hook.h │ │ │ ├── prof_inlines.h │ │ │ ├── prof_log.h │ │ │ ├── prof_recent.h │ │ │ ├── prof_stats.h │ │ │ ├── prof_structs.h │ │ │ ├── prof_sys.h │ │ │ ├── prof_types.h │ │ │ ├── psset.h │ │ │ ├── public_namespace.h │ │ │ ├── public_namespace.sh │ │ │ ├── public_symbols.txt │ │ │ ├── public_unnamespace.h │ │ │ ├── public_unnamespace.sh │ │ │ ├── ql.h │ │ │ ├── qr.h │ │ │ ├── quantum.h │ │ │ ├── rb.h │ │ │ ├── rtree.h │ │ │ ├── rtree_tsd.h │ │ │ ├── safety_check.h │ │ │ ├── san.h │ │ │ ├── san_bump.h │ │ │ ├── sc.h │ │ │ ├── sec.h │ │ │ ├── sec_opts.h │ │ │ ├── seq.h │ │ │ ├── slab_data.h │ │ │ ├── smoothstep.h │ │ │ ├── smoothstep.sh │ │ │ ├── spin.h │ │ │ ├── stats.h │ │ │ ├── sz.h │ │ │ ├── tcache_externs.h │ │ │ ├── tcache_inlines.h │ │ │ ├── tcache_structs.h │ │ │ ├── tcache_types.h │ │ │ ├── test_hooks.h │ │ │ ├── thread_event.h │ │ │ ├── ticker.h │ │ │ ├── tsd.h │ │ │ ├── tsd_generic.h │ │ │ ├── tsd_malloc_thread_cleanup.h │ │ │ ├── tsd_tls.h │ │ │ ├── tsd_types.h │ │ │ ├── tsd_win.h │ │ │ ├── typed_list.h │ │ │ ├── util.h │ │ │ └── witness.h │ │ ├── jemalloc.h │ │ ├── jemalloc.sh │ │ ├── jemalloc_defs.h │ │ ├── jemalloc_defs.h.in │ │ ├── jemalloc_macros.h │ │ ├── jemalloc_macros.h.in │ │ ├── jemalloc_mangle.h │ │ ├── jemalloc_mangle.sh │ │ ├── jemalloc_mangle_jet.h │ │ ├── jemalloc_protos.h │ │ ├── jemalloc_protos.h.in │ │ ├── jemalloc_protos_jet.h │ │ ├── jemalloc_rename.h │ │ ├── jemalloc_rename.sh │ │ ├── jemalloc_typedefs.h │ │ └── jemalloc_typedefs.h.in │ └── msvc_compat │ │ ├── C99 │ │ ├── stdbool.h │ │ └── stdint.h │ │ ├── strings.h │ │ └── windows_extra.h ├── jemalloc.pc ├── jemalloc.pc.in ├── m4 │ └── ax_cxx_compile_stdcxx.m4 ├── msvc │ ├── ReadMe.txt │ ├── jemalloc_vc2015.sln │ ├── jemalloc_vc2017.sln │ ├── projects │ │ ├── vc2015 │ │ │ ├── jemalloc │ │ │ │ ├── jemalloc.vcxproj │ │ │ │ └── jemalloc.vcxproj.filters │ │ │ └── test_threads │ │ │ │ ├── test_threads.vcxproj │ │ │ │ └── test_threads.vcxproj.filters │ │ └── vc2017 │ │ │ ├── jemalloc │ │ │ ├── jemalloc.vcxproj │ │ │ └── jemalloc.vcxproj.filters │ │ │ └── test_threads │ │ │ ├── test_threads.vcxproj │ │ │ └── test_threads.vcxproj.filters │ └── test_threads │ │ ├── test_threads.cpp │ │ ├── test_threads.h │ │ └── test_threads_main.cpp ├── run_tests.sh ├── scripts │ ├── check-formatting.sh │ ├── freebsd │ │ ├── before_install.sh │ │ ├── before_script.sh │ │ └── script.sh │ ├── gen_run_tests.py │ ├── gen_travis.py │ ├── linux │ │ └── before_install.sh │ └── windows │ │ ├── before_install.sh │ │ ├── before_script.sh │ │ └── script.sh ├── src │ ├── arena.c │ ├── background_thread.c │ ├── base.c │ ├── bin.c │ ├── bin_info.c │ ├── bitmap.c │ ├── buf_writer.c │ ├── cache_bin.c │ ├── ckh.c │ ├── counter.c │ ├── ctl.c │ ├── decay.c │ ├── div.c │ ├── ecache.c │ ├── edata.c │ ├── edata_cache.c │ ├── ehooks.c │ ├── emap.c │ ├── eset.c │ ├── exp_grow.c │ ├── extent.c │ ├── extent_dss.c │ ├── extent_mmap.c │ ├── fxp.c │ ├── hook.c │ ├── hpa.c │ ├── hpa_hooks.c │ ├── hpdata.c │ ├── inspect.c │ ├── jemalloc.c │ ├── jemalloc_cpp.cpp │ ├── large.c │ ├── log.c │ ├── malloc_io.c │ ├── mutex.c │ ├── nstime.c │ ├── pa.c │ ├── pa_extra.c │ ├── pac.c │ ├── pages.c │ ├── pai.c │ ├── peak_event.c │ ├── prof.c │ ├── prof_data.c │ ├── prof_log.c │ ├── prof_recent.c │ ├── prof_stats.c │ ├── prof_sys.c │ ├── psset.c │ ├── rtree.c │ ├── safety_check.c │ ├── san.c │ ├── san_bump.c │ ├── sc.c │ ├── sec.c │ ├── stats.c │ ├── sz.c │ ├── tcache.c │ ├── test_hooks.c │ ├── thread_event.c │ ├── ticker.c │ ├── ticker.py │ ├── tsd.c │ ├── witness.c │ └── zone.c └── test │ ├── analyze │ ├── prof_bias.c │ ├── rand.c │ └── sizes.c │ ├── include │ └── test │ │ ├── SFMT-alti.h │ │ ├── SFMT-params.h │ │ ├── SFMT-params11213.h │ │ ├── SFMT-params1279.h │ │ ├── SFMT-params132049.h │ │ ├── SFMT-params19937.h │ │ ├── SFMT-params216091.h │ │ ├── SFMT-params2281.h │ │ ├── SFMT-params4253.h │ │ ├── SFMT-params44497.h │ │ ├── SFMT-params607.h │ │ ├── SFMT-params86243.h │ │ ├── SFMT-sse2.h │ │ ├── SFMT.h │ │ ├── arena_util.h │ │ ├── bench.h │ │ ├── bgthd.h │ │ ├── btalloc.h │ │ ├── extent_hooks.h │ │ ├── jemalloc_test.h │ │ ├── jemalloc_test.h.in │ │ ├── jemalloc_test_defs.h │ │ ├── jemalloc_test_defs.h.in │ │ ├── math.h │ │ ├── mq.h │ │ ├── mtx.h │ │ ├── nbits.h │ │ ├── san.h │ │ ├── sleep.h │ │ ├── test.h │ │ ├── thd.h │ │ └── timer.h │ ├── integration │ ├── MALLOCX_ARENA.c │ ├── aligned_alloc.c │ ├── allocated.c │ ├── cpp │ │ ├── basic.cpp │ │ ├── infallible_new_false.cpp │ │ ├── infallible_new_false.sh │ │ ├── infallible_new_true.cpp │ │ └── infallible_new_true.sh │ ├── extent.c │ ├── extent.sh │ ├── malloc.c │ ├── mallocx.c │ ├── mallocx.sh │ ├── overflow.c │ ├── posix_memalign.c │ ├── rallocx.c │ ├── sdallocx.c │ ├── slab_sizes.c │ ├── slab_sizes.sh │ ├── smallocx.c │ ├── smallocx.sh │ ├── thread_arena.c │ ├── thread_tcache_enabled.c │ ├── xallocx.c │ └── xallocx.sh │ ├── src │ ├── SFMT.c │ ├── btalloc.c │ ├── btalloc_0.c │ ├── btalloc_1.c │ ├── math.c │ ├── mtx.c │ ├── sleep.c │ ├── test.c │ ├── thd.c │ └── timer.c │ ├── stress │ ├── batch_alloc.c │ ├── fill_flush.c │ ├── hookbench.c │ ├── large_microbench.c │ ├── mallctl.c │ └── microbench.c │ ├── test.sh │ ├── test.sh.in │ └── unit │ ├── SFMT.c │ ├── a0.c │ ├── arena_decay.c │ ├── arena_decay.sh │ ├── arena_reset.c │ ├── arena_reset_prof.c │ ├── arena_reset_prof.sh │ ├── atomic.c │ ├── background_thread.c │ ├── background_thread_enable.c │ ├── base.c │ ├── batch_alloc.c │ ├── batch_alloc.sh │ ├── batch_alloc_prof.c │ ├── batch_alloc_prof.sh │ ├── binshard.c │ ├── binshard.sh │ ├── bit_util.c │ ├── bitmap.c │ ├── buf_writer.c │ ├── cache_bin.c │ ├── ckh.c │ ├── counter.c │ ├── decay.c │ ├── div.c │ ├── double_free.c │ ├── double_free.h │ ├── edata_cache.c │ ├── emitter.c │ ├── extent_quantize.c │ ├── fb.c │ ├── fork.c │ ├── fxp.c │ ├── hash.c │ ├── hook.c │ ├── hpa.c │ ├── hpa_background_thread.c │ ├── hpa_background_thread.sh │ ├── hpdata.c │ ├── huge.c │ ├── inspect.c │ ├── inspect.sh │ ├── junk.c │ ├── junk.sh │ ├── junk_alloc.c │ ├── junk_alloc.sh │ ├── junk_free.c │ ├── junk_free.sh │ ├── log.c │ ├── mallctl.c │ ├── malloc_conf_2.c │ ├── malloc_conf_2.sh │ ├── malloc_io.c │ ├── math.c │ ├── mpsc_queue.c │ ├── mq.c │ ├── mtx.c │ ├── nstime.c │ ├── oversize_threshold.c │ ├── pa.c │ ├── pack.c │ ├── pack.sh │ ├── pages.c │ ├── peak.c │ ├── ph.c │ ├── prng.c │ ├── prof_accum.c │ ├── prof_accum.sh │ ├── prof_active.c │ ├── prof_active.sh │ ├── prof_gdump.c │ ├── prof_gdump.sh │ ├── prof_hook.c │ ├── prof_hook.sh │ ├── prof_idump.c │ ├── prof_idump.sh │ ├── prof_log.c │ ├── prof_log.sh │ ├── prof_mdump.c │ ├── prof_mdump.sh │ ├── prof_recent.c │ ├── prof_recent.sh │ ├── prof_reset.c │ ├── prof_reset.sh │ ├── prof_stats.c │ ├── prof_stats.sh │ ├── prof_sys_thread_name.c │ ├── prof_sys_thread_name.sh │ ├── prof_tctx.c │ ├── prof_tctx.sh │ ├── prof_thread_name.c │ ├── prof_thread_name.sh │ ├── psset.c │ ├── ql.c │ ├── qr.c │ ├── rb.c │ ├── retained.c │ ├── rtree.c │ ├── safety_check.c │ ├── safety_check.sh │ ├── san.c │ ├── san.sh │ ├── san_bump.c │ ├── sc.c │ ├── sec.c │ ├── seq.c │ ├── size_check.c │ ├── size_check.sh │ ├── size_classes.c │ ├── slab.c │ ├── smoothstep.c │ ├── spin.c │ ├── stats.c │ ├── stats_print.c │ ├── sz.c │ ├── tcache_max.c │ ├── tcache_max.sh │ ├── test_hooks.c │ ├── thread_event.c │ ├── thread_event.sh │ ├── ticker.c │ ├── tsd.c │ ├── uaf.c │ ├── witness.c │ ├── zero.c │ ├── zero.sh │ ├── zero_realloc_abort.c │ ├── zero_realloc_abort.sh │ ├── zero_realloc_alloc.c │ ├── zero_realloc_alloc.sh │ ├── zero_realloc_free.c │ ├── zero_realloc_free.sh │ ├── zero_reallocs.c │ └── zero_reallocs.sh ├── json └── json.hpp ├── kcp ├── ikcp.c └── ikcp.h ├── openssl ├── __DECC_INCLUDE_EPILOGUE.H ├── __DECC_INCLUDE_PROLOGUE.H ├── aes.h ├── applink.c ├── asn1.h ├── asn1_mac.h ├── asn1err.h ├── asn1t.h ├── async.h ├── asyncerr.h ├── bio.h ├── bioerr.h ├── blowfish.h ├── bn.h ├── bnerr.h ├── buffer.h ├── buffererr.h ├── camellia.h ├── cast.h ├── cmac.h ├── cms.h ├── cmserr.h ├── comp.h ├── comperr.h ├── conf.h ├── conf_api.h ├── conferr.h ├── crypto.h ├── cryptoerr.h ├── ct.h ├── cterr.h ├── des.h ├── dh.h ├── dherr.h ├── dsa.h ├── dsaerr.h ├── dtls1.h ├── e_os2.h ├── ebcdic.h ├── ec.h ├── ecdh.h ├── ecdsa.h ├── ecerr.h ├── engine.h ├── engineerr.h ├── err.h ├── evp.h ├── evperr.h ├── hmac.h ├── idea.h ├── kdf.h ├── kdferr.h ├── lhash.h ├── md2.h ├── md4.h ├── md5.h ├── mdc2.h ├── modes.h ├── obj_mac.h ├── objects.h ├── objectserr.h ├── ocsp.h ├── ocsperr.h ├── opensslconf.h ├── opensslv.h ├── ossl_typ.h ├── pem.h ├── pem2.h ├── pemerr.h ├── pkcs12.h ├── pkcs12err.h ├── pkcs7.h ├── pkcs7err.h ├── rand.h ├── rand_drbg.h ├── randerr.h ├── rc2.h ├── rc4.h ├── rc5.h ├── ripemd.h ├── rsa.h ├── rsaerr.h ├── safestack.h ├── seed.h ├── sha.h ├── srp.h ├── srtp.h ├── ssl.h ├── ssl2.h ├── ssl3.h ├── sslerr.h ├── stack.h ├── store.h ├── storeerr.h ├── symhacks.h ├── tls1.h ├── ts.h ├── tserr.h ├── txt_db.h ├── ui.h ├── uierr.h ├── whrlpool.h ├── x509.h ├── x509_vfy.h ├── x509err.h ├── x509v3.h └── x509v3err.h ├── shm_queue ├── shm_common.hpp ├── shm_queue.hpp ├── shm_queue_Linux.hpp └── shm_queue_Windows.hpp └── spdlog ├── async.h ├── async_logger-inl.h ├── async_logger.h ├── cfg ├── argv.h ├── env.h ├── helpers-inl.h └── helpers.h ├── common-inl.h ├── common.h ├── details ├── backtracer-inl.h ├── backtracer.h ├── circular_q.h ├── console_globals.h ├── file_helper-inl.h ├── file_helper.h ├── fmt_helper.h ├── log_msg-inl.h ├── log_msg.h ├── log_msg_buffer-inl.h ├── log_msg_buffer.h ├── mpmc_blocking_q.h ├── null_mutex.h ├── os-inl.h ├── os.h ├── periodic_worker-inl.h ├── periodic_worker.h ├── registry-inl.h ├── registry.h ├── synchronous_factory.h ├── tcp_client-windows.h ├── tcp_client.h ├── thread_pool-inl.h ├── thread_pool.h ├── udp_client-windows.h ├── udp_client.h └── windows_include.h ├── fmt ├── bin_to_hex.h ├── bundled │ ├── args.h │ ├── chrono.h │ ├── color.h │ ├── compile.h │ ├── core.h │ ├── fmt.license.rst │ ├── format-inl.h │ ├── format.h │ ├── locale.h │ ├── os.h │ ├── ostream.h │ ├── printf.h │ ├── ranges.h │ ├── std.h │ └── xchar.h ├── chrono.h ├── compile.h ├── fmt.h ├── ostr.h ├── ranges.h ├── std.h └── xchar.h ├── formatter.h ├── fwd.h ├── logger-inl.h ├── logger.h ├── pattern_formatter-inl.h ├── pattern_formatter.h ├── sinks ├── android_sink.h ├── ansicolor_sink-inl.h ├── ansicolor_sink.h ├── base_sink-inl.h ├── base_sink.h ├── basic_file_sink-inl.h ├── basic_file_sink.h ├── callback_sink.h ├── daily_file_sink.h ├── dist_sink.h ├── dup_filter_sink.h ├── hourly_file_sink.h ├── kafka_sink.h ├── mongo_sink.h ├── msvc_sink.h ├── null_sink.h ├── ostream_sink.h ├── qt_sinks.h ├── ringbuffer_sink.h ├── rotating_file_sink-inl.h ├── rotating_file_sink.h ├── sink-inl.h ├── sink.h ├── stdout_color_sinks-inl.h ├── stdout_color_sinks.h ├── stdout_sinks-inl.h ├── stdout_sinks.h ├── syslog_sink.h ├── systemd_sink.h ├── tcp_sink.h ├── udp_sink.h ├── win_eventlog_sink.h ├── wincolor_sink-inl.h └── wincolor_sink.h ├── spdlog-inl.h ├── spdlog.h ├── stopwatch.h ├── tweakme.h └── version.h /Build/Windows/dh2048.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN DH PARAMETERS----- 2 | MIIBCAKCAQEAsC7/ndo7w6BbWoMgop5Ga8q7kkZA5mQYrfPyhKuxEvYj92KAFWyH 3 | DnBaAIGuu7vSkgZeBj2v/ywobf2BtrrzG9IXAWKb/00/5+OUCunD8BJqMblBIUs6 4 | ag+MdMm6FhAvz8lKiVwYkN8eMNbliBXlj0VRtHDtMNig5cEvr3KD4qcN7GZg6udo 5 | szKvLyzC1y7zXpG/QJ4hWJxw0YiPvzy21v/jIJMEeWfhI4hkuDaU3+rePftQwLm7 6 | 3/ZKc6K4tECkfW8rBucV9eYbzPcncsMwfmp7e0pR36zO0cFiza4Mtfs0eg6aCn5L 7 | FzeHa/qz/YxIUqk/OikCiFG8dEE2Kw+lswIBAg== 8 | -----END DH PARAMETERS----- 9 | -------------------------------------------------------------------------------- /Build/Windows/libcrypto.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/Build/Windows/libcrypto.dll -------------------------------------------------------------------------------- /Build/Windows/libssl.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/Build/Windows/libssl.dll -------------------------------------------------------------------------------- /Common/IFrameObject.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "define.h" 4 | #include "ISessionService.h" 5 | 6 | //插件内需要框架需要使用的对象 7 | 8 | //同步异步执行逻辑标记 9 | enum class EM_LOGIC_RUN_STATE 10 | { 11 | LOGIC_RUN_SYNCHRONOUS = 0, //同步执行 12 | LOGIC_RUN_ASYNHRONOUS, //异步执行 13 | }; 14 | 15 | class IFrame_Object 16 | { 17 | public: 18 | virtual bool Regedit_command(uint16 command_id, EM_LOGIC_RUN_STATE em_logic_state = EM_LOGIC_RUN_STATE::LOGIC_RUN_ASYNHRONOUS) = 0; 19 | virtual bool Regedit_command(uint16 command_id, Logic_message_dispose_fn logic_fn, EM_LOGIC_RUN_STATE em_logic_state = EM_LOGIC_RUN_STATE::LOGIC_RUN_ASYNHRONOUS) = 0; 20 | virtual ISessionService* get_session_service() = 0; 21 | }; -------------------------------------------------------------------------------- /Common/IIoBridge.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "define.h" 4 | 5 | //add by freeeyes 6 | //这里我想了良久,最后决定对IO桥接的效率放在第一位。 7 | //那么这个接口应该交付给PacketParse去处理,connect和disconnect 8 | 9 | //实现IO桥接的虚类 10 | class IIoBridge 11 | { 12 | public: 13 | virtual bool add_session_io_mapping(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE from_io_type, const _ClientIPInfo& to_io, EM_CONNECT_IO_TYPE to_io_type, ENUM_IO_BRIDGE_TYPE bridge_type = ENUM_IO_BRIDGE_TYPE::IO_BRIDGE_BATH) = 0; 14 | virtual bool delete_session_io_mapping(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE from_io_type) = 0; 15 | }; 16 | -------------------------------------------------------------------------------- /Common/VersionConfig.h: -------------------------------------------------------------------------------- 1 | //VersionConfig.h.in 2 | #define V_BUILD_TIME "2023-09-07_12:37:27" 3 | #define V_GIT_INFO "master_v3.0.0-195-gafd6e625" 4 | -------------------------------------------------------------------------------- /Common/VersionConfig.h.in: -------------------------------------------------------------------------------- 1 | //VersionConfig.h.in 2 | #define V_BUILD_TIME "@build_time@" 3 | #define V_GIT_INFO "@GIT_BRANCH@_@GIT_HASH@" 4 | -------------------------------------------------------------------------------- /Icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/Icon.jpg -------------------------------------------------------------------------------- /Module_Logic/Test_Logic/BaseCommand.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/Module_Logic/Test_Logic/BaseCommand.cpp -------------------------------------------------------------------------------- /Module_Logic/Test_Logic/BaseCommand.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/Module_Logic/Test_Logic/BaseCommand.h -------------------------------------------------------------------------------- /Module_Logic/Test_Logic/Test_Logic.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ..\..\Build\Windows 5 | WindowsLocalDebugger 6 | 7 | 8 | ..\..\Build\Windows 9 | WindowsLocalDebugger 10 | 11 | -------------------------------------------------------------------------------- /NOTES-LINUX.md: -------------------------------------------------------------------------------- 1 | Notes for Linux platforms 2 | =========================== 3 | 4 | First enter the path: 5 | cd \Build\Linux 6 | cmake ../../ 7 | make 8 | -------------------------------------------------------------------------------- /NOTES-WINDOWS.md: -------------------------------------------------------------------------------- 1 | Notes for Windows platforms 2 | =========================== 3 | 4 | You can use VS2019 to complete the compilation on windows. 5 | 6 | Main server compilation path: 7 | \PSS_ASIO\PSS_ASIO.sln 8 | 9 | Packet parsing plugin compilation: 10 | PacketParse_Inferface\PacketParse_Interface.sln 11 | 12 | Logic plugin compilation path: 13 | Module_Logic\Test_Logic\Test_Logic.sln 14 | -------------------------------------------------------------------------------- /PSS_ASIO/Common/ConnectCounter.cpp: -------------------------------------------------------------------------------- 1 | #include "ConnectCounter.h" 2 | 3 | uint32 CConnectCounter::CreateCounter() 4 | { 5 | return ++count_index; 6 | } 7 | 8 | -------------------------------------------------------------------------------- /PSS_ASIO/Common/ConnectCounter.h: -------------------------------------------------------------------------------- 1 | #ifndef _PSS_CCONNECT_COUNTER_H 2 | #define _PSS_CCONNECT_COUNTER_H 3 | 4 | #include "define.h" 5 | #include "singleton.h" 6 | #include 7 | 8 | //全局计数器 9 | //用于所有不同类型的Connect的id生成,保证唯一。 10 | //add by freeeyes 11 | 12 | class CConnectCounter 13 | { 14 | public: 15 | uint32 CreateCounter(); //得到唯一的新ID 16 | 17 | private: 18 | std::atomic count_index{0}; 19 | }; 20 | 21 | using App_ConnectCounter = PSS_singleton; 22 | 23 | #endif 24 | -------------------------------------------------------------------------------- /PSS_ASIO/Common/CoreTimer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "define.h" 4 | #include "TimerManager.hpp" 5 | #include "singleton.h" 6 | 7 | class PSS_Timer_Manager 8 | { 9 | public: 10 | void Start() 11 | { 12 | m_timerMgr = std::make_shared(); 13 | 14 | m_ttTimerThread = std::thread([this]() 15 | { 16 | m_timerMgr->schedule(); 17 | PSS_LOGGER_DEBUG("[PSS_Timer_Manager::start]End."); 18 | }); 19 | } 20 | 21 | void Close() 22 | { 23 | if (nullptr != m_timerMgr) 24 | { 25 | m_timerMgr->Close(); 26 | m_ttTimerThread.join(); 27 | } 28 | } 29 | 30 | brynet::TimerMgr::Ptr GetTimerPtr() const 31 | { 32 | return m_timerMgr; 33 | } 34 | 35 | private: 36 | brynet::TimerMgr::Ptr m_timerMgr; 37 | std::thread m_ttTimerThread; 38 | }; 39 | 40 | using App_TimerManager = PSS_singleton; 41 | -------------------------------------------------------------------------------- /PSS_ASIO/Common/ICommunicationService.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "define.h" 4 | #include "asio.hpp" 5 | #include "IoContextPool.h" 6 | 7 | //服务器间链接接口虚类 8 | //add by freeyes 9 | 10 | class ICommunicationInterface 11 | { 12 | public: 13 | virtual ~ICommunicationInterface() = default; 14 | 15 | virtual void init_communication_service(CreateIoContextCallbackFunc callback, uint16 timeout_seconds) = 0; 16 | 17 | virtual bool add_connect(const CConnect_IO_Info& io_info, EM_CONNECT_IO_TYPE io_type) = 0; 18 | 19 | virtual void set_connect_id(uint32 server_id, uint32 connect_id) = 0; 20 | 21 | virtual void reset_connect(uint32 server_id) = 0; 22 | 23 | virtual void close_connect(uint32 server_id) = 0; 24 | 25 | virtual bool is_exist(uint32 server_id) = 0; 26 | 27 | virtual void close() = 0; 28 | 29 | virtual uint32 get_server_id(uint32 connect_id) = 0; 30 | 31 | virtual uint32 get_connect_id(uint32 server_id) = 0; 32 | }; 33 | -------------------------------------------------------------------------------- /PSS_ASIO/Common/IoContextPool.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/Common/IoContextPool.cpp -------------------------------------------------------------------------------- /PSS_ASIO/Common/IoContextPool.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/Common/IoContextPool.h -------------------------------------------------------------------------------- /PSS_ASIO/Common/IoListManager.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | //规范化接口服务器指针 4 | //add by freeeyes 5 | 6 | #include "define.h" 7 | #include "IoNetServer.h" 8 | 9 | class CIo_List_Manager 10 | { 11 | public: 12 | virtual void add_accept_net_io_event(string io_ip, io_port_type io_port, EM_CONNECT_IO_TYPE em_io_net_type, shared_ptr Io_Net_server) = 0; 13 | virtual void del_accept_net_io_event(string io_ip, io_port_type io_port, EM_CONNECT_IO_TYPE em_io_net_type) = 0; 14 | }; -------------------------------------------------------------------------------- /PSS_ASIO/Common/IoNetServer.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/Common/IoNetServer.h -------------------------------------------------------------------------------- /PSS_ASIO/Common/SendBuffer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | class CSendBuffer 6 | { 7 | public: 8 | std::string data_; 9 | std::size_t buffer_length_ = 0; 10 | 11 | void set(const char* _buffer, std::size_t _buffer_length) 12 | { 13 | data_.append(_buffer, _buffer_length); 14 | buffer_length_ = _buffer_length; 15 | } 16 | }; -------------------------------------------------------------------------------- /PSS_ASIO/Common/ServerService.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | //服务主入口 4 | //add by freeeyes 5 | #include "QueueService.h" 6 | #include "serverconfig.h" 7 | #include "CommunicationService.h" 8 | #include "SessionService.h" 9 | #include "NetSvrManager.h" 10 | 11 | #if PSS_PLATFORM == PLATFORM_WIN 12 | #include 13 | #endif 14 | 15 | class CServerService 16 | { 17 | public: 18 | bool init_service(const std::string& pss_config_file_name = config_file_name); 19 | void close_service(); 20 | void stop_service(); 21 | }; 22 | 23 | using App_ServerService = PSS_singleton; 24 | -------------------------------------------------------------------------------- /PSS_ASIO/Message/Iobridge.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/Message/Iobridge.cpp -------------------------------------------------------------------------------- /PSS_ASIO/Message/Iobridge.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | //提供IO桥接服务注册 4 | //add by freeeyes 5 | 6 | #include "IotoIo.h" 7 | #include "SessionAddrList.h" 8 | 9 | class CIoBridge : public IIoBridge 10 | { 11 | public: 12 | virtual ~CIoBridge() = default; 13 | 14 | bool add_session_io_mapping(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE from_io_type, const _ClientIPInfo& to_io, EM_CONNECT_IO_TYPE to_io_type, ENUM_IO_BRIDGE_TYPE bridge_type = ENUM_IO_BRIDGE_TYPE::IO_BRIDGE_BATH) final; 15 | bool delete_session_io_mapping(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE from_io_type) final; 16 | 17 | void regedit_bridge_session_info(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE io_type, uint32 session_id, std::shared_ptr from_session); 18 | void unregedit_bridge_session_info(const _ClientIPInfo& from_io, EM_CONNECT_IO_TYPE io_type, uint32 session_id); 19 | private: 20 | CIotoIo iotoio_; 21 | CSessionAddrList sesion_addr_list_; 22 | }; 23 | 24 | using App_IoBridge = PSS_singleton; 25 | -------------------------------------------------------------------------------- /PSS_ASIO/Message/ModuleInterfalce.cpp: -------------------------------------------------------------------------------- 1 | #include "ModuleInterfalce.h" 2 | 3 | void CModuleInterface::copy_from_module_list(const command_to_module_function& command_to_module_function) 4 | { 5 | command_to_module_function_.clear(); 6 | command_to_module_function_ = command_to_module_function; 7 | } 8 | 9 | int CModuleInterface::do_module_message(const CMessage_Source& source, std::shared_ptr recv_packet, std::shared_ptr send_packet) 10 | { 11 | auto f = command_to_module_function_.find(recv_packet->command_id_); 12 | if (f != command_to_module_function_.end()) 13 | { 14 | //执行插件函数 15 | return f->second(source, recv_packet, send_packet); 16 | } 17 | else 18 | { 19 | PSS_LOGGER_WARN("[CModuleInterface::do_module_message]no find command_id({0}-->{1})", source.connect_id_, recv_packet->command_id_); 20 | return -1; 21 | } 22 | } 23 | 24 | void CModuleInterface::close() 25 | { 26 | command_to_module_function_.clear(); 27 | } 28 | -------------------------------------------------------------------------------- /PSS_ASIO/Message/ModuleInterfalce.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | //处理消息和投递的类 4 | 5 | #include "define.h" 6 | #include "ISession.h" 7 | #include "LoadModule.h" 8 | 9 | class CModuleInterface 10 | { 11 | public: 12 | CModuleInterface() = default; 13 | 14 | void copy_from_module_list(const command_to_module_function& command_to_module_function); 15 | 16 | int do_module_message(const CMessage_Source& source, std::shared_ptr recv_packet, std::shared_ptr send_packet); 17 | 18 | void close(); 19 | 20 | private: 21 | command_to_module_function command_to_module_function_; 22 | }; -------------------------------------------------------------------------------- /PSS_ASIO/Message/SessionAddrList.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/Message/SessionAddrList.h -------------------------------------------------------------------------------- /PSS_ASIO/Message/SyncLogic.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include "ISession.h" 6 | #include "LoadModule.h" 7 | 8 | //同步在执行逻辑模块 9 | //add by freeeyes 10 | 11 | class CSyncLogic 12 | { 13 | public: 14 | CSyncLogic(void) = default; 15 | 16 | void Close(); 17 | 18 | void Init(const command_to_module_function& command_to_module_function); 19 | 20 | void do_sync_message_list(CMessage_Source& source, vector>& message_list, std::shared_ptr send_packet) const; 21 | 22 | bool do_sync_message(const uint16 command_id, const CMessage_Source& source, std::shared_ptr recv_packet, std::shared_ptr send_packet); 23 | 24 | private: 25 | command_to_module_function command_to_session_function_; //同步线程执行列表 26 | }; 27 | 28 | using App_SyncLogic = PSS_singleton; -------------------------------------------------------------------------------- /PSS_ASIO/PSS_ASIO.cpp: -------------------------------------------------------------------------------- 1 | // PSS_ASIO.cpp : 主工程 2 | // 3 | 4 | #include "ServerService.h" 5 | #include 6 | #include 7 | #include 8 | #if PSS_PLATFORM != PLATFORM_WIN 9 | #include 10 | #include 11 | #endif 12 | 13 | int main(int argc, char* argv[]) 14 | { 15 | //读取配置文件参数 16 | if (argc > 2) 17 | { 18 | log_screen("pass asio config file param error."); 19 | return 0; 20 | } 21 | 22 | //如果存在配置文件名称,则读取指定的配置文件 23 | if (argc == 2) 24 | { 25 | App_ServerService::instance()->init_service(argv[1]); 26 | } 27 | else 28 | { 29 | App_ServerService::instance()->init_service("server_config.json"); 30 | } 31 | return 0; 32 | } 33 | -------------------------------------------------------------------------------- /PSS_ASIO/PSS_ASIO.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ..\Build\Windows\ 5 | WindowsLocalDebugger 6 | 7 | 8 | 9 | 10 | ..\Build\Windows\ 11 | WindowsLocalDebugger 12 | 13 | -------------------------------------------------------------------------------- /PSS_ASIO/QueueSession/QueueService.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "define.h" 4 | #include "shm_queue/shm_queue.hpp" 5 | #include 6 | 7 | class CQueueSessionManager 8 | { 9 | public: 10 | CQueueSessionManager() = default; 11 | 12 | bool create_queue(shm_queue::shm_key key, size_t message_size = shm_queue_list_size, int message_count = shm_queue_list_count); 13 | void close(); 14 | bool close(shm_queue::shm_key key); 15 | bool send_queue_message(shm_queue::shm_key key, const char* message_text, size_t len); 16 | bool set_close_function(shm_queue::shm_key key, const shm_queue::queue_close_func& close_func); 17 | bool set_error_function(shm_queue::shm_key key, const shm_queue::queue_error_func& error_func); 18 | bool set_recv_function(shm_queue::shm_key key, const shm_queue::queue_recv_message_func& fn_logic); 19 | 20 | private: 21 | using hashmapqueuelist = unordered_map>; 22 | hashmapqueuelist queue_list_; 23 | std::mutex mutex_; 24 | }; 25 | 26 | using App_QueueSessionManager = PSS_singleton; 27 | -------------------------------------------------------------------------------- /PSS_ASIO/TcpSession/TcpSSLServer.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/TcpSession/TcpSSLServer.cpp -------------------------------------------------------------------------------- /PSS_ASIO/TcpSession/TcpSSLSession.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/TcpSession/TcpSSLSession.cpp -------------------------------------------------------------------------------- /PSS_ASIO/TcpSession/TcpServer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "TcpSession.h" 4 | #include "IoContextPool.h" 5 | #include "IoListManager.h" 6 | 7 | class CTcpServer : public std::enable_shared_from_this, public CIo_Net_server 8 | { 9 | public: 10 | CTcpServer(const CreateIoContextCallbackFunc& callback, const CConfigNetIO& config_io, CIo_List_Manager* io_list_manager); 11 | 12 | virtual ~CTcpServer() = default; 13 | 14 | void close() final; 15 | 16 | void start(); 17 | 18 | private: 19 | void do_accept(); 20 | 21 | void send_accept_listen_fail(std::error_code ec); 22 | 23 | std::shared_ptr acceptor_; 24 | uint32 packet_parse_id_ = 0; 25 | uint32 max_recv_size_ = 0; 26 | CreateIoContextCallbackFunc callback_; 27 | 28 | string server_ip_; 29 | io_port_type server_port_; 30 | CIo_List_Manager* io_list_manager_ = nullptr; 31 | }; 32 | 33 | -------------------------------------------------------------------------------- /PSS_ASIO/lib/libcrypto.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/lib/libcrypto.lib -------------------------------------------------------------------------------- /PSS_ASIO/lib/libssl.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO/lib/libssl.lib -------------------------------------------------------------------------------- /PSS_ASIO/sonar-project.properties: -------------------------------------------------------------------------------- 1 | sonar.projectKey=ArkNX_PSS_ASIO 2 | sonar.organization=openark 3 | sonar.projectName=PSS_ASIO 4 | sonar.projectVersion=3.0 5 | 6 | sonar.sources=./ 7 | sonar.cfamily.build-wrapper-output=../bw-output 8 | sonar.cfamily.gcov.reportsPath=../Build/Linux 9 | sonar.cfamily.threads=2 10 | sonar.cfamily.cache.enabled=false 11 | sonar.coverageReportPaths=../coverage.xml 12 | 13 | sonar.exclusions=**TTySession/**,**Common/**,**TcpSession/TcpClientSession.cpp**,**UdpSession/UdpClientSession.cpp**,**UdpSession/KcpServer.cpp**,**Message/IotoIo.cpp**,**TcpSession/TcpSSLServer.cpp**,**TcpSession/TcpSSLSession.cpp**,**TcpSession/TcpSSLServer.h**,**TcpSession/TcpSSLSession.h**,**TcpSession/TcpSSLClientSession.h**,**TcpSession/TcpSSLClientSession.cpp** 14 | -------------------------------------------------------------------------------- /PSS_ASIO_CLIENT/Common/SendBuffer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | class CSendBuffer 6 | { 7 | public: 8 | std::string data_; 9 | std::size_t buffer_length_ = 0; 10 | 11 | void set(const char* _buffer, std::size_t _buffer_length) 12 | { 13 | data_.append(_buffer, _buffer_length); 14 | buffer_length_ = _buffer_length; 15 | } 16 | }; -------------------------------------------------------------------------------- /PSS_ASIO_CLIENT/PSS_ASIO_CLIENT.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ..\Build\Windows\ 5 | WindowsLocalDebugger 6 | 7 | -------------------------------------------------------------------------------- /PSS_ASIO_CLIENT/TcpSession/TcpSession.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO_CLIENT/TcpSession/TcpSession.cpp -------------------------------------------------------------------------------- /PSS_ASIO_CLIENT/TcpSession/TcpSession.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include "asio.hpp" 8 | #include "tms.hpp" 9 | #include "singleton.h" 10 | 11 | #include "SendBuffer.h" 12 | #include "SessionBuffer.hpp" 13 | 14 | using asio::ip::tcp; 15 | 16 | class CTcpSession : public std::enable_shared_from_this 17 | { 18 | public: 19 | CTcpSession(asio::io_context& io_context); 20 | 21 | void start(uint32 connect_id, uint32 buffer_size, string server_ip, uint16 server_port); 22 | 23 | void Close(); 24 | 25 | void do_read(); 26 | 27 | void do_write(); 28 | 29 | void set_write_buffer(const char* data, size_t length); 30 | 31 | void clear_write_buffer(size_t length); 32 | 33 | void add_send_finish_size(size_t send_length); 34 | 35 | private: 36 | tcp::socket socket_; 37 | uint32 connect_id_ = 0; 38 | CSessionBuffer session_recv_buffer_; 39 | CSessionBuffer session_send_buffer_; 40 | 41 | size_t recv_data_size_ = 0; 42 | size_t send_data_size_ = 0; 43 | }; 44 | 45 | -------------------------------------------------------------------------------- /PSS_ASIO_CLIENT/UdpSession/UdpSession.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO_CLIENT/UdpSession/UdpSession.cpp -------------------------------------------------------------------------------- /PSS_ASIO_CLIENT/UdpSession/UdpSession.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include "asio.hpp" 8 | #include "tms.hpp" 9 | #include "singleton.h" 10 | 11 | #include "SendBuffer.h" 12 | #include "SessionBuffer.hpp" 13 | 14 | using asio::ip::udp; 15 | 16 | class CUdpSession : public std::enable_shared_from_this 17 | { 18 | public: 19 | CUdpSession(asio::io_context& io_context); 20 | 21 | void start(uint32 connect_id, uint32 buffer_size, string server_ip, uint16 server_port); 22 | 23 | void Close(); 24 | 25 | void do_read(); 26 | 27 | void do_write(); 28 | 29 | void set_write_buffer(const char* data, size_t length); 30 | 31 | void clear_write_buffer(size_t length); 32 | 33 | void add_send_finish_size(size_t send_length); 34 | 35 | private: 36 | udp::socket socket_; 37 | uint32 connect_id_ = 0; 38 | CSessionBuffer session_recv_buffer_; 39 | CSessionBuffer session_send_buffer_; 40 | udp::endpoint recv_endpoint_; 41 | udp::endpoint send_endpoint_; 42 | 43 | size_t recv_data_size_ = 0; 44 | size_t send_data_size_ = 0; 45 | }; 46 | -------------------------------------------------------------------------------- /PSS_ASIO_CLIENT/kcp_client.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO_CLIENT/kcp_client.cpp -------------------------------------------------------------------------------- /PSS_ASIO_CLIENT/kcp_client.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_ASIO_CLIENT/kcp_client.h -------------------------------------------------------------------------------- /PSS_PLUGIN_LOGIC_MAKER/Build/template/template_Command.cpp: -------------------------------------------------------------------------------- 1 | #include "[command head file]" 2 | 3 | void [class name]::Init(ISessionService* session_service) 4 | { 5 | session_service_ = session_service; 6 | 7 | [do message logic init] 8 | 9 | PSS_LOGGER_DEBUG("[[class name]::Init]init."); 10 | } 11 | 12 | [command logic function achieve] -------------------------------------------------------------------------------- /PSS_PLUGIN_LOGIC_MAKER/Build/template/template_Command.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | #include "IFrameObject.h" 5 | [include file] 6 | 7 | //define command id 8 | [command id define] 9 | 10 | class C[command class name] 11 | { 12 | public: 13 | void Init(ISessionService* session_service); 14 | 15 | [command logic function define] 16 | 17 | private: 18 | ISessionService* session_service_ = nullptr; 19 | [do message logic] 20 | }; 21 | 22 | -------------------------------------------------------------------------------- /PSS_PLUGIN_LOGIC_MAKER/PSS_PLUGIN_LOGIC_MAKER.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "read_logic_json_info.h" 3 | 4 | //逻辑插件生成工具 5 | //add by freeeyes 6 | 7 | int main() 8 | { 9 | Cread_logic_json_info read_logic_json_info; 10 | if (false == read_logic_json_info.read_json_file()) 11 | { 12 | std::cout << "Please enter the enter key to continue." << std::endl; 13 | std::cin.get(); 14 | return 0; 15 | } 16 | 17 | read_logic_json_info.make_project_path(); 18 | 19 | read_logic_json_info.make_logic_class_file(); 20 | 21 | read_logic_json_info.make_command_h_file(); 22 | 23 | read_logic_json_info.make_command_cpp_file(); 24 | 25 | read_logic_json_info.make_logic_plugin_cpp(); 26 | 27 | read_logic_json_info.make_do_message_h_file(); 28 | 29 | read_logic_json_info.make_do_message_cpp_file(); 30 | 31 | read_logic_json_info.make_Cmake_file(); 32 | 33 | std::cout << "Please enter the enter key to continue." << std::endl; 34 | std::cin.get(); 35 | return 0; 36 | } 37 | -------------------------------------------------------------------------------- /PSS_PLUGIN_LOGIC_MAKER/PSS_PLUGIN_LOGIC_MAKER.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ./Build 5 | WindowsLocalDebugger 6 | 7 | -------------------------------------------------------------------------------- /PSS_PLUGIN_LOGIC_MAKER/logic_maker_type.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_PLUGIN_LOGIC_MAKER/logic_maker_type.h -------------------------------------------------------------------------------- /PSS_PLUGIN_LOGIC_MAKER/read_logic_json_info.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PSS_PLUGIN_LOGIC_MAKER/read_logic_json_info.cpp -------------------------------------------------------------------------------- /PacketParse_Http/HttpFormat.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/PacketParse_Http/HttpFormat.cpp -------------------------------------------------------------------------------- /PacketParse_Http/PacketParse_Http.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ..\Build\Windows\ 5 | WindowsLocalDebugger 6 | 7 | 8 | ..\Build\Windows\ 9 | WindowsLocalDebugger 10 | 11 | -------------------------------------------------------------------------------- /PacketParse_Interface/PacketParse_Interface.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | 18 | 19 | 源文件 20 | 21 | 22 | -------------------------------------------------------------------------------- /PacketParse_Interface/PacketParse_Interface.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ..\Build\Windows\ 5 | WindowsLocalDebugger 6 | 7 | 8 | ..\Build\Windows\ 9 | WindowsLocalDebugger 10 | 11 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman -------------------------------------------------------------------------------- /jemalloc.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/bash 2 | ##################################### 3 | #make jemalloc 4 | ##################################### 5 | 6 | crtdir=$(pwd) 7 | libdir=${crtdir}/Build/Linux/commonlib 8 | mkdir -p ${libdir} 9 | 10 | if [ ! -f ${libdir}/libjemalloc.so ];then 11 | cd ./third_include/jemalloc 12 | ./autogen.sh 13 | ./configure 14 | make 15 | cp lib/libjemalloc.so.2 lib/libjemalloc.so ${libdir} 16 | #make clean 17 | cd ${crtdir} 18 | fi 19 | -------------------------------------------------------------------------------- /md/How_to_use_http_or_websocket.md: -------------------------------------------------------------------------------- 1 | Overview 2 | ======== 3 | 4 | You only need to compile the PacketParse_Http project, and then specify the specified port as the plug-in parser in the configuration file. 5 | -------------------------------------------------------------------------------- /tests/cmake/FindGTEST.cmake: -------------------------------------------------------------------------------- 1 | find_path(GTEST_INCLUDE_DIR gtest.h /usr/include/ /usr/local/include /usr/src/googletest/googletest/include/) 2 | find_library(GTEST_LIBRARY NAMES gtest PATHS /usr/lib/ /usr/lib/x86_64-linux-gnu/) 3 | 4 | if (GTEST_INCLUDE_DIR AND GTEST_LIBRARY) 5 | set(GTEST_FOUND TRUE) 6 | endif (GTEST_INCLUDE_DIR AND GTEST_LIBRARY) -------------------------------------------------------------------------------- /tests/make_test_report_html.sh: -------------------------------------------------------------------------------- 1 | python google_test.py Test_Pss_Asio.xml -------------------------------------------------------------------------------- /tests/test_Iotoio.cpp: -------------------------------------------------------------------------------- 1 | #include "test_Iotoio.h" 2 | 3 | int run_test_iotoio() 4 | { 5 | int ret = 0; 6 | CIotoIo io_to_io; 7 | _ClientIPInfo from_io; 8 | EM_CONNECT_IO_TYPE from_io_type = EM_CONNECT_IO_TYPE::CONNECT_IO_TCP; 9 | _ClientIPInfo to_io; 10 | EM_CONNECT_IO_TYPE to_io_type = EM_CONNECT_IO_TYPE::CONNECT_IO_UDP; 11 | 12 | from_io.m_strClientIP = "127.0.0.1"; 13 | from_io.m_u2Port = 10002; 14 | to_io.m_strClientIP = "127.0.0.1"; 15 | to_io.m_u2Port = 10003; 16 | 17 | io_to_io.add_session_io_mapping(from_io, from_io_type, to_io, to_io_type, ENUM_IO_BRIDGE_TYPE::IO_BRIDGE_BATH); 18 | 19 | io_to_io.delete_session_io_mapping(to_io, to_io_type); 20 | 21 | return 0; 22 | } 23 | -------------------------------------------------------------------------------- /tests/test_Iotoio.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/tests/test_Iotoio.h -------------------------------------------------------------------------------- /tests/test_buffpacket.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenArkStudio/PSS_ASIO/7bf978e3dffff1c396dbc4dbb5df3928ae6058e2/tests/test_buffpacket.cpp -------------------------------------------------------------------------------- /tests/test_buffpacket.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include "ReadBuffer.hpp" 5 | #include "WriteBuffer.hpp" 6 | 7 | int test_buffpacket_number_data(); 8 | 9 | int test_buffpacket_string_data(); 10 | 11 | int test_offset_number_data(); 12 | 13 | int test_net_order_data(); 14 | 15 | int test_string_read_write(); 16 | -------------------------------------------------------------------------------- /tests/test_pss_asio.cpp: -------------------------------------------------------------------------------- 1 | // test_pss_asio.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 2 | // 3 | 4 | #include 5 | #include 6 | 7 | #include "test_buffpacket.h" 8 | #include "test_Iotoio.h" 9 | 10 | TEST(run_test_iotoio, test_iotoio) 11 | { 12 | EXPECT_EQ(run_test_iotoio(), 0); 13 | } 14 | 15 | TEST(run_test_buffpacket, test_buffpacket_number) 16 | { 17 | EXPECT_EQ(test_buffpacket_number_data(), 0); 18 | } 19 | 20 | TEST(run_test_buffpacket, test_buffpacket_string) 21 | { 22 | EXPECT_EQ(test_buffpacket_string_data(), 0); 23 | } 24 | 25 | TEST(run_test_buffpacket, test_buffpacket_offset) 26 | { 27 | EXPECT_EQ(test_offset_number_data(), 0); 28 | } 29 | 30 | TEST(run_test_buffpacket, test_buffpacket_net_order) 31 | { 32 | EXPECT_EQ(test_net_order_data(), 0); 33 | } 34 | 35 | TEST(run_test_buffpacket, test_buffpacket_read_write) 36 | { 37 | EXPECT_EQ(test_string_read_write(), 0); 38 | } 39 | 40 | 41 | int main(int argc, char* argv[]) 42 | { 43 | //运行google test 测试用例 44 | ::testing::GTEST_FLAG(output) = "xml:Test_Pss_Asio.xml"; 45 | ::testing::InitGoogleTest(&argc, argv); 46 | 47 | return RUN_ALL_TESTS(); 48 | } 49 | -------------------------------------------------------------------------------- /tests/test_pss_asio.vcxproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | ..\Build\Windows 5 | WindowsLocalDebugger 6 | 7 | -------------------------------------------------------------------------------- /third_include/asio/associator.hpp: -------------------------------------------------------------------------------- 1 | // 2 | // associator.hpp 3 | // ~~~~~~~~~~~~~~ 4 | // 5 | // Copyright (c) 2003-2023 Christopher M. Kohlhoff (chris at kohlhoff dot com) 6 | // 7 | // Distributed under the Boost Software License, Version 1.0. (See accompanying 8 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 9 | // 10 | 11 | #ifndef ASIO_ASSOCIATOR_HPP 12 | #define ASIO_ASSOCIATOR_HPP 13 | 14 | #if defined(_MSC_VER) && (_MSC_VER >= 1200) 15 | # pragma once 16 | #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) 17 | 18 | #include "asio/detail/config.hpp" 19 | 20 | #include "asio/detail/push_options.hpp" 21 | 22 | namespace asio { 23 | 24 | /// Used to generically specialise associators for a type. 25 | template