build时,进行systemd路径创建

This commit is contained in:
ci 2022-06-28 17:38:53 +08:00
parent c7441d598e
commit d7dc2e5f47
6825 changed files with 0 additions and 1219307 deletions

View File

@ -1,88 +0,0 @@
---
Language: Cpp
DisableFormat: true
AccessModifierOffset: -8
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: true
AlignConsecutiveDeclarations: false
AlignEscapedNewlinesLeft: true
AlignOperands: false
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: true
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: true
BinPackArguments: true
BinPackParameters: true
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterEnum: true
AfterFunction: true
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: true
AfterUnion: true
AfterControlStatement: true
BeforeCatch: true
BeforeElse: true
IndentBraces: false
BreakBeforeBinaryOperators: None
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: true
ColumnLimit: 78
CommentPragmas: '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 0
ContinuationIndentWidth: 8
Cpp11BracedListStyle: false
DerivePointerAlignment: false
ExperimentalAutoDetectBinPacking: false
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
IndentCaseLabels: false
IndentWidth: 8
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 8
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 20
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Left
ReflowComments: true
SortIncludes: false
SpaceAfterCStyleCast: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp03
TabWidth: 8
UseTab: Always
...

View File

@ -1,12 +0,0 @@
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']

View File

@ -1,159 +0,0 @@
# Compiled Object files
*.slo
*.lo
*.o
# Compiled Dynamic libraries
*.so
*.sdf
*.ncb
*.suo
*.pch
*.pdb
*.idb
*.exp
*.map
# Compiled Static libraries
*.lai
*.la
*.lib
*.a
*.user
*.exe
*.VC.db
.vs/
x64/
build/
Debug/
Release/
#dist/
acl_cpp_vc2015.VC.VC.opendb
acl_cpp_vc2015.VC.db
app/gson/debug/
app/gson/gson
app/gson/gson.vcxproj.user
app/master_dispatch/manager/Debug/
app/redis_tools/redis_builder/Debug/
app/wizard/Debug/
app/wizard_demo/httpd_download/Debug/
app/wizard_demo/httpd_upload/Debug/
ipch/
lib_acl/Debug/
lib_acl/StdAfx.h.gch
lib_acl/debug/
lib_acl/master/acl_master
lib_acl/samples/dgate/Debug/
lib_acl/samples/mmap_string/Debug/
lib_acl/samples/winaio/Debug/
lib_acl/samples/zdb/Debug/
lib_acl_cpp/Debug/
lib_acl_cpp/lib_acl_cpp_vc2015.vcxproj.user
lib_acl_cpp/samples/aio/aio_client/Debug/
lib_acl_cpp/samples/aio/aio_client_ssl/Debug/
lib_acl_cpp/samples/aio/aio_connect/Debug/
lib_acl_cpp/samples/aio/aio_dns/Debug/
lib_acl_cpp/samples/aio/aio_ipc/Debug/
lib_acl_cpp/samples/aio/aio_server/Debug/
lib_acl_cpp/samples/aio/aio_server_ssl/Debug/
lib_acl_cpp/samples/aio/pkg_client/Debug/
lib_acl_cpp/samples/aio/pkg_server/Debug/
lib_acl_cpp/samples/cgi/Debug/
lib_acl_cpp/samples/cgi_upload/Debug/
lib_acl_cpp/samples/connect_manager/Debug/
lib_acl_cpp/samples/db/mysql_manager/Debug/
lib_acl_cpp/samples/db/mysql_pool/Debug/
lib_acl_cpp/samples/db/mysql_query/Debug/
lib_acl_cpp/samples/db/query/Debug/
lib_acl_cpp/samples/dbuf/dbuf1/Debug/
lib_acl_cpp/samples/dbuf/dbuf2/Debug/
lib_acl_cpp/samples/dbuf/dbuf3/Debug/
lib_acl_cpp/samples/dbuf/dbuf4/Debug/
lib_acl_cpp/samples/dircmp/Debug/
lib_acl_cpp/samples/dircopy/Debug/
lib_acl_cpp/samples/disque/disque_client/Debug/
lib_acl_cpp/samples/disque/disque_cluster/Debug/
lib_acl_cpp/samples/disque/disque_manager/Debug/
lib_acl_cpp/samples/disque/disque_pool/Debug/
lib_acl_cpp/samples/final_class/Debug/
lib_acl_cpp/samples/flock/Debug/
lib_acl_cpp/samples/fstream/Debug/
lib_acl_cpp/samples/http_client/Debug/
lib_acl_cpp/samples/http_request_manager/Debug/
lib_acl_cpp/samples/http_request_pool/Debug/
lib_acl_cpp/samples/http_servlet2/Debug/
lib_acl_cpp/samples/json/json0/Debug/
lib_acl_cpp/samples/json/json1/Debug/
lib_acl_cpp/samples/json/json10/Debug/
lib_acl_cpp/samples/json/json11/Debug/
lib_acl_cpp/samples/json/json12/Debug/
lib_acl_cpp/samples/json/json2/Debug/
lib_acl_cpp/samples/json/json3/Debug/
lib_acl_cpp/samples/json/json4/Debug/
lib_acl_cpp/samples/json/json5/Debug/
lib_acl_cpp/samples/json/json6/Debug/
lib_acl_cpp/samples/json/json7/Debug/
lib_acl_cpp/samples/json/json8/Debug/
lib_acl_cpp/samples/json/json9/Debug/
lib_acl_cpp/samples/master/master_aio/Debug/
lib_acl_cpp/samples/master/master_threads/Debug/
lib_acl_cpp/samples/master/master_udp/Debug/
lib_acl_cpp/samples/master_aio_proxy/Debug/
lib_acl_cpp/samples/md5/Debug/
lib_acl_cpp/samples/memcache_pool/Debug/
lib_acl_cpp/samples/mime/mail_build/Debug/
lib_acl_cpp/samples/mime/mime/Debug/
lib_acl_cpp/samples/mime/mime_base64/Debug/
lib_acl_cpp/samples/mime/mime_qp/Debug/
lib_acl_cpp/samples/redis/redis/Debug/
lib_acl_cpp/samples/redis/redis_client_cluster/Debug/
lib_acl_cpp/samples/redis/redis_client_cluster2/Debug/
lib_acl_cpp/samples/redis/redis_cluster/Debug/
lib_acl_cpp/samples/redis/redis_connection/Debug/
lib_acl_cpp/samples/redis/redis_geo/Debug/
lib_acl_cpp/samples/redis/redis_hash/Debug/
lib_acl_cpp/samples/redis/redis_hyperloglog/Debug/
lib_acl_cpp/samples/redis/redis_key/Debug/
lib_acl_cpp/samples/redis/redis_list/Debug/
lib_acl_cpp/samples/redis/redis_manager/Debug/
lib_acl_cpp/samples/redis/redis_pool/Debug/
lib_acl_cpp/samples/redis/redis_pubsub/Debug/
lib_acl_cpp/samples/redis/redis_set/Debug/
lib_acl_cpp/samples/redis/redis_string/Debug/
lib_acl_cpp/samples/redis/redis_trans/Debug/
lib_acl_cpp/samples/redis/redis_zset/Debug/
lib_acl_cpp/samples/redis/redis_zset_pool/Debug/
lib_acl_cpp/samples/rfc2047/Debug/
lib_acl_cpp/samples/scan_dir/Debug/
lib_acl_cpp/samples/singleton/Debug/
lib_acl_cpp/samples/smtp_client/Debug/
lib_acl_cpp/samples/socket_stream/Debug/
lib_acl_cpp/samples/ssl/https_proxy/Debug/
lib_acl_cpp/samples/ssl/ssl_client/Debug/
lib_acl_cpp/samples/ssl/ssl_server/Debug/
lib_acl_cpp/samples/string/blank_line/Debug/
lib_acl_cpp/samples/string/string1/Debug/
lib_acl_cpp/samples/string/string2/Debug/
lib_acl_cpp/samples/string/string3/Debug/
lib_acl_cpp/samples/thread/Debug/
lib_acl_cpp/samples/thread_pool/Debug/
lib_acl_cpp/samples/xml/xml1/Debug/
lib_acl_cpp/samples/xml/xml2/Debug/
lib_acl_cpp/src/acl_stdafx.hpp.gch
lib_protocol/Debug/
lib_protocol/debug/
lib_rpc/Debug/
android/acl/.externalNativeBuild
android/acl/.gradle
android/acl/.idea
android/acl/build
android/acl/gradle
# xmake
.xmake
.DS_Store
.idea
.vs
.vscode
cmake-build-debug

View File

@ -1,219 +0,0 @@
---
# The image used to start a container to do build jobs, which should has all
# build depencies installed
# coverage: '/total:[\t]*statements[\t]*\d+\.\d+%/'
# coverage: '/total:[\t]*\(statements\)[\t]*\d+\.\d+%/'
variables:
{
JOB_NAME: "${CI_PROJECT_NAME}"
}
.projecttest: &TEST
image: ${BUILDIMAGES}
stage: test
script:
- echo "OK"
.projectbuild: &BUILD
image: ${BUILDIMAGES}
stage: build
script:
- yum install -y zlib-devel
- cd packaging && make
artifacts:
paths:
- packaging/x86_64/acl-libs-*.rpm
- packaging/x86_64/acl-master-*.rpm
only:
- /^check-.*$/
except:
- tags@cdn-cloud/acl
.basepublishdev: &DEVEL
image: ${BUILDIMAGES}
stage: publish
script:
- yum install -y zlib-devel
- cd packaging && make
- cd ${CI_PROJECT_DIR} && /tools/publish.sh
coverage: '/lines......: \d+\.\d+%/'
only:
- /^devel-.*$/
artifacts:
paths:
- packaging/x86_64/acl-libs-*.rpm
- packaging/x86_64/acl-master-*.rpm
.lib_release: &LIB_RELEASE
image: ${BUILDIMAGES}
stage: publish
script:
- yum install -y zlib-devel
- cd packaging && make
- cd ${CI_PROJECT_DIR} && /tools/publish.sh -t prerelease
coverage: '/lines......: \d+\.\d+%/'
only:
- /^release-.*$/
artifacts:
paths:
- packaging/x86_64/acl-libs-*.rpm
#- packaging/x86_64/acl-master-*.rpm
.frame_release: &FRAME_RELEASE
image: ${BUILDIMAGES}
stage: publish
script:
- yum install -y zlib-devel
- cd packaging && make PKG_NAME=acl-master
- cd ${CI_PROJECT_DIR} && /tools/publish.sh -t prerelease
coverage: '/lines......: \d+\.\d+%/'
only:
- /^master-.*$/
artifacts:
paths:
- packaging/x86_64/*.rpm
stages:
- test
- publish
test:centos:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:5.8"
}
<<: *TEST
devel:centos5.8:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:5.8"
}
<<: *DEVEL
devel:centos5.9:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:5.9"
}
<<: *DEVEL
devel:centos6.4:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:6.4"
}
<<: *DEVEL
devel:centos6.6:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:6.6"
}
<<: *DEVEL
devel:centos7.0:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:7.0"
}
<<: *DEVEL
devel:centos7.2:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:7.2"
}
<<: *DEVEL
lib_release:centos5.8:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:5.8"
}
<<: *LIB_RELEASE
lib_release:centos5.9:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:5.9"
}
<<: *LIB_RELEASE
lib_release:centos6.4:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:6.4"
}
<<: *LIB_RELEASE
lib_release:centos6.6:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:6.6"
}
<<: *LIB_RELEASE
lib_release:centos7.0:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:7.0"
}
<<: *LIB_RELEASE
lib_release:centos7.2:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:7.2"
}
<<: *LIB_RELEASE
frame_release:centos5.8:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:5.8"
}
<<: *FRAME_RELEASE
frame_release:centos5.9:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:5.9"
}
<<: *FRAME_RELEASE
frame_release:centos6.4:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:6.4"
}
<<: *FRAME_RELEASE
frame_release:centos6.6:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:6.6"
}
<<: *FRAME_RELEASE
frame_release:centos7.0:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:7.0"
}
<<: *FRAME_RELEASE
frame_release:centos7.2:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:7.2"
}
<<: *FRAME_RELEASE
frame_release:centos8.2:
variables: {
BUILDIMAGES:
"docker-registry.qiyi.virtual/acl/centos-builder:8.2"
}
<<: *FRAME_RELEASE

View File

@ -1,187 +0,0 @@
# Generated by YCM Generator at 2021-11-18 20:34:43.424020
# This file is NOT licensed under the GPLv3, which is the license for the rest
# of YouCompleteMe.
#
# Here's the license text for this file:
#
# This is free and unencumbered software released into the public domain.
#
# Anyone is free to copy, modify, publish, use, compile, sell, or
# distribute this software, either in source code form or as a compiled
# binary, for any purpose, commercial or non-commercial, and by any
# means.
#
# In jurisdictions that recognize copyright laws, the author or authors
# of this software dedicate any and all copyright interest in the
# software to the public domain. We make this dedication for the benefit
# of the public at large and to the detriment of our heirs and
# successors. We intend this dedication to be an overt act of
# relinquishment in perpetuity of all present and future rights to this
# software under copyright law.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
# For more information, please refer to <http://unlicense.org/>
import os
import ycm_core
flags = [
'-isystem'
'./lib_acl/include',
'-isystem'
'./lib_protocol/include',
'-isystem'
'./lib_acl_cpp/include',
'-isystem'
'./lib_fiber/c/include',
'-isystem'
'./lib_fiber/cpp/include',
'-x',
'c++',
'-I.',
'-I./lib_acl/include',
'-I./lib_acl/src',
'-I./lib_protocol/include',
'-I./lib_protocol/src',
'-I./lib_acl_cpp/include',
'-I./lib_acl_cpp/src',
'-I./lib_fiber/c/include',
'-I./lib_fiber/c/src',
'-I./lib_fiber/cpp/include',
'-I./lib_fiber/cpp/src',
'-DACL_PREPARE_COMPILE',
'-DACL_WRITEABLE_CHECK',
'-DHAVE_CONFIG_H',
'-DNO_TCMALLOC_SAMPLES',
'-DUSE_BOOST_JMP',
'-DUSE_FAST_RING',
'-D_FILE_OFFSET_BITS=64',
'-D_POSIX_PTHREAD_SEMANTICS',
'-D_REENTRANT',
'-D_USE_FAST_MACRO',
'-D__CLASSIC_C__',
'-W',
'-Wall',
'-Wdeclaration-after-statement',
'-Werror',
'-Wno-long-long',
'-Wpointer-arith',
'-Wshadow',
'-Wuninitialized',
'-std=c++11',
]
# Set this to the absolute path to the folder (NOT the file!) containing the
# compile_commands.json file to use that instead of 'flags'. See here for
# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
#
# You can get CMake to generate this file for you by adding:
# set( CMAKE_EXPORT_COMPILE_COMMANDS 1 )
# to your CMakeLists.txt file.
#
# Most projects will NOT need to set this to anything; you can just change the
# 'flags' list of compilation flags. Notice that YCM itself uses that approach.
compilation_database_folder = ''
if os.path.exists( compilation_database_folder ):
database = ycm_core.CompilationDatabase( compilation_database_folder )
else:
database = None
SOURCE_EXTENSIONS = ['.cpp', '.cxx', '.cc', '.c' ]
def DirectoryOfThisScript():
return os.path.dirname( os.path.abspath( __file__ ) )
def MakeRelativePathsInFlagsAbsolute( flags, working_directory ):
if not working_directory:
return list( flags )
new_flags = []
make_next_absolute = False
path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]
for flag in flags:
new_flag = flag
if make_next_absolute:
make_next_absolute = False
if not flag.startswith( '/' ):
new_flag = os.path.join( working_directory, flag )
for path_flag in path_flags:
if flag == path_flag:
make_next_absolute = True
break
if flag.startswith( path_flag ):
path = flag[ len( path_flag ): ]
new_flag = path_flag + os.path.join( working_directory, path )
break
if new_flag:
new_flags.append( new_flag )
return new_flags
def IsHeaderFile( filename ):
extension = os.path.splitext( filename )[ 1 ]
return extension in [ '.H', '.h', '.hxx', '.hpp', '.hh' ]
def GetCompilationInfoForFile( filename ):
# The compilation_commands.json file generated by CMake does not have entries
# for header files. So we do our best by asking the db for flags for a
# corresponding source file, if any. If one exists, the flags for that file
# should be good enough.
if IsHeaderFile( filename ):
basename = os.path.splitext( filename )[ 0 ]
for extension in SOURCE_EXTENSIONS:
replacement_file = basename + extension
if os.path.exists( replacement_file ):
compilation_info = database.GetCompilationInfoForFile(
replacement_file )
if compilation_info.compiler_flags_:
return compilation_info
return None
return database.GetCompilationInfoForFile( filename )
def FlagsForFile( filename, **kwargs ):
if database:
# Bear in mind that compilation_info.compiler_flags_ does NOT return a
# python list, but a "list-like" StringVec object
compilation_info = GetCompilationInfoForFile( filename )
if not compilation_info:
return None
final_flags = MakeRelativePathsInFlagsAbsolute(
compilation_info.compiler_flags_,
compilation_info.compiler_working_dir_ )
else:
relative_to = DirectoryOfThisScript()
final_flags = MakeRelativePathsInFlagsAbsolute( flags, relative_to )
return {
'flags': final_flags,
'do_cache': True
}
def Settings( **kwargs ):
language = kwargs[ 'language' ]
if language == 'cfamily':
return {
'flags': flags
}
return {}

View File

@ -1,125 +0,0 @@
## acl 库的编译及使用
* acl 库的功能参见文章[acl介绍](http://zsxxsz.iteye.com/blog/576517) 及 [acl工程](https://github.com/acl-dev/acl/),本文主要讲述如何编译和使用 acl 库。
* acl 库其实包含七个库lib_acl 基础库、lib_protocolhttp 和 icmp 协议库、lib_acl_cpp封装了 lib_acl 和 lib_protocol 两个 C 库的 C++ 版本封装更是增加了丰富的功能、lib_fiber功能强大的网络协程库使开发者可以象使用 Go 语言一样快速编写基于协程的高并发服务应用、lib_dict封装了 bdb, cdb, Tokyo Cabinet 库的用于字典查询的库、lib_tls封装了openssl部分功能的库主要用于 lib_acl 的 ssl 加密传输)以及 lib_rpc封装了 Google 的 protobuf 的库)。其中,笔者用的最多还是 lib_acl 、lib_protocol 以及 lib_acl_cpp目前用得最多的库三个库所以本文主要介绍这三个库的编译与使用。
* acl 库目前支持 Linux、Solaris、FreeBSD、MacOS、IOS、Android 和 Windows 平台,欢迎读者将 acl 库移植至其它平台。
* [一、Linux/UNIX 平台上编译](#一linuxunix-平台上编译)
* [1、编译静态库](#1编译静态库)
* [1.1、编译 libacl.a 库](#11编译-libacla-库)
* [1.2、编译 libprotocol.a 库](#12编译-libprotocola-库)
* [1.3、编译 libacl_cpp.a 库](#13编译-libacl_cppa-库)
* [2、编译动态库](#2编译动态库)
* [3、编译成单一库](#3编译成单一库)
* [4、使用 cmake 编译](#4使用-cmake-编译)
* [二、Windows 平台](#二windows-平台)
* [1 编译vc2003/vc2008/vc2010/vc2012](#1-编译)
* [2 使用](#2-使用)
* [三、 注意事项](#三注意事项)
### 一、Linux/UNIX 平台上编译
需要使用 gcc/g++编译器及 gnu make 命令。
### 1、编译静态库
#### 1.1、编译 libacl.a 库
使用 gcc 编译:进入 lib_acl 目录,直接运行 make正常情况下便可在 lib 目录下生成 libacl.a 静态库,用户在使用 libacl.a 编写自己的程序时,需要在自己的 Makefile 文件中添加如下选项:
##### 1.1.1、编译选项:-I 指定 libacl.a 头文件所在目录(头文件在 lib_acl/include 目录下)
##### 1.1.2、链接选项:-L 指定 libacl.a 所在目录,-lacl 指定需要链接 libacl.a 库
##### 1.1.3、用户需要在自己的源程序中包含 lib_acl 的头文件,如下:
#include "lib_acl.h"
简单的 Makefile 示例:
~~~doc
test: main.o
gcc -o test main.o -lacl -lz -lpthread -ldl
main.o: main.c
gcc -O3 -Wall -c main.c -I./lib_acl/include
~~~~
#### 1.2、编译 libprotocol.a 库
使用 gcc 编译:进入 lib_protocol 目录,直接运行 make正常情况下便可以在 lib 目录下生成 lib_protocol.a 静态库,用户在使用 lib_protocol.a 编写自己的程序时,需要在自己的 Makefile 文件中添加如下选项:
##### 1.2.1、编译选项:-I 指定 lib_protocol.a 头文件目录(在 lib_protocol/include 目录下)
##### 1.2.2、链接选项:-L 指定 lib_protocol.a 所在目录,-L 指定 lib_acl.a 所在目录,-l_protocol -l_acl
##### 1.2.3、用户需要在自己的应用程序中包含 lib_protocol 头文件,如下:
#include "lib_protocol.h"
简单的 Makefile 示例:
~~~doc
test: main.o
gcc -o test main.o -lprotocol -lacl -lz -lpthread -ldl
main.o: main.c
gcc -O3 -Wall -c main.c -I./lib_acl/include -I./lib_protocol/include
~~~
#### 1.3、编译 libacl_cpp.a 库
使用 g++ 编译器: 进入 lib_acl_cpp 目录,运行 make static 编译 libacl_cpp.a 静态库,便可 lib 目录下生成 libacl_cpp.a用户在使用 libacl_cpp.a 编写程序时,需要在自己的 Makefile 文件中添加如下选项:
##### 1.3.1、编译选项:-I 指定 libacl_cpp.a 头文件目录(在 lib_acl_cpp/include 目录下)
##### 1.3.2、链接选项:-L
指定 libacl_cpp.a 所在目录,-L 指定 libprotocol.a 所在目录,-L 指定 libacl.a 目录。如:-L./lib_acl_cpp/lib -lacl_cpp -L./lib_protocol/lib -lprotocol -L./lib_acl/lib -lacl一定要注意这三个库的依赖关系libprotocol.a 依赖于 libacl.alibacl_cpp.a 依赖于 libprotocol.a 及 lib_acl.a在使用 g++ 进行编译时必须保证库的依赖顺序,被依赖的库总是应放在后面,否则在链接程序时会报函数不存在。
##### 1.3.3、用户需要在自己的应用中包含 lib_acl.hpp 头文件,如下:
#include "acl_cpp/lib_acl.hpp"
简单的 Makefile 示例:
~~~doc
test: main.o
g++ -o test main.o -lacl_cpp -lprotocol -lacl -lz -lpthread -ldl
main.o: main.cpp
g++ -O3 -Wall -c main.cpp -I./lib_acl_cpp/include -I./lib_acl/include -I./lib_protocol/include
~~~
如果程序仅用到了 libacl_cpp.a 库中类及函数,则只需要包含 libacl_cpp.a 的头文件即可,至于该库所依赖的 libprotocol.a 及 libacl.a 库的头文件已经做了特殊隐含处理,不必显式包含。
### 2、编译动态库
编译 libacl.so, libprotocol.so, libacl_cpp.so 的方式与编译静态库的方式有所不同,需要分别进入三个目录执行: make shared rpath=${lib_path},其中 shared 表示需要编译动态库,${lib_path} 需要用实际的目标路径替换比如make shared rpath=/opt/acl/lib则会将动态库编译好后存放于 /opt/acl/lib 目录编译这三个库的顺序为libacl.so --> libprotocol.so --> libacl_cpp.so。
另外,在编译 libacl_cpp.so 时,还需要提前编译在 resource 目录下的 polarssl 库,编译完后再编译 libacl_cpp.so 同时需要指定 polarssl.lib 库所在的路径;如果不需要 SSL 通讯方式,则需要打开 lib_acl_cpp/Makefile 文件,去年编译选项:-DHAS_POLARSSL。
应用程序在使用这三个动态库时的头文件的包含方式与静态库的相同,连接动态库的方式与静态库类似,只是将 .a 替换成 .so 即可,同时也要求包含的顺序与上述静态库相同。如:
- a、编译时的头文件包含方式-I/opt/acl/include/acl -I/opt/acl/include/protocol -II/opt/acl/include
- b、连接时的库文件包含方式-L/opt/acl/lib -lacl_cpp -lprotocol -lacl
- c、运行时的库文件加载方式-Wl,-rpath,/opt/acl/lib该参数指定程序运行时需要加载三个动态库的位置在 /opt/acl/lib 目录下。
### 3、编译成单一库
为了方便使用,还提供了将以上三个库合成一个库的方法,在 acl 库目录下运行make build_one则会生成统一库libacl_all.a 及 libacl_all.so该库包含了 libacllib_protocollib_acl_cpp 三个库。则编写的 Makefile 就更为简单:
~~~
test: main.o
g++ -o test main.o -lacl_all -lz -lpthread -ldl
main.o: main.cpp
g++ -O3 -Wall -c main.cpp -I./lib_acl_cpp/include -I./lib_acl/include -I./lib_protocol/include
~~~
### 4、使用 cmake 编译
除以上使用 make 工具对 acl 库进行编译外,同时提供了使用 cmake 工具对 acl 库进行编译,编译过程非常简单:
~~~
$mkdir build
$cd build
$cmake ..
$make
~~~
### 二、Windows 平台
### 1 编译
在 acl 项目的根目录下,多个 VC 的工程文件用户可根据自身需要打开工程文件acl_cpp_vc2003.slnacl_cpp_vc2008.slnacl_cpp_vc2010.slnacl_cpp_vc2012.sln最早也支持VC6。用户可以选择编译 lib_acl、lib_protocol、lib_acl_cpp 的静态库调试版、静态库发布版、动态库调试版以及动态库发布版,编译完成后,会在 acl\dist\lib\win32 目录生成的静态库有:
lib_acl_vc20xxd.lib、lib_acl_vc20xx.lib、lib_protocol_vc20xxd.lib 和 lib_protocol_vc20xx.lib
生成的与动态库相关的文件有lib_acl_d.dll/lib_acl_d.liblib_acl.dll/lib_acl.liblib_protocol_d.dll/lib_protocol_d.liblib_protocol.dll/lib_protocol.liblib_acl_cpp_d.dll/lib_acl_cpp_d.liblib_acl_cpp.dll/lib_acl_cpp.lib。
### 2 使用
- a在 win32 平台下使用 lib_acl 和 lib_protocol 静态库时,只需要在包含目录中添加
lib_acl/include、lib_protocol/include 以及 lib_acl_cpp/include
所在的路径,在链接时指定静态库路径及静态库名称。
- b在 win32 平台下使用 lib_acl 的动态库时,不仅要做与 a 中所指定的操作而且需要在预处理器定义中添加ACL_DLL在使用 lib_protocol 的动态库需要在预处理器定义中添加HTTP_DLL 和 ICMP_DLL在使用 lib_acl_cpp 的动态库时需要在预处理器定义中添加ACL_CPP_DLL。
### 三、注意事项
因为 lib_acl 是最基础的库,而 lib_protocol 依赖于 lib_acllib_acl_cpp 依赖于 lib_protocol 和 lib_acl所在生成动态库时需要注意生成顺序编译顺序为lib_acllib_protocollib_acl_cpp。
- 个人微博http://weibo.com/zsxxsz/
- acl 下载https://sourceforge.net/p/acl/
- github 地址https://github.com/acl-dev/acl/
- osc git 地址https://git.oschina.net/acl-dev/acl
- QQ 群242722074

View File

@ -1,95 +0,0 @@
cmake_minimum_required(VERSION 2.8.0)
project(Acl)
#message(${CMAKE_SYSTEM_NAME})
#if(COMMAND CMAKE_POLICY)
# message(STATUS "Set CMake Policy")
# if(CMAKE_VERSION GREATER "2.8")
# CMAKE_POLICY(set CMP0015 OLD)
# CMAKE_POLICY(set CMP0010 OLD)
# CMAKE_POLICY(set CMP0011 OLD)
# endif(CMAKE_VERSION GREATER "2.8")
#endif(COMMAND CMAKE_POLICY)
enable_testing()
#include(CheckCCompilerFlag)
#check_c_compiler_flag("-std=c99" COMPILER_SUPPORTS_C99)
#check_c_compiler_flag("-std=c89" COMPILER_SUPPORTS_C89)
#if(COMPILER_SUPPORTS_C99)
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")
#elseif(COMPILER_SUPPORTS_C89)
# set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c89")
#else()
# message(STATUS "The cc compiler ${CMAKE_C_COMPILER} has no C99 or C89 support. Please use a different cc compiler.")
#endif()
#include(CheckCXXCompilerFlag)
#check_cxx_compiler_flag("-std=c++11" COMPILER_SUPPORTS_CXX11)
#check_cxx_compiler_flag("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
#if(COMPILER_SUPPORTS_CXX11)
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#elseif(COMPILER_SUPPORTS_CXX0X)
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
#else()
# message(STATUS "The c++ compiler ${CMAKE_CXX_COMPILER} has no C++11 or C++0x support. Please use a different c++ compiler.")
#endif()
#set(CMAKE_BUILD_TYPE Release)
#set(CMAKE_BUILD_TYPE Release CACHE STRING "set build type to release")
if (${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR})
message(FATAL_ERROR "Please into another dir to build!")
endif()
#string(TOUPPER ${CMAKE_SYSTEM_NAME} CMAKE_SYSTEM_NAME)
if (CMAKE_SYSTEM_NAME MATCHES "Android")
message(STATUS "current platform: Android")
message(STATUS "current ndk path: ${CMAKE_ANDROID_NDK}")
elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
message(STATUS "current platform: Linux")
elseif (CMAKE_SYSTEM_NAME MATCHES "Darwin")
message(STATUS "current platform: Darwin")
set(CMAKE_MACOSX_RPATH build)
elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
message(STATUS "current platform: FreeBSD")
include_directories(
#/usr/include/c++/4.2
#/usr/include/c++/4.2/backward
/usr/local/include
/usr/include
)
link_directories(
/usr/lib
/usr/local/lib
)
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--export-dynamic")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,./:./lib:../:../lib")
elseif (CMAKE_SYSTEM_NAME MATCHES "Windows")
message(STATUS "current platform: Windows")
else()
message(FATAL_ERROR "unknown CMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}")
endif()
if (CMAKE_SYSTEM_NAME MATCHES "Darwin")
set(CMAKE_MACOSX_RPATH build)
endif()
add_subdirectory(lib_acl acl)
add_subdirectory(lib_protocol protocol)
add_subdirectory(lib_acl_cpp acl_cpp)
if (ACL_BUILD_SHARED MATCHES "YES")
add_dependencies(protocol acl)
add_dependencies(acl_cpp protocol acl)
endif()
#if (CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "Android")
#if (CMAKE_SYSTEM_NAME MATCHES "Linux" OR CMAKE_SYSTEM_NAME MATCHES "Darwin")
add_subdirectory(lib_fiber/c fiber)
add_subdirectory(lib_fiber/cpp fiber_cpp)
if (ACL_BUILD_SHARED MATCHES "YES")
add_dependencies(fiber_cpp acl_cpp protocol acl fiber)
endif()
#endif()

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,257 +0,0 @@
## acl库使用FAQ
* [一、基础问题](#一基础问题)
* [1、acl 库是啥、主要包含哪些功能?](#1acl-库是啥主要包含哪些功能)
* [2、acl 库支持哪些平台?](#2acl-库支持哪些平台)
* [3、acl 库主要包含几个库?](#3acl-库主要包含几个库)
* [4、acl 库有哪些外部依赖库?](#4acl-库有哪些外部依赖库)
* [5、没有这些第三方库 acl 能否使用?](#5没有这些第三方库-acl-能否使用)
* [6、acl 库的源码下载位置在哪儿?](#6acl-库的源码下载位置在哪儿)
* [二、编译&使用问题](#二编译使用问题)
* [1、acl 库的编译过程?](#1acl-库的编译过程)
* [2、Linux 平台下库的编译顺序问题?](#2linux-平台下库的编译顺序问题)
* [3、Unix/Linux 平台下编译 acl 库时的编译选项是什么](#3unixlinux-平台下编译-acl-库时的编译选项是什么)
* [4、请给出 Linux 平台下最简单的一个 Makefile](#4请给出-linux-平台下最简单的一个-makefile)
* [5、Linux 平台下找不到 libz.a 库怎么办?](#5linux-平台下找不到-libza-库怎么办)
* [6、Linux 平台下 acl 库能打包成一个库吗?](#6linux-平台下-acl-库能打包成一个库吗)
* [7、Linux 平台下如何使用 ssl 功能?](#7linux-平台下如何使用-ssl-功能)
* [8、Linux 下如何使用 mysql 功能?](#8linux-下如何使用-mysql-功能)
* [三、各个功能模块的使用问题](#三各个功能模块的使用问题)
* [(一)、网络通信](#一网络通信)
* [、HTTP 模块](#二http-模块)
* [1. acl HTTP 服务器是否支持断点下载功能?](#1-acl-http-服务器是否支持断点下载功能)
* [2. acl HTTP 服务器是否支持文件上传功能?](#2-acl-http-服务器是否支持文件上传功能)
* [3. acl HTTP 模块是否支持服务器/客户端两种模式?](#3-acl-http-模块是否支持服务器客户端两种模式)
* [4. acl HTTP 模块是否支持 websocket 通信协议?](#4-acl-http-模块是否支持-websocket-通信协议)
* [5. acl HTTP 模块是否支持 session](#5-acl-http-模块是否支持-session)
* [6. HttpServletRequest 为何读不到 json 或 xml 数据体?](#6-HttpServletRequest-为何读不到-json-或-xml-数据体)
* [7. http_request 因未设 Host 字段而出错的问题](#7-http_request-因未设-Host-字段而出错的问题)
* [、Redis 模块](#三redis-模块)
* [1. acl redis 库是否支持集群功能?](#1-acl-redis-库是否支持集群功能)
* [2. acl redis 库是如何划分的?](#2-acl-redis-库是如何划分的)
* [3. acl redis 库中的哪些类对象操作是线程安全的?](#3-acl-redis-库中的哪些类对象操作是线程安全的)
* [4. acl redis 客户库当连接断开时是否会重连?](#4-acl-redis-客户库当连接断开时是否会重连)
* [(四)、协程模块](#四协程模块)
* [1. 协程里面的非阻塞是什么原理的?](#1-协程里面的非阻塞是什么原理的)
* [2. acl 协程库是否支持多线程?](#2-acl-协程库是否支持多线程)
* [3. acl 协程库如何支持多核 CPU](#3-acl-协程库如何支持多核-cpu)
* [4. acl 协程里针对 mysql 客户端库的协程化是否修改了 mysql 库的源码?](#4-acl-协程里针对-mysql-客户端库的协程化是否修改了-mysql-库的源码)
* [5. acl 协程库支持域名解析功能吗?](#5-acl-协程库支持域名解析功能吗)
* [6. acl 协程库的系统 errno 号如何处理?](#6-acl-协程库的系统-errno-号如何处理)
* [7. 如果启动的协程过多,会不会对于后端例如 mysql 之类服务造成并发压力?如何避免?](#7-如果启动的协程过多会不会对于后端例如-mysql-之类服务造成并发压力如何避免)
* [(五)、服务器模块](#五服务器模块)
* [1. 有几种服务器编程模型?均有何特点?](#1-有几种服务器编程模型均有何特点)
* [2. acl_master 的作用是什么?支持哪些平台?](#2-acl_master-的作用是什么支持哪些平台)
* [3. 没有 acl_master 控制管理,服务子进程是否可以单独运行?](#3-没有-acl_master-控制管理服务子进程是否可以单独运行)
* [4. 手工模式下运行时遇到“idle timeout -- exiting, idle”怎么办](#4-手工模式下运行时遇到idle-timeout----exiting-idle怎么办)
* [5. acl_master 控制模式下,服务子进程如何预启动多个进程?](#5-acl_master-控制模式下服务子进程如何预启动多个进程)
* [6. acl_master 控制模式下,如何只监听内网地址?](#6-acl_master-控制模式下如何只监听内网地址)
* [(六)、数据库模块](#六数据库模块)
* [1. acl 数据库客户端支持哪些数据库?](#1-acl-数据库客户端支持哪些数据库)
* [2. acl 数据库模块如何使用?](#2-acl-数据库模块如何使用)
* [(七)、邮件&mime模块](#七邮件mime模块)
### 一、基础问题
### 1、acl 库是啥、主要包含哪些功能?
acl 工程是一个跨平台支持LINUXWIN32SolarisMacOSFreeBSD的网络通信库及服务器编程框架同时提供更多的实用功能库。通过该库用户可以非常容易地编写支持多种模式(多线程、多进程、非阻塞、触发器、UDP方式、协程方式)的服务器程序WEB 应用程序数据库应用程序。此外该库还提供了常见应用的客户端通信库HTTP、SMTP、ICMP、redis、disque、memcache、beanstalk、handler socket常见流式编解码库XML/JSON/MIME/BASE64/UUCODE/QPCODE/RFC2047 等。
### 2、acl 库支持哪些平台?
目前主要支持 Linux/Windows/Macos/Freebsd/Solaris(x86)。
### 3、acl 库主要包含几个库?
主要包括lib_acl用 C 语言写的基础库、lib_protocol用 C 语言写的一些网络应用协议库、lib_acl_cpp用 C++ 语言编写,封装了 lib_acl/lib_protocol 两个库,同时增加更多实用的功能库)、 lib_fiber用 C 语言编写的支持高性能、高并发的网络协程库、lib_rpc用C++语言编写的封装了 google protobuf 网络库)。
### 4、acl 库有哪些外部依赖库?
lib_acl/lib_protocol/lib_fiber 仅依赖系统基础库lib_acl_cpp 库的 db 模块依赖于 mysql 客户端库、sqlite 库stream 流模块依赖于 polarssl 库(该库源码附在 acl/resource 目录下),另外,在 UNIX/LINUX 平台下还需要压缩库 --- libz 库(一般 LINUX 会自带该压缩库lib_rpc 依赖于 protobuf 库。
### 5、没有这些第三方库 acl 能否使用?
可以。默认情况下,没有这些第三方库编译和使用 acl 库是没有问题的,只是不能使用 mysql/sqlite/ssl/protobuf 功能。
### 6、acl 库的源码下载位置在哪儿?
- githubhttps://github.com/acl-dev/acl/
- oschina: https://git.oschina.net/acl-dev/acl/
- sourceforgehttps://sourceforge.net/projects/acl/
### 二、编译&使用问题
### 1、acl 库的编译过程?
acl 库的编译过程请参考:[acl 的编译与使用](http://zsxxsz.iteye.com/blog/1506554) 博客。
### 2、Linux 平台下库的编译顺序问题?
lib_acl 库是 acl 库中的基础库其它库均依赖于该库库的依赖顺序为lib_protocol 依赖于 lib_acllib_acl_cpp 依赖于 lib_acl 和 lib_protocollib_fiber 依赖于 lib_acllib_rpc 依赖于 lib_acl/lib_protocol/lib_acl_cpp。因此当应用在连接 acl 库时,需要注意连接的顺序为:-l_acl_cpp -l_protocol -l_acl。
### 3、Unix/Linux 平台下编译 acl 库时的编译选项是什么?
在 Unix/Linux 平台下编译 acl 库时需要指明 gcc 的编译选项acl 库自带的 Makefile 会自动识别操作系统而选择不同的编译选项,下面列出不同 Unix 平台的不同编译选项(当前版本已自动识别系统类型,无需添加如下编译选项):
- Linux 平台:-DLINUX2
- MacOS 平台:-DMACOSX
- FreeBSD 平台:-DFREEBSD
- Solaris(x86) 平台:-DSUNOS5
### 4、请给出 Linux 平台下最简单的一个 Makefile
下面是使用 acl 库的最简单的编译选项(因为排版问题,当拷贝下面内容至 Makefile 时,需要注意将每行前空格手工转成 TAB 键):
~~~
fiber: main.o
g++ -o fiber main.o \
-L./lib_fiber/lib -lfiber_cpp \
-L./lib_acl_cpp/lib -l_acl_cpp \
-L./lib_protocol/lib -l_protocol \
-L./lib_acl/lib -l_acl \
-L./lib_fiber/lib -lfiber \
-lz -lpthread -ldl
main.o: main.cpp
g++ -O3 -Wall -c main.cpp -DLINUX2 \
-I./lib_acl/include \
-I./lib_acl_cpp/include \
-I./lib_fiber/cpp/include \
-I./lib_fiber/c/include
~~~
### 5、Linux 平台下找不到 libz.a 库怎么办?
一般 Unix/Linux 平台下系统会自带 libz.a 或 libz.so 压缩库,如果找不到该库,则可以在线安装或采用编译安装 zlib 库,针对 Centos 和 Ubuntu 可分别通过以下方式在线安装(均需切换至 root 身份):
- Centosyum install zlib-devel
- Ubuntuapt-get install zlib1g.dev
### 6、Linux 平台下 acl 库能打包成一个库吗?
可以。在 acl 目录下运行make build_one 则可以将 lib_acl/lib_protocol/lib_acl_cpp 打包成一个完整的库lib_acl.a/lib_acl.so则应用最终使用时可以仅连接这一个库即可。
### 7、Linux 平台下如何使用 ssl 功能?
目前 acl 中的 lib_acl_cpp C++ 库通过集成 polarssl 支持 ssl 功能,所支持的 polarssl 源码的下载位置https://github.com/acl-dev/third_party, 老版本 acl 通过静态连接 libpolarssl.a 实现对 ssl 的支持,当前版本则是通过动态加载 libpolarssl.so 方式实现了对 ssl 的支持,此动态支持方式更加灵活方便,无须特殊编译条件,也更为通用。
#### 7.1、老版本 acl 对 ssl 的支持方式
如果使用上面统一的 acl 库,则可以在 acl 根目录下编译时运行make build_one polarssl=on如果使用三个库lib_acl.alib_protocol.alib_acl_cpp.a则在编译前需要先指定环境变量export ENV_FLAGS=HAS_POLARSSL然后分别编译这三个库解压 polarssl-1.2.19-gpl.tgz然后进入 polarssl-1.2.19 目录运行make 编译后在 polarssl-1.2.19/library 目录得到 libpolarssl.a 库;最后在编译应用时将 libpolarssl.a 连接进你的工程中即可。
#### 7.2、当前版本 acl 对 ssl 的支持方式
- 首先下载解压 polarssl 库后进入polarssl-1.2.19 目录,运行 make lib SHARED=yes在library 目录下会生成 libpolarssl.so 动态库;
- 在 acl 根目录下运行 make build_one则会将 acl 的三个基础库libacl.a, libprotocol.a, libacl_cpp.a 合成 libacl_all.a 一个静态库,将 libacl.so, libprotocol.so, lib_acl_cpp.so 合成 libacl_all.so 一个动态库;
- 当程序启动时添加代码acl::polarssl_conf::set_libpath("libpolarssl.so"); 其中的路径根据实际位置而定,这样 acl 模块在需要 ssl 通信时会自动切换至 ssl 方式。
### 8、Linux 下如何使用 mysql 功能?
lib_acl_cpp 库是以动态加载方式加载 mysql 动态库的,所以在编译 lib_acl_cpp 时mysql 功能就已经被编译进去 acl库中了。用户仅需要将 mysql 动态库通过函数 acl::db_handle::set_loadpath 注册进 acl 库中即可;至于 mysql 客户端库,用户可以去 mysql 官方下载或在 acl/resource 目录下编译 mysql-connector-c-6.1.6-src.tar.gz。
### 三、各个功能模块的使用问题
### (一)、网络通信
### 、HTTP 模块
#### 1. acl HTTP 服务器是否支持断点下载功能?
支持。acl HTTP 模块支持断点续传功能一个支持断点下载的服务器示例参照acl\app\wizard_demo\httpd_download。
#### 2. acl HTTP 服务器是否支持文件上传功能?
支持。参考示例acl\app\wizard_demo\httpd_upload。
#### 3. acl HTTP 模块是否支持服务器/客户端两种模式?
支持。目前 acl 的 HTTP 协议模块同时支持客户端及服务端模式,即你既可以使用 acl HTTP 编写客户端程序,又可以编写服务器程序,其中 acl 中的 http_request/http_request_pool/http_request_manager 类用来编写客户端程序http_response/HttpServlet/HttpServletRequest/HttpServeletResponse 用来编写服务器程序。
#### 4. acl HTTP 模块是否支持 websocket 通信协议?
支持。可以参考示例lib_acl_cpp\samples\websocket。
#### 5. acl HTTP 模块是否支持 session
支持。acl HTTP 模块当用在服务器编程时支持 session 存储,目前支持使用 memcached 或 redis 存储 session 数据。
#### 6. HttpServletRequest 为何读不到 json 或 xml 数据体
当 HTTP 客户端请求的数据体为 json 或 xml 时,默认情况下从 acl::HttpServletRequest 对象中是读不到 json/xml 数据的,主要原因在于 HttpServletRequest 内置了自动读取并解析 json/xml/x-www-form-urlencoded 类型数据的功能,使用者只需直接获取解析后的对象即可,如针对 json 类数据体:
```c++
void get_json(acl::HttpServletRequest& req)
{
acl::json* json = req.getJson();
...
}
```
如果应用想自己读取并解析 json 数据,则需要在调用 acl::HttpServlet::setParseBody(false),禁止 acl::HttpServletRequest 类对象内部自动读取数据。
#### 7. http_request 因未设 Host 字段而出错的问题
在使用 acl::http_request 类对象访问标准 WEB 服务器nginx如果没有设置 HTTP 请求头中的 Host 字段nginx 会返回 400 错误,主要是 HTTP/1.1 协议要求 HTTP 客户端必须设置 Host 字段,方法如下:
```c++
bool http_client(void)
{
acl::http_request req("www.sina.com.cn:80");
acl::http_header& hdr = req.request_header();
hdr.set_url("/").set_host("www.sina.com.cn");
if (!req.request(NULL, 0)) {
return false;
}
acl::string body;
if (req.get_body(body)) {
printf("%s\r\n", body.c_str());
}
...
}
```
### 、Redis 模块
#### 1. acl redis 库是否支持集群功能?
答案acl redis 客户端库同时支持集群和单机方式的 redis-server。
#### 2. acl redis 库是如何划分的?
acl redis 客户端库主要分为两类:命令类和连接类:
- **命令类主要有**redis_key, redis_string, redis_hash, redis_list, redis_set, redis_zset, redis_cluster, redis_geo, redis_hyperloglog, redis_pubsub, redis_transaction, redis_server, redis_script, 这些类都继承于基类 redis_command同时子类 redis 又继承了所有这些命令类,以便于用户可以直接使用 acl::redis 操作所有的 redis 客户端命令;
- **连接类主要有**redis_client, redis_client_pool, redis_client_cluster命令类对象通过这些连接类对象与 redis-server 进行交互redis_client 为单连接类redis_client_pool 为连接池类,这两个类仅能在非集群模式的 redis-server 环境中使用,不支持 redis-server 的集群模式,必须使用 redis_client_cluster 连接集群模式的 redis-server同时 redis_client_cluster 也兼容非集群模式的连接。
#### 3. acl redis 库中的哪些类对象操作是线程安全的?
acl redis 库中的所有命令类对象及 redis_client 单连接类对象不能同时被多个线程使用(就象 std::string 一样不能跨线程使用redis_client_poolredis_client_cluster 两个连接类对象是线程操作安全的,同一个对象可以被多个线程同时使用。
#### 4. acl redis 客户库当连接断开时是否会重连?
acl redis 库中的连接类中redis_clientredis_client_poolredis_client_cluster 三个连接类对象当检测到网络连接异常断开时会尝试自动重连,上层使用者无需考虑连接断开重试的情况。
### (四)、协程模块
#### 1. 协程里面的非阻塞是什么原理的?
比如我现在需要访问数据库这个动作肯定是个阻塞的操作如果有10个协程进行数据库访问这个非阻塞是怎么理解的
协程方式在底层将系统的 IO APIread/write 等)都 hook 了数据库操作也要调用这些API所以表面上的阻塞式DB操作在协程底层的IO也会被转为非阻塞模式。
#### 2. acl 协程库是否支持多线程?
acl 协程库支持多线程方式,只是支持的方式与 go 语言有所不同。用户可以创建多个线程,每个线程一个协程调度器,线程之间的协程调度是相互隔离的,正如多进程与多线程之间的关系一样(每个进程内可以启动多个线程,但进程之间的线程的调度过程是隔离的),在每个线程内部可以创建大量 acl 协程,每个协程均由其所属的线程内的协程调度器调度运行。
#### 3. acl 协程库如何支持多核 CPU
正如 2所说用户可以启动多个线程每个线程一个 acl 协程调度器,每个协程调度器负责调度与其同属相同线程的协程运行状态。
#### 4. acl 协程里针对 mysql 客户端库的协程化是否修改了 mysql 库的源码?
没有。mysql 客户端库使用的系统 IO API 为 read/write/poll而 acl 协程库 HOOK 了系统底层的 IO 过程,因此当将用户程序与 mysql 库及 acl 协程库一起编译后mysql 库的 IO 过程直接被 acl 协程库 HOOK 的 API 接管,从而将 mysql 客户端库协程化而无须修改一行 mysql 库代码。
#### 5. acl 协程库支持域名解析功能吗?
支持。很多 C/C++ 实现的协程库并未实现 gethostbyname(_r) 函数导致用户在使用协程编程遇到域名解析时还需要借助单独的线程来完成acl 库本身从 DNS 协议层次实现了域名解析过程acl 协程库基于此功能模块 HOOK 了系统的 gethostbyname(_r) API 而无须借助第三方函数库或起单独的线程完成域名解析。
#### 6. acl 协程库的系统 errno 号如何处理?
acl 协程库实现了协程安全的 errno 号,正如之前使用多线程编程时 errno 可以与每个线程绑定一样,在 acl 协程库里 errno 也是与每个 acl 协程进行绑定的。因此,当你调用 strerror(errno) 时也是协程安全的。
#### 7. 如果启动的协程过多,会不会对于后端例如 mysql 之类服务造成并发压力?如何避免?
当启动用协程较多且都需要 mysql 操作时的确会造成 mysql 服务器的并发压力。为避免此并发压力acl 协程库提供了协程信号量,用来针对后端不支持高并发的服务提供连接保护。
### (五)、服务器模块
#### 1. 有几种服务器编程模型?均有何特点?
目前 acl 库中提供进程池模型、线程池模型、非阻塞模型、协程模型、UDP 通信模型、触发器模型。其中各个编程模型的特点如下:
__进程池模型__ 每个进程处理一个客户端连接,当需要处理多个连接时则需要启动多个进程,此模型的最大缺点是并发度低,优点是编程简单;
__线程池模型__ 由多个线程组成线程池处理大量的客户端连接,只有当某个连接有数据可读时该连接才会与一个线程绑定,处理完毕则线程归还给线程池,此模型的优点是启动少数线程便处理较大并发,缺点是需要注意线程编程时的线程安全问题;
__非阻塞模型__ 一个进程内仅有一个工作线程,通过采用非阻塞通信方式可以支持非常大的客户端并发连接,优点是资源消耗小、支持大并发、性能高,缺点是编程复杂度高;
__协程模型__ 每个客户端连接与一个协程绑定,每个进程内一个工作线程,每个线程内可以创建大 量的协程,优点是支持大并发、性能高、编程简单、应用场景比较广,缺点是占用内存要比非阻塞模型高;
__UDP通信模型__ 支持简单的 UDP 通信方式;触发器模型:常用在定时任务的应用场景中。
以上的服务模型均可启动多个进程,通过配置文件的配置项来决定启动进程的数量。
#### 2. acl_master 的作用是什么?支持哪些平台?
acl_master 为由以上各个服务器编写的服务进程的控制管理程序, acl_master
启动、停止各个服务子进程控制子进程的启动数量及预启动策略监控子进程的异常情况acl_master 有点类似于 LINUX 下的 xinetd 服务进程,不同之处是 acl_master 功能更完善强大,支持服务子进程的常驻留、半驻留,而 xinetd 则只针对一个连接创建一个进程,不能用于高并发的服务应用场景。
目前 acl_master 进程仅支持 LINUX/MACOS/FREEBSD/SOLARIS(X86等 UNIX 平台,不支持 WINDOWS 平台。
#### 3. 没有 acl_master 控制管理,服务子进程是否可以单独运行?
可以。在没有 acl_master 的情况下,由以上各个服务模型编写的服务程序可以通过手工方式启动。启动方式一般为:./xxxx alone xxxx.cf这样服务程序便以 alone 模式启动运行,具体情况可以参考 main.cpp 里的启动方式;在 WINDOWS 平台下只能是以 alone 模式手工启动运行。
#### 4. 手工模式下运行时遇到"idle timeout -- exiting, idle"怎么办?
因为 acl 的服务器编程模型均支持半驻留方式(即运行空闲一段时间或处理连接次数达到设定值后会自动退出,这样的好处是:可以定期通过进程退出释放可能存在的资源泄露,另一方面便于用户在开发时通过 valgrind 进行内存检查),如果让进程不退出,可以在 alone 模式下给服务程序传递启动配置文件,如启动方式为:./xxxx alone xxxx.cf传递方式可以看 main.cpp 和相关头文件),不同的服务器模型分别采取下面不同的配置项:
__程池模型__ 将配置项 single_use_limit 和 single_idle_limit 设为 0
__线程池模型__ 将配置项 ioctl_use_limit 和 ioctl_idle_limit 设为 0
__非阻塞模型__ 将配置项 aio_use_limit 和 aio_idle_limit 设为 0
__协程模型__ 将配置项 fiber_use_limit 和 fiber_idle_limit 设为 0
__UDP通信模型__ 将配置项 udp_use_limit 和 udp_idle_limit 设为 0
__触发器模型__ 将配置项 trigger_use_limit 设为 0。
#### 5. acl_master 控制模式下,服务子进程如何预启动多个进程?
需要修改每个服务子进程的配置文件将配置项master_maxproc 及 master_prefork 设置成要启动的进程数(设置值需相同),同时需要将 xxx_use_limit 及 xxx_idle_limit 配置项设成 0 以防止子进程空闲退出xxx_use_limit 及 xxx_idle_limit 的依每种服务器模型而不同具体可参考上面4中的说明。
#### 6. acl_master 控制模式下,如何只监听内网地址?
在 acl_master 模式下,可以将 master_service 配置项支持模糊匹配方式,即可以将监听地址写成 `192.168.*.*:8192``10.0.*.*:8192` 方式,这样 acl_master 会自动扫描服务器所有的网卡地址,但只监听服务匹配条件的内网地址,这样为统一部署提供方便。
### (六)、数据库模块
#### 1. acl 数据库客户端支持哪些数据库?
当前 acl 数据库客户端库支持的数据库有mysqlpostgresqlsqlite。
#### 2. acl 数据库模块如何使用?
acl 数据库模块封装了官方数据库的驱动(包括 mysqlpostgresqlsqlite所以使用者应先下载所对应的官方数据库驱动考虑到版本的一致性建议从 https://github.com/acl-dev/third_party 处下载;
另外acl 数据库模块是采用动态加载方式加载数据库驱动的,所以使用者应将编译好的数据库动态库放置在合适的位置,并调用 `acl::db_handle::set_loadpath()` 设置数据库驱动动态库的全路径,以便于 acl 数据库模块内部可以使用该路径进行动态加载。
### (七)、邮件&mime模块
。。。
- 微博http://weibo.com/zsxxsz
- qq 群242722074

View File

@ -1,165 +0,0 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

View File

@ -1,260 +0,0 @@
SHELL = /bin/sh
#CC = g++
CC = ${ENV_CC}
#AR = ar
AR = ${ENV_AR}
ARFL = rv
#RANLIB = ranlib
RANLIB = ${ENV_RANLIB}
#OSNAME = $(shell uname -sm)
OSNAME = $(shell uname -s)
OSTYPE = $(shell uname -m)
DESTDIR =
PREFIX = usr
BIN_PATH = $(DESTDIR)/$(PREFIX)/bin/
LIB_ACL = $(DESTDIR)/$(PREFIX)/lib
INC_ACL = $(DESTDIR)/$(PREFIX)/include/acl-lib
LIB_DIST = ./dist/lib
INC_PATH = ./dist/include
RPATH =
DATE_NOW = 20`date +%y`.`date +%m`.`date +%d`
MAKE_ARGS =
SYSLIB = -lpthread -lz
LDFLAGS = -shared
polarssl =
ifeq ($(CC),)
CC = g++
endif
ifeq ($(AR),)
AR = ar
endif
ifeq ($(RANLIB),)
RANLIB = ranlib
endif
ifeq ($(findstring on, $(polarssl)), on)
CFLAGS += -DHAS_POLARSSL
endif
ifeq ($(findstring Linux, $(OSNAME)), Linux)
ifeq ($(findstring i686, $(OSTYPE)), i686)
RPATH = linux32
endif
ifeq ($(findstring x86_64, $(OSTYPE)), x86_64)
RPATH = linux64
endif
ifeq ($(findstring aarch64, $(OSTYPE)), aarch64)
RPATH = aarch64
endif
n = `cat /proc/cpuinfo | grep processor | wc -l`
MAKE_ARGS = -j $(n)
SYSLIB += -lrt -ldl
endif
# For Darwin
ifeq ($(findstring Darwin, $(OSNAME)), Darwin)
# CC += -arch x86_64 -arch arm64
RPATH = macos
SYSLIB += -rdynamic -L/usr/lib -liconv
LDFLAGS = -dynamiclib -shared
endif
ifeq ($(findstring FreeBSD, $(OSNAME)), FreeBSD)
RPATH = freebsd
SYSLIB += -L/usr/local/lib -liconv
endif
ifeq ($(findstring SunOS, $(OSNAME)), SunOS)
ifeq ($(findstring i386, $(OSTYPE)), i386)
RPATH = sunos_x86
endif
SYSLIB += -liconv
endif
##############################################################################
.PHONY = check help all_lib all samples all clean install uninstall uninstall_all build_one
VERSION = 3.5.3-13
default: build_one acl_master
help h:
@(echo "usage: make help|all|all_lib|all_samples|clean|install|uninstall|uninstall_all|build_one")
all_lib:
@if test "$(polarssl)" = "on"; then \
ENV_FLAGS = $(ENV_FLAGS):HAS_POLARSSL \
export ENV_FLAGS; \
else \
export ENV_FLAGS; \
fi
# @(cd lib_acl; make pch)
@(cd lib_acl; make $(MAKE_ARGS))
@(cd lib_protocol; make $(MAKE_ARGS))
@(cd lib_acl_cpp; make check)
# @(cd lib_acl_cpp; make pch)
@(cd lib_acl_cpp; make $(MAKE_ARGS))
@(cd lib_rpc; make $(MAKE_ARGS))
@if test "$(OSNAME)" = "Linux" -o "$(OSNAME)" = "FreeBSD" -o "$(OSNAME)" = "Darwin"; then cd lib_fiber; make; fi
all_samples: all_lib
@(cd unit_test; make $(MAKE_ARGS))
@(cd lib_acl/samples; make)
@(cd lib_protocol/samples; make)
@(cd lib_acl_cpp/samples; make)
# @(cd lib_dict; make $(MAKE_ARGS))
# @(cd lib_tls; make $(MAKE_ARGS))
all: all_lib acl_master all_samples
clean cl:
@(cd lib_acl; make clean)
@(cd lib_protocol; make clean)
@(cd lib_acl_cpp; make clean)
@(cd lib_fiber; make clean)
@(cd lib_rpc; make clean)
@(cd unit_test; make clean)
@(cd lib_acl/samples; make clean)
@(cd lib_protocol/samples; make clean)
@(cd app; make clean)
@(rm -f libacl_all.a libacl.a)
@(rm -f libacl_all.so libacl.so)
# @(cd lib_dict; make clean)
# @(cd lib_tls; make clean)
acl_master: all_lib
@(cd app/master/daemon; make $(MAKE_ARGS); make install)
@(cd app/master/tools/lib_global; make $(MAKE_ARGS);)
@(cd app/master/tools/master_ctl; make $(MAKE_ARGS); make install)
packinstall:
@(echo "")
@(echo "begin copy file...")
$(shell mkdir -p $(INC_ACL)/acl)
$(shell mkdir -p $(INC_ACL)/acl_cpp)
$(shell mkdir -p $(INC_ACL)/protocol)
$(shell mkdir -p $(LIB_ACL))
@echo "copying lib_acl/include/* $(INC_ACL)/acl/"
@cp -Rf lib_acl/include/* $(INC_ACL)/acl/
@echo "copying lib_acl_cpp/include/acl_cpp/* $(INC_ACL)/acl_cpp/"
@cp -Rf lib_acl_cpp/include/acl_cpp/* $(INC_ACL)/acl_cpp/
@echo "copying lib_protocol/include/* $(INC_ACL)/protocol/"
@cp -Rf lib_protocol/include/* $(INC_ACL)/protocol/
@echo "copying libacl_all.a $(LIB_ACL)/libacl_all.a";
@cp -f libacl_all.a $(LIB_ACL)/libacl_all.a;
@if test "$(OSNAME)" = "Linux"; then \
$(shell mkdir -p $(INC_ACL)/fiber) \
$(shell mkdir -p $(INC_ACL)/fiber/detail) \
echo "copying lib_fiber/c/include/fiber/* $(INC_ACL)/fiber/"; \
cp -f lib_fiber/c/include/fiber/* $(INC_ACL)/fiber/; \
echo "copying lib_fiber/cpp/include/fiber/* $(INC_ACL)/fiber/"; \
cp -f lib_fiber/cpp/include/fiber/* $(INC_ACL)/fiber/; \
cp -f lib_fiber/cpp/include/fiber/detail/* $(INC_ACL)/fiber/detail/; \
echo "copying lib_fiber/lib/libfiber.a $(LIB_ACL)/libfiber.a"; \
cp -f lib_fiber/lib/libfiber.a $(LIB_ACL)/libfiber.a; \
echo "copying lib_fiber/lib/libfiber_cpp.a $(LIB_ACL)/libfiber_cpp.a"; \
cp -f lib_fiber/lib/libfiber_cpp.a $(LIB_ACL)/libfiber_cpp.a; \
fi
install_master:
$(shell mkdir -p $(BIN_PATH))
$(shell mkdir -p $(DESTDIR)/opt/soft/services/)
$(shell mkdir -p $(DESTDIR)/opt/soft/acl-master/conf/service)
$(shell mkdir -p ./dist/master/libexec/$(RPATH))
$(shell mkdir -p ./dist/master/bin/$(RPATH))
@(cd app/master/daemon; make install)
@(cd app/master/tools/master_ctl; make install)
@(cd lib_fiber; make)
#@echo "copying app/master/daemon/acl_master $(BIN_PATH)"
#@cp -f app/master/daemon/acl_master $(BIN_PATH)
@(cd dist/master && ./setup.sh $(DESTDIR) /opt/soft/acl-master)
install:
@(echo "")
@(echo "begin copy file...")
$(shell mkdir -p $(INC_PATH)/acl)
$(shell mkdir -p $(INC_PATH)/protocol)
$(shell mkdir -p $(INC_PATH)/acl_cpp)
$(shell mkdir -p $(LIB_DIST)/$(RPATH))
$(shell mkdir -p ./dist/master/libexec/$(RPATH))
cp -f app/master/daemon/acl_master ./dist/master/libexec/$(RPATH)/
cp -f libacl_all.a $(LIB_DIST)/$(RPATH)/
cp -f lib_acl/lib/libacl.a $(LIB_DIST)/$(RPATH)/
cp -f lib_acl_cpp/lib/libacl_cpp.a $(LIB_DIST)/$(RPATH)/
cp -f lib_protocol/lib/libprotocol.a $(LIB_DIST)/$(RPATH)/
cp -Rf lib_acl/include/* $(INC_PATH)/acl/
cp -Rf lib_protocol/include/* $(INC_PATH)/protocol/
cp -Rf lib_acl_cpp/include/acl_cpp/* $(INC_PATH)/acl_cpp/
uninstall:
@(echo "")
@(echo "begin remove file...")
rm -f ./dist/master/libexec/$(RPATH)/*
rm -f $(LIB_DIST)/$(RPATH)/libacl_all.a
rm -f $(LIB_DIST)/$(RPATH)/libacl.a
rm -f $(LIB_DIST)/$(RPATH)/libprotocol.a
rm -f $(LIB_DIST)/$(RPATH)/libacl_cpp.a
rm -f $(LIB_DIST)/$(RPATH)/lib_dict.a
rm -f $(LIB_DIST)/$(RPATH)/lib_tls.a
rm -Rf $(INC_PATH)/protocol/*
rm -Rf $(INC_PATH)/acl_cpp/*
rm -Rf $(INC_PATH)/acl/*
rm -Rf $(INC_PATH)/dict/*
rm -Rf $(INC_PATH)/tls/*
uninstall_all:
@(echo "")
@(echo "begin remove all dist files ...")
rm -Rf $(INC_PATH)/acl/*
rm -Rf $(INC_PATH)/protocol/*
rm -Rf $(INC_PATH)/acl_cpp/*
rm -Rf $(INC_PATH)/dist/*
rm -Rf $(INC_PATH)/tls/*
rm -f ./dist/master/libexec/linux32/*
rm -f ./dist/master/libexec/linux64/*
rm -f ./dist/master/libexec/sunos_x86/*
rm -f ./dist/master/libexec/freebsd/*
rm -f $(LIB_DIST)/linux32/*.a
rm -f $(LIB_DIST)/linux64/*.a
rm -f $(LIB_DIST)/sunos_x86/*.a
rm -f $(LIB_DIST)/freebsd/*.a
rm -f $(LIB_DIST)/win32/*.lib
rm -f $(LIB_DIST)/win32/*.dll
rm -f win32_build/vc/lib_acl/*.map
rm -f win32_build/vc/lib_acl/*.ilk
rm -f win32_build/vc/lib_protocol/*.map
rm -f win32_build/vc/lib_protocol/*.ilk
RELEASE_PATH = release
build_one: all_lib
@(mkdir -p $(RELEASE_PATH); mkdir -p $(RELEASE_PATH)/acl; \
mkdir -p $(RELEASE_PATH)/protocol; \
mkdir -p $(RELEASE_PATH)/acl_cpp)
@(cp lib_acl/lib/libacl.a $(RELEASE_PATH)/acl/)
@(cp lib_protocol/lib/libprotocol.a $(RELEASE_PATH)/protocol/)
@(cp lib_acl_cpp/lib/libacl_cpp.a $(RELEASE_PATH)/acl_cpp/)
@(cd $(RELEASE_PATH)/acl; ar -x libacl.a)
@(cd $(RELEASE_PATH)/protocol; ar -x libprotocol.a)
@(cd $(RELEASE_PATH)/acl_cpp; ar -x libacl_cpp.a)
$(AR) $(ARFL) ./libacl_all.a $(RELEASE_PATH)/acl/*.o \
$(RELEASE_PATH)/protocol/*.o $(RELEASE_PATH)/acl_cpp/*.o
$(RANLIB) ./libacl_all.a
rm -f libacl.a
ln -s libacl_all.a libacl.a
$(CC) $(LDFLAGS) -o ./libacl_all.so $(RELEASE_PATH)/acl_cpp/*.o \
$(RELEASE_PATH)/protocol/*.o $(RELEASE_PATH)/acl/*.o \
$(SYSLIB)
rm -f libacl.so
ln -s libacl_all.so libacl.so
@(rm -rf $(RELEASE_PATH))
@echo ""
@echo "Over, libacl_all.a and libacl_all.so were built ok!"
@echo ""
check:
@(echo "TYPE: $(OSTYPE)")
@(echo "OSNAME: $(OSNAME)")
@(echo "RPATH: $(RPATH)")

View File

@ -1,438 +0,0 @@
[中文简体](README_CN.md)
# Acl -- One Advanced C/C++ Library for Unix/Windows
# 0. About Acl project
The Acl (Advanced C/C++ Library) project is powerful multi-platform network communication library and service framework, suppoting LINUX, WIN32, Solaris, FreeBSD, MacOS, AndroidOS, iOS. Many applications written by Acl run on these devices with Linux, Windows, iPhone and Android and serve billions of users. There are some important modules in Acl project, including network communcation, server framework, application protocols, multiple coders, etc. The common protocols such as HTTP/SMTP/ICMP//MQTT/Redis/Memcached/Beanstalk/Handler Socket are implemented in Acl, and the codec library such as XML/JSON/MIME/BASE64/UUCODE/QPCODE/RFC2047/RFC1035, etc., are also included in Acl. Acl also provides unified abstract interface for popular databases such as Mysql, Postgresql, Sqlite. Using Acl library users can write database application more easily, quickly and safely.
Architecture diagram:
![Overall architecture diagram](res/img/architecture_en.png)
<hr>
* [0. About Acl project](#0-about-acl-project)
* [1. The six most important modules](#1-the-six-most-important-modules)
* [1.1. Basic network module](#11-basic-network-module)
* [1.2. Coroutine](#12-coroutine)
* [1.3. HTTP module](#13-http-module)
* [1.4. Redis client](#14-redis-client)
* [1.5. MQTT module](#15-mqtt-module)
* [1.6. Server framework](#16-server-framework)
* [2. The other important modules](#2-the-other-important-modules)
* [2.1. MIME module](#21-mime-module)
* [2.2. Codec module](#22-codec-module)
* [2.3. Database module](#23-database-module)
* [2.4. Connection pool manager](#24-connection-pool-manager)
* [2.5. The other client libraries](#25-the-other-client-libraries)
* [2.6. DNS module](#26-dns-module)
* [3. Platform support and compilation](#3-platform-support-and-compilation)
* [3.1. Compiling Acl on different platforms](#31-compiling-acl-on-different-platforms)
* [3.2. Precautions when compiling on Windows](#32-precautions-when-compiling-on-windows)
* [4. Quick start](#4-quick-start)
* [4.1. The first demo with Acl](#41-the-first-demo-with-acl)
* [4.2. Simple TCP server](#42-simple-tcp-server)
* [4.3. Simple TCP client](#43-simple-tcp-client)
* [4.4. Coroutine TCP server](#44-coroutine-tcp-server)
* [4.5. One Http client](#45-one-http-client)
* [4.6. Coroutine Http server](#46-coroutine-http-server)
* [4.7. One Redis client](#47-one-redis-client)
* [5. More about](#5-more-about)
* [5.1. Samples](#51-samples)
* [5.2. FAQ](#52-faq)
* [5.3. Who are using acl?](#53-who-are-using-acl)
* [5.4. License](#54-license)
* [5.5. Reference](#55-reference)
<hr>
# 1. The six most important modules
As a C/C++ foundation library, Acl provides many useful functions for users to develop applications, including six important modules: Network, Coroutine, HTTP, Redis client, MQTT, and Server framework.
## 1.1. Basic network module
- Stream processing module
This module is the most basic streaming communication module for the entire acl network communication. It not only supports network streaming, but also supports file streaming. It mainly supports:
- Read data by line, compatible with \r\n under win32, and compatible with the end of \n under UNIX
- Read data by line but require automatic removal of the trailing \n or \r\n
- Read data as a string separator
- Read the specified length of data
- Try to read a row of data or try to read the specified length of data
- Detect network IO status
- Write a row of data
- Write data by formatter, similar to fprintf
- File stream location operation, similar to fseek
- Write a set of data at once, similar to writev under unix
- Truncate the file, similar to ftrunk
- Get the file size
- Get the current file stream pointer location, similar to ftell
- Get the file size
- Obtain the local address and remote address of the network stream
- Network operation module
- This module mainly supports network server monitoring (supports TCP/UDP/UNIX domain socket), network client connection (supports TCP/UNIX domain socket), DNS domain name query and result cache (supports calling system gethostbyname/getaddrinfo function and direct Send DNS protocol two ways), socket (socket) operation and take the local network card and other functions.
- Non-blocking network flow
- Support non-blocking mode connection, read (by row read, specified length read), write (write line, write specified length, write a set of data) and other operations.
- Common network application protocol library
- It mainly supports common network application protocols, such as: HTTP, SMTP, ICMP, in which HTTP and ICMP modules implement blocking and non-blocking communication methods. In addition, the HTTP protocol supports server and client in C++ version of lib_acl_cpp. Two communication methods, when used as a server, support the interface usage similar to JAVA HttpServlet. When used as a client mode, it supports connection pool and cluster management. The module supports both cookie, session, and HTTP MIME file upload. Rich functions such as block transfer, automatic character set conversion, automatic decompression, and breakpoint resume.
- Common network communication library
- Support memcached, beanstalk, handler socket client communication library, the communication library supports connection pool mode.
## 1.2. Coroutine
The coroutine module in Acl can be used on multiple platforms, and there are many engineering practices in some important projects.
- Run on Linux, MacOS, Windows, iOS and Android
- Support x86, Arm architecture
- Support select/poll/epoll/kqueue/iocp/win32 GUI message
- The DNS protocol has been implemented in acl coroutine, so DNS API can also be used in coroutine model
- Hook system IO API on Unix and Windows
- **Read API:** read/readv/recv/recvfrom/recvmsg
- **Write API:** write/writev/send/sendto/sendmsg/sendfile64
- **Socket API:** socket/listen/accept/connect/setsockopt
- **event API:** select/poll/epoll_create/epoll_ctl/epoll_wait
- **DNS API:** gethostbyname/gethostbyname_r/getaddrinfo/freeaddrinfo
- Support **shared stack** mode to minimize memory usage
- Synchronization primitive
- Coroutine **mutex**, **semphore** can be used between coroutines
- Coroutine **event** can be used between coroutines and threads
- For more information, see **[Using Acl fiber](lib_fiber/README_en.md)**
## 1.3. HTTP module
Supports HTTP/1.1, can be used in client and server sides.
- HttpServlet interface like Java(server side)
- Connection pool mode(client side)
- Chunked block transfer
- Gzip compression/decompression
- SSL encrypted
- Breakpoints transmission
- Setting/acquisition of cookies
- Session managment(server side)
- Websocket transmission
- HTTP MIME format
- Sync/Async mode
- ...
## 1.4. Redis client
The redis client module in Acl is powerful, high-performance and easy to use.
- Support Bitmap/String/Hash/List/Set/Sorted Set/PubSub/HyperLogLog/Geo/Script/Stream/Server/Cluster/etc.
- Provides stl-like C++ interface for each redis command
- Automaticaly cache and adapt the changing of hash slots of the redis cluster on the client
- Communication in single, cluster or pipeline mode
- Connection pool be used in signle or cluster mode
- High performance in cluster or pipline mode
- Same interface for single, cluster and pipeline modes
- Retry automatically for the reason of network error
- Can be used in the shared stack coroutine mode
- For more information, see **[Using Acl redis client](lib_acl_cpp/samples/redis/README.md)**
## 1.5. MQTT module
The MQTT 3.1.1 version has been implemented in Acl, which has a stream parser, so can be used indepedentily of any IO mode.
- Support **MQTT 3.1.1** protocol: CONNECT/CONNACK/PUBLISH/PUBACK/PUBREC/PUBREL/PUBCOMP/SUBSCRIBE/SUBACK/UNSUBSCRIBE/UNSUBACK/PINGREQ/PINGRESP/DISCONNECT
- One class per command
- Stream parser can be used for any IO mode
- Data parsing separats from network communicationo
- Can be used on client and server sides
- For more information, see **[Using Acl MQTT](lib_acl_cpp/samples/mqtt/README.md)**
## 1.6. Server framework
The most important module in Acl is the server framework, which helps users quickly write back-end services, such as web services. Tools in app/wizard can help users generate one appropriate service code within several seconds. The server framework of Acl includes two parts, one is the services manager, the other is the service written by Acl service template. The services manager named **acl_master** in Acl comes from the famous **MTA Postfix**, whose name is master, and acl_master has many extensions to master in order to be as one general services manager. There are six service templates in Acl that can be used to write application services, as below:
- **Process service:** One connection one process, the advantage is that the programming is simple, safe and stable, and the disadvantage is that the concurrency is too low;
- **Threads service:** Each process handles all client connections through a set of threads in the thread pool. The IO event trigger mode is used that a connection is bound to a thread only if it has readable data, and the thread will be released after processing the data. The service model's advantage is that it can handle a large number of client connections in one process with a small number of threads. Compare with the aio model, the programming is relatively simple;
- **Aio service:** Similar to nginx/squid/ircd, one thread can handle a large number of client connections in a non-blocking IO manner. The advantages of this model are high processing efficiency and low resource consumption, while the disadvantages are more complex programming;
- **Fiber service:** Although the non-blocking service model can obtain large concurrent processing capability, the programming complexity is high. The coroutine model combines the features of large concurrent processing and low programming complexity, enabling programmers to easily implement sequential IO programming;
- **UDP service:** The model is mainly a service model supporting UDP communication process;
- **Trigger service:** The model instance is mainly used to process the background service process of some scheduled tasks (similar to the system's crontab).
# 2. The other important modules
## 2.1. MIME module
MIME(Multipurpose Internet Mail Extensions) format is widely used in email application. MIME format is too important that it can be used not only for email applications, but also for Web applications. MIME RFC such as RFC2045/RFC2047/RFC822 has been implemented in Acl. Acl has a MIME data stream parser that is indepedent of the IO model, so it can be used by synchronous or asynchronous IO programs.
## 2.2. Codec module
Thare are some common codecs in Acl, such as Json, Xml, Base64, Url, etc., which are all stream parser and indepedent of IO communication. Json is very popular, so Acl also provides serialization/deserialization tools which can be used to transfer between Json data and C struct objects, which greatly improves the programming efficiency.
## 2.3. Database module
The unified database interface in Acl is designed to easily and safely operate thease well-known open source databases such as Mysql, Postgresql and SQLite. The SQL codec is designed to escape the charactors to avoid the DB SQL attacks. When users use Acl to write database applications, Acl will dynamically load the dynamic libraries of Mysql, Postgresql or SQLite. The advantage of dynamic loading is that users who don't need the database functionality don't care about it at all.
## 2.4. Connection pool manager
There's a genernal connection pool manager in Acl, which is used widely by the other important modules, including redis, database, and http modules, etc.
## 2.5. The other client libraries
In addition to redis client, Acl also implements some other important client libraries, such as memcached client, handler-socket, beanstalk, disque and so on.
## 2.6. DNS module
Acl not only wraps the system DNS API, such as getaddrinfo and gethostbyname, but also implements the DNS protocol specified in RFC1035. Users can use the DNS module in Acl to implement their own DNS client or server.
# 3. Platform support and compilation
## 3.1. Compiling Acl on different platforms
Acl project currently supports Linux, Windows, MacOS, FreeBSD, Solaris, Android, and iOS.
- **Linux/UNIX:** The compiler is gcc/clang, enter **`acl/`** directory and run **`make`**, then libacl_all.a and libacl_all.so will be generated in acl/ directory, libacl_all.a is consist of three libraries including lib_acl.a, lib_protocol.a and libacl_cpp.a;
- **Windows:** Can be compiled with VS2003/VS2008/VS2010/VS2012/VS2013/VS2015/VS2019. (If you need to compile with VS6/VS2005, you can refer to the compilation conditions of VS2003);
- **MacOS/iOS:** Compiled with xcode;
- **Android:** Open Adnroid's project in **`acl/android/acl_c++_shared/`** with **`Android Studio`**;
- Support for cross platform compilation with **cmake**.
## 3.2. Precautions when compiling on Windows
There are a few things to keep in mind when using dynamic libraries in a WIN32 environment:
- When using the dynamic library of lib_acl, it needs to be predefined in the user's project: ACL_DLL;
- When using the HTTP library or ICMP library in the lib_protocol dynamic library, you need to predefine HTTP_DLL or ICMP_DLL in the project;
- When using the dynamic library of lib_acl_cpp, you need to predefine ACL_CPP_DLL in the project. If you use the VC2003 compiler environment, you need to predefine VC2003.
- When using the dynamic library of lib_dict, you need to predefine DICT_DLL in the project;
- When using a dynamic library of lib_tls, you need to predefine TLS_DLL in your project.
- Detailed compilation process, see: [Compilation and use of acl library](BUILD.md)
# 4. Quick start
## 4.1. The first demo with Acl
```c++
#include <iostream>
#include "acl_cpp/lib_acl.hpp"
int main(void) {
acl::string buf = "hello world!\r\n";
std::cout << buf.c_str() << std::endl;
return 0;
}
```
## 4.2. Simple TCP server
```c++
#include <thread>
#include "acl_cpp/lib_acl.hpp"
void run(void) {
const char* addr = "127.0.0.1:8088";
acl::server_socket server;
if (!server.open(addr)) { // Bind and listen the local address.
return;
}
while (true) {
acl::socket_stream* conn = server.accept(); // Wait for connection.
if (conn == NULl) {
break;
}
std::thread thread([=] { // Start one thread to handle the connection.
char buf[256];
int ret = conn->read(buf, sizeof(buf), false); // Read data.
if (ret > 0) {
conn->write(buf, ret); // Write the received data.
}
delete conn;
});
thread.detach();
}
}
```
## 4.3. Simple TCP client
```c++
#include "acl_cpp/lib_acl.hpp"
void run(void) {
const char* addr = "127.0.0.1:8088";
int conn_timeout = 5, rw_timeout = 10;
acl::socket_stream conn;
if (!conn.open(addr, conn_timeout, rw_timeout)) { // Connecting the server.
return;
}
const char data[] = "Hello world!\r\n";
if (conn.write(data, sizeof(data) - 1) == -1) { // Send data to server.
return;
}
char buf[256];
int ret = conn.read(buf, sizeof(buf) - 1, false);
if (ret > 0) { // Read from server.
buf[ret] = 0;
std::cout << buf << std::endl;
}
}
```
## 4.4. Coroutine TCP server
```c++
#include "acl_cpp/lib_acl.hpp"
#include "fiber/go_fiber.hpp"
void run(void) {
const char* addr = "127.0.0.1:8088";
acl::server_socket server;
if (!server.open(addr)) {
return;
}
go[&] { // Create one server coroutine to wait for connection.
while (true) {
acl::socket_stream* conn = server.accept();
if (conn) {
go[=] { // Create one client coroutine to handle the connection.
char buf[256];
int ret = conn->read(buf, sizeof(buf), false);
if (ret > 0) {
(void) conn->write(buf, ret);
}
delete conn;
};
}
}
};
acl::fiber::schedule(); // Start the coroutine scheculde process.
}
```
## 4.5. One Http client
```c++
#include "acl_cpp/lib_acl.hpp"
bool run(void) {
acl::http_request conn("www.baidu.com:80");
acl::http_header& header = conn.request_header()
header.set_url("/")
.set_keep_alive(false);
.set_content_type("text/html");
if (!conn.request(NULL, 0)) {
return false;
}
int status = conn.http_status();
if (status != 200) {
return false;
}
long long len = conn.body_length();
if (len <= 0) {
return true;
}
acl::string buf;
if (!conn.get_body(body)) {
return false;
}
return true;
}
```
## 4.6. Coroutine Http server
```c++
#include "acl_cpp/lib_acl.hpp" // Must before http_server.hpp
#include "fiber/http_server.hpp"
static char *var_cfg_debug_msg;
static acl::master_str_tbl var_conf_str_tab[] = {
{ "debug_msg", "test_msg", &var_cfg_debug_msg },
{ 0, 0, 0 }
};
static int var_cfg_io_timeout;
static acl::master_int_tbl var_conf_int_tab[] = {
{ "io_timeout", 120, &var_cfg_io_timeout, 0, 0 },
{ 0, 0 , 0 , 0, 0 }
};
int main(int argc, char* argv[]) {
const char* addr = "0.0.0.0|8194";
const char* conf = argc >= 2 ? argv[1] : NULL;
acl::http_server server;
// Call the methods in acl::master_base class .
server.set_cfg_int(var_conf_int_tab).set_cfg_str(var_conf_str_tab);
// Call the methods in acl::http_server .
server.on_proc_init([&addr] {
printf("---> after process init: addr=%s, io_timeout=%d\r\n", addr, var_cfg_io_timeout);
}).on_proc_exit([] {
printf("---> before process exit\r\n");
}).on_proc_sighup([] (acl::string& s) {
s = "+ok";
printf("---> process got sighup\r\n");
return true;
}).on_thread_accept([] (acl::socket_stream& conn) {
printf("---> accept %d\r\n", conn.sock_handle());
return true;
}).Get("/", [](acl::HttpRequest&, acl::HttpResponse& res) {
std::string buf("hello world1!\r\n");
res.setContentLength(buf.size());
return res.write(buf.c_str(), buf.size());
}).Post("/json", [](acl::HttpRequest& req, acl::HttpResponse& res) {
acl::json* json = req.getJson();
if (json) {
return res.write(*json);
} else {
std::string buf = "no json got\r\n";
res.setContentLength(buf.size());
return res.write(buf.c_str(), buf.size());
}
}).run_alone(addr, conf);
return 0;
}
```
## 4.7. One redis client
```c++
#include <thread>
#include "acl_cpp/lib_acl.hpp"
static void thread_run(acl::redis_client_cluster& conns) {
acl::redis cmd(&conns);
std::map<acl::string, acl::string> attrs;
attrs["name1"] = "value1";
attrs["name2"] = "value2";
attrs["name3"] = "value3";
acl::string key = "hash-key-1";
if (!cmd.hmset(key, attrs)) {
printf("hmset error=%s\r\n", cmd.result_error());
return;
}
attrs.clear();
if (!cmd.hgetall(key, attrs)) {
printf("hgetall error=%s\r\n", cmd.result_error());
}
}
void run(void) {
const char* addr = "126.0.0.1:6379";
acl::redis_client_cluster conns;
conns.set(addr, 0);
const size_t nthreads = 10;
std::thread threads[nthreads];
// Create some threads to test redis using the same conns.
for (size_t i = 0; i < nthreads; i++) {
threads[i] = std::thread(thread_run, std::ref(conns));
}
// Wait for all threads to exit
for (size_t i = 0; i < nthreads; i++) {
threads[i].join();
}
}
```
# 5. More about
## 5.1. Samples
There are a lot of examples in the acl library for reference, please refer to: [SAMPLES.md](SAMPLES.md)
## 5.2. FAQ
If you have some questions when using Acl, please see [FAQ.md](FAQ.md).
## 5.3. Who are using acl?
[![iqiyi](res/logo/logo_iqiyi.png)](http://www.iqiyi.com/)
[![263](res/logo/logo_263.png)](http://www.263.net/)
[![hexun](res/logo/logo_hexun.png)](http://www.hexun.com/)
[![v1](res/logo/logo_v1.png)](http://www.v1.cn/)
[![ksyun](res/logo/logo_ksyun.png)](https://www.ksyun.com/)
[![weibangong](res/logo/logo_weibangong.png)](https://www.weibangong.com/)
[![xianyou](res/logo/logo_xianyou.png)](http://www.i3game.com/)
[![foundao](res/logo/logo_foundao.png)](http://www.foundao.com/)
## 5.4. License
- LGPL-v3 license (see [LICENSE.txt](LICENSE.txt) in the acl project)
## 5.5. Reference
- Web site: https://blog.csdn.net/zsxxsz
- Github: https://github.com/acl-dev/acl
- Gitee: https://gitee.com/acl-dev/acl
- Weibo: http://weibo.com/zsxxsz
- QQ Group: 693868497

View File

@ -1,326 +0,0 @@
# acl -- One advanced C/C++ library for Unix/Windows.
[English](README.md)
<!-- vim-markdown-toc GFM -->
* [一、描述](#一描述)
* [1.1、库组成](#11库组成)
* [1.2、功能模块组成](#12功能模块组成)
* [1.2.1、网络通信库](#121网络通信库)
* [1.2.1.1、流处理模块](#1211流处理模块)
* [1.2.1.2、网络操作模块](#1212网络操作模块)
* [1.2.1.3、非阻塞网络流](#1213非阻塞网络流)
* [1.2.1.4、常见网络应用协议库](#1214常见网络应用协议库)
* [1.2.1.5、常见网络通信库](#1215常见网络通信库)
* [1.2.2、网络 IO 事件引擎](#122网络-io-事件引擎)
* [1.2.3、网络服务器框架](#123网络服务器框架)
* [1.2.3.1、进程模型](#1231进程模型)
* [1.2.3.2、线程模型](#1232线程模型)
* [1.2.3.3、非阻塞模型](#1233非阻塞模型)
* [1.2.3.4、协程模型](#1234协程模型)
* [1.2.3.5、UDP通信模型](#1235udp通信模型)
* [1.2.3.6、触发器模型](#1236触发器模型)
* [1.2.4、线程及线程池模块](#124线程及线程池模块)
* [1.2.5、HTTP 协议库](#125http-协议库)
* [1.2.5.1、客户端模式](#1251客户端模式)
* [1.2.5.2、服务端模式](服务端模式)
* [1.2.6、Redis 客户端库](#126redis-客户端库)
* [1.2.7、MQTT 协议库](#127mqtt-协议库)
* [1.2.8、MIME 协议库](#128mime-协议库)
* [1.2.9、网络协程库](#129网络协程库)
* [1.2.10、数据库相关](#1210数据库相关)
* [1.2.11、数字键的 K-V 磁盘存储模块zdb](#1211数字键的-k-v-磁盘存储模块zdb)
* [1.2.12、其它功能库](#1212其它功能库)
* [1.2.12.1、常用数据结构模块](#12121常用数据结构模块)
* [1.2.12.2、内存操作模块](#12122-内存操作模块)
* [1.2.12.3、常用字符串操作模块](#12123常用字符串操作模块)
* [1.2.12.4、文件目录模块](#12124文件目录模块)
* [1.2.12.5、读配置文件模块](#12125读配置文件模块)
* [1.2.12.6、文件队列处理库](#12126文件队列处理库)
* [1.2.12.7、json解析库](#12127json解析库)
* [1.2.12.8、xml解析库](#12128xml解析库)
* [1.2.12.9、常见编码库](#12129常见编码库)
* [二、平台支持及编译](#二平台支持及编译)
* [三、目录结构说明](#三目录结构说明)
* [3.1、lib_acl---基础 C 库](#31lib_acl)
* [3.2、lib_protocol---HTTP/SMTP/ICMP 协议 C 库](#32lib_protocol)
* [3.3、lib_acl_cpp---C++ 功能库](#33lib_acl_cpp)
* [3.4、lib_fiber---网络协程库](#34lib_fiber)
* [3.5、图例](#35图例)
* [3.6、acl 库中有大量示例可供参考请参考SAMPLES.md](#36acl-库中有大量示例可供参考请参考samplesmd)
* [3.7、acl 使用 FAQ](#37acl-使用-faq-参考-faqmd)
* [四、谁在使用acl](#四谁在使用acl)
* [五、使用许可](#五使用许可)
* [六、参考](#六参考)
<!-- vim-markdown-toc -->
## 一、描述
acl 工程是一个跨平台支持LINUXWIN32SolarisMacOSFreeBSD的网络通信库及服务器编程框架同时提供更多的实用功能库。通过该库用户可以非常容易地编写支持多种模式(多线程、多进程、非阻塞、触发器、UDP方式、协程方式)的服务器程序WEB 应用程序数据库应用程序。此外该库还提供了常见应用的客户端通信库HTTP、SMTP、ICMP、MQTT、Redis、Memcache、Beanstalk、Handler socket常见流式编解码库XML/JSON/MIME/BASE64/UUCODE/QPCODE/RFC2047 etc。
### 1.1、库组成
本工程主要包含 4 个库及大量示例。4 个库的说明如下:
1. **lib_acl**: 该库是最基础的库,其它 3 个库均依赖于该库; 该库以 C 语言实现。
2. **lib_protocol**: 该库主要实现了 http 协议及 icmp/ping 协议; 该库以 C 语言实现。
3. **lib_acl_cpp**: 该库用 C++ 语言封装了 lib_acl/lib_protocol 两个库,同时增加了一些其它有价值的功能应用。
4. **lib_fiber**: 该库为支持协程库,直接 hook 系统 read/write 等 API与 epoll 配合支持高并发网络编程,有关协程更多内容参考 [README.md](lib_fiber/README.md)。
* 整体架构图
![整体架构图](res/img/architecture.png)
### 1.2、功能模块组成
#### 1.2.1、网络通信库
##### 1.2.1.1、流处理模块
该模块是整个 acl 网络通信最基础的流式通信模块,不仅支持网络流,同时还支持文件流,主要支持:
1. 按行读数据,兼容 win32 下的 \r\n同时兼容 UNIX 下的 \n 的结束符
2. 按行读数据但要求自动去掉尾部的 \n 或 \r\n
3. 以字符串为分隔符读取数据
4. 读规定长度的数据
5. 尝试性读一行数据或尝试性读规定长度数据
6. 探测网络 IO 状态
7. 写入一行数据
8. 按格式符写入数据,类似于 fprintf
9. 文件流定位操作,类似于 fseek
10. 一次性写入一组数据,类似于 unix 下的 writev
11. 将文件截短,类似于 ftrunk
12. 获取文件大小
13. 获得当前文件流指针位置,类似于 ftell
14. 获得文件尺寸
15. 获得网络流的本地地址及远程地址
##### 1.2.1.2、网络操作模块
该模块主要支持网络服务端监听(支持 TCP/UDP/UNIX 域套接口)、网络客户端连接(支持 TCP/UNIX 域套接口、DNS 域名查询及结果缓存(支持调用系统 gethostbyname/getaddrinfo 函数和直接发送 DNS 协议两种方式、套接口socket操作及取本机网卡等功能。
##### 1.2.1.3、非阻塞网络流
支持非阻塞方式连接、读(按行读,规定长度读)、写(写行,写规定长度,写一组数据)等操作。
##### 1.2.1.4、常见网络应用协议库
主要支持常见网络应用协议诸如HTTP、SMTP、MQTT、ICMP其中 HTTP、MQTT、ICMP 两个模块实现了阻塞、非阻塞两种通信方式此外HTTP 协议在C++版的 lib_acl_cpp 中还支持服务端、客户端两种通信方式,当作为服务端使用时,支持类似于 JAVA HttpServlet 的接口使用方式,当作为客户端方式使用时,支持连接池与集群管理方式,该模块同时支持 cookie、session、HTTP MIME 文件上传、分块传输、字符集自动转换、自动解压缩、断点续传等丰富的功能。
##### 1.2.1.5、常见网络通信库
支持 Redis、Memcached、MQTT、Beanstalk、Handler socket 客户端通信库,该通信库支持连接池方式。
#### 1.2.2、网络 IO 事件引擎
支持 select(UNIX/LINUX/WIN32)、poll(UNIX/LINUX)、epoll(LINUX)、kqueue(BSD)、devpoll(solaris)、iocp(WIN32)、窗口消息(WIN32) 等系统事件引擎,同时支持 Reactor 及 Proactor 两种编程模型。
#### 1.2.3、网络服务器框架
该模块是 acl 中最为重要的模块,提供了服务器编程中常用的基础设施,该服务器框架来源于著名的 Postfix在其基础上进行了诸多扩展有关 acl 服务器编程的更多内容介绍参见:[acl服务器编程](https://blog.csdn.net/zsxxsz/category_8736921.html?spm=1001.2014.3001.5482)。
目前已经支持的主要服务模型有:
##### 1.2.3.1、进程模型
一个连接一个进程,这种模型的优点是编程简单、安全稳定,缺点是并发度不高;
##### 1.2.3.2、线程模型
每个子进程是由线程池中的一组线程处理所有的客户端连接,采用 IO 事件触发方式,只有当连接有数据可读时才会将连接与一个线程进行绑定,线程处理完后立即归还给线程池,这种模型的最大优点是可以用少量的线程便可以处理大量的客户端连接,而且编程比较简单(相对于非阻塞模型);
##### 1.2.3.3、非阻塞模型
每个子进程是由一个单独的非阻塞线程组成,该线程采用完全非阻塞 IO 方式处理外来的大量客户端连接(类似于 nginx/squid/ircd该模型的优点是处理效率高占用资源少可以处理大量客户端连接缺点是编程比较复杂
##### 1.2.3.4、协程模型
虽然非阻塞服务模型可以获得大并发处理能力,但编程复杂度较高,协程模型综合了大并发的处理能力和较低的编程复杂度的特点,使编程人员可以顺序 IO 的编程方式简单实现业务逻辑;
##### 1.2.3.5、UDP通信模型
该模型主要为了支持 UDP 网络过程而增加的服务模型;
##### 1.2.3.6、触发器模型
该模型的实例主要用来处理一些定时任务的后台服务过程(类似于系统的 crontab
服务器框架中的子进程实用采用半驻留服务模型支持子进程预启动机制、最大最小进程数控制、子进程异常报警、单一进程监听多个地址可同时监听TCP/UDP套接字以及 UNIX 域套接字)、子进程安全控制、日志输出至 syslog-ng、多进程TCP连接均匀化采用配置文件驱动方式每个服务一个配置文件方便进程管理及服务进程在线升级。
#### 1.2.4、线程及线程池模块
提供了跨平台的支持 Posix 规范的线程接口支持WIN32线程池模块通过多种措施最大程度地减少线程任务分配时的锁冲突用在 acl 服务器框架中多进程多线程服务模型中)。
#### 1.2.5、HTTP 协议库
提供了完整的 HTTP 协议实现,支持 HTTP/1.0、1.1 版本,更多内容介绍见:[Acl HTTP编程](https://blog.csdn.net/zsxxsz/category_8736920.html)。
##### 1.2.5.1、客户端模式
1. 支持连接池方式;
2. 支持 chunked 块传输;
3. 支持压缩传输;
4. 支持 SSL 加密传输;
5. 支持断点续传;
6. 支持设置/获取 Cookies;
7. 支持 Websocket.
##### 1.2.5.2、服务端模式
1. 支持类似于 Java 的 HttpServlet 使用方式;
2. 支持 chunked 块传输;
3. 支持压缩传输;
4. 支持 SSL 加密传输;
5. 支持断点续传;
6. 支持设置/获取 Cookies;
7. 支持 HTTP MIME 格式;
8. 支持 Websocket.
#### 1.2.6、Redis 客户端库
1. 支持 redis 集群模式及非集群模式;
2. 支持连接池方式;
3. 按 redis 数据结构类型分成独立的 C++ 类;
4. 每个命令映射为 1 个至多个函数.
更多有关 Acl Redis 客户端库编程的内容参见:[Acl Redis 介绍](lib_acl_cpp/samples/redis/README.md), [Redis示例](https://blog.csdn.net/zsxxsz/category_8736931.html)。
#### 1.2.7、MQTT 协议库
1. 支持 MQTT3.1.1 版本;
2. 支持流式 MQTT 协议解析及构建;
3. 可以用在客户端及服务端;
4. 支持阻塞通信模式及非阻塞通信模式。
有关 Acl MQTT 编程使用示例参见:[Acl MQTT](lib_acl_cpp/samples/mqtt/README.md)。
#### 1.2.8、MIME 协议库
1. 支持流式 MIME 数据解析;
2. 支持 MIME RFC2045RFC2047RFC822.
#### 1.2.9、网络协程库
直接 hook 系统底层 IO API与 epoll 配合实现网络 IO 的高并发、高性能编程框架,通过该模块可以使一些原生的常见阻塞式网络库(如 mysql/redis/http 等客户端库)直接支持高并发网络操作;通过使用该模块,编程者采用顺序思维编程方式,在协程库内部将阻塞模式转为非阻塞模式,因而大大提高了网络并发能力及处理性能。
#### 1.2.10、数据库相关
设计了统一的数据库操作接口及连接池处理方式,目前支持 sqlite/mysql/postgresql。
#### 1.2.11、数字键的 K-V 磁盘存储模块zdb
采取 KEY/VALUE 分块存储方式,因为 KEY 限定为数字类型,只需内存计算便可算出 KEY 的位置KEY 中存放了 VALUE 的位置所以对于任何的数据查询只需两次磁盘定位。本人在和讯做流量统计存储时使用该种方式替代了BSD、TC 等采用B树的 K-V 存储)。
#### 1.2.12、其它功能库
##### 1.2.12.1、常用数据结构模块
该模块提供了常见的哈希表及多种哈希算法、动态数组、双向链表、平衡二叉树、队列、二分块查找树、256 叉匹配树等数组结构;提供了统一的数据结构遍历方法(采用 acl_foreach)。
##### 1.2.12.2、 内存操作模块
该模块提供三种内存池模型:
1. <b>基本的内存方式:</b>内部封装了系统的 malloc/free API提供了内存校验等安全措施该方式同时提供外部注册接口允许使用者注册自己的内存分配模型
2. <b>内存片(slab) 方式:</b>根据不同的尺寸大小分配多个定长内存链,可以有效地减少内存碎片,大大提升内存分配效率;
3. <b>内存链方式:</b>将长度不一的小内存分配在一条内存页上,可以非常有效地使用内存,减少内存浪费。
##### 1.2.12.3、常用字符串操作模块
支持字符串匹配查找、前(后)向比较、字符串分割、字符串大小写转换、H2B/B2H 转换、URL 编码/解码等功能。
##### 1.2.12.4、文件目录模块
支持多级目录创建、多级目录扫描、文件句柄缓存等功能,同时在处理多级目录采用循环方式,避免了递归方式时可能的栈溢出的隐患。
##### 1.2.12.5、读配置文件模块
支持读 name=value 形式的配置文件value 较长时可以使用反斜杠(\)折行,采用配置表方式提取配置文件中的配置项。
##### 1.2.12.6、文件队列处理库
支持多组目录队列文件的创建、扫描、删除等操作;常用于临时文件队列调度的服务程序中。
##### 1.2.12.7、json 解析库
支持流式方式解析 json 数据,同时支持 json 数据包组装。
##### 1.2.12.8、xml 解析库
支持流式方式解析 xml 数据,同时支持 xml 数据包组装。
##### 1.2.12.9、常见编码库
还包括 rfc2047、url、base64、uucode、qpcode、charset 等编解码库,这些解码库均采用流式解析方式,适合于多种网络 IO 模型(阻塞/非阻塞TCP、UDP
## 二、平台支持及编译
整个工程目前支持 Linux(AS4,5,6, CS4,5,6, ubuntu), Windows, MacOS, FreeBSD, SolarisAndroidIOS。
* Linux/UNIX: 编译器为 gcc直接在终端命令行方式下分别进入 lib_acl/lib_protocol/lib_acl_cpp 目录下,运行 make 命令即可。
* Windows: 可以用 VC2003/VC2008/VC2010/VC2012/vc2013/vc2015/vc2017/vc2019 进行编译。
* MacOS可使用 xcode 进行编译。
* 同时支持 CMake 跨平台编译方式
当在 WIN32 环境下使用动态库时有几点需要注意:
* 使用 lib_acl 的动态库时,需要在用户的工程预定义: ACL_DLL;
* 使用 lib_protocol 动态库中的 HTTP 库或 ICMP 库时,需要在工程中预定义 HTTP_DLL 或 ICMP_DLL;
* 使用 lib_acl_cpp 的动态库时,需要在工程中预定义 ACL_CPP_DLL如果您使用用 VC2003 编译环境则还需要预定义 VC2003;
* 详细编译过程,参见:[acl 库的编译及使用](BUILD.md)
## 三、目录结构说明
### 3.1、lib_acl
1. init : 主要用于初始化 acl 基础库
2. stdlib : 是一些比较基础的功能函数库,在 stdlib/ 根目录下主要包括一些有关日志记录、网络/文件流处理、VSTRING缓冲操作等功能函数在 stdlib/ 下还有二级目录,如下:
- 2.1 common : 该目录主要为一些常用的数据结构及算法的功能函数库,象哈希表、链表、队列、动态数组、堆栈、缓存、平衡二叉树、模式匹配树等;
- 2.2 memory : 该目录主要包含与内存操作相关的函数库,象内存基础分配与校验、内存池管理、内存切片管理等;
- 2.3 filedir : 该目录主要包含与目录遍历、目录创建等相关的库;
- 2.4 configure : 该目录主要包含配置文件的分析库;
- 2.5 iostuff : 该目录主要包含一些常用的IO操作的函数库象读/写超时、设置IO句柄的阻塞模式等
- 2.6 string : 该目录主要包含一些常用的字符串操作的库提供了比标准C更灵活高效的字符串操作功能
- 2.7 debug : 主要用于协助调试内存的泄露等功能;
- 2.8 sys : 主要是与不同操作系统平台相关的API的封装函数库
3. **net: 是与网络操作相关的函数库包含网络监听、网络连接、DNS查询、套接口参数设置等功能**
- 3.1 connect : 主要是与网络连接相关的函数库,包含网络连接、域套接口连接等;
- 3.2 listen : 主要是与网络监听相关的函数库,包含网络监听、域套接口监听等;
- 3.3 dns : 主要是与DNS域名查询相关的函数库包含对 gethostbyname 等接口的封装、按RFC1035标准直接发送UDP包方式进行查询等功能
4. **event : 主要封装了 select/poll/epoll/iocp/win message/kqueue/devpoll 等系统API接口使处理网络事件更加灵活、高效、简单另外还包含定时器接口acl 中的很多网络应用都会用到这些接口,象 aio、master 等模块;**
5. **aio : 主要包含网络异步操作的功能函数该套函数库在处理高并发时有非常高的效率而且提供了比基础API更为高级的调用方式比使用象 libevent 之类的函数库更为简单,而且是线程安全的;**
6. msg : 主要包含了基于线程的消息事件及基于网络的消息事件功能;
7. thread : 主要是封装了各个OS平台下的基础线程API使对外接口保持一致性消除了平台的差异性同时还提供了半驻留线程池的函数库以及对于线程局部变量的扩展
8. db : 主要是一些与数据库有关的功能库定义了一个通用的数据库连接池的框架并且实现了mysql的连接池实例一个简单的内存数据库由哈希表、链表、平衡二叉树组合而成ZDB数据存储引擎这是一个高效的基于数字键的存储引擎
9. proctl : win32 平台下父子进程控制功能库;
10. code : 常见编码函数库,包括 base64编解码、URL编解码以及一些汉字字符集编码等
11. unit_test : 包含有关进行 C 语言单元测试的功能库;
12. xml: 是一个流式的 xml 解析器及构造器,可以支持阻塞及阻塞式网络通信;
13. json: 是一个流式的 json 解析器及构造器,可以支持阻塞及阻塞式网络通信;
14. **master: 是在 UNIX 环境下支持多种服务器模式的服务器框架,目前主要支持多进程模式、多进程多线程模式、多进程非阻塞模式、多进程触发器模式及 UDP 通信模式;**
### 3.2、lib_protocol
1. http: HTTP 协议相关的库,支持 HTTP/1.1,通讯方式支持同步/异步方式
2. icmp: icmp/ping 协议库,支持同步/异步通信方式
3. smtp: 邮件客户端发信协议库
### 3.3、lib_acl_cpp
1. stdlib: 主要包含字符串处理类(string)xml/json 解析库zlib 压缩库(依赖于 zlib 库), 日志记录类, 字符集转码(在UNIX环境下需要 iconv 库), memcached 客户库, 互斥类(支持线程锁、文件锁);
2. **stream: 支持网络流/文件流,支持阻塞/非阻塞两种通信方式,在非阻塞模式下支持 select/poll/epoll/iocp/win32 message/kqueue/devpoll支持 ssl 加密传输(阻塞及非阻塞方式,需要 polarssl库);**
3. ipc: 在非阻塞通信方式,提供了阻塞模块与非阻塞模块整合的方式;
4. **http: 比较完整的 HTTP 通信库及协议解析库,支持客户端及服务端模式,支持 ssl/gzip 传输方式; 支持类似于 Java HttpServlet 方式的大部分接口,方便编写 CGI 及 WEB 服务器程序;**
5. db: 封装了 MYSQL/SQLITE 库,支持数据库连接池;
6. hsocket: 实现了完整的 handler-socket 客户端通信库;
7. **mime: 支持完整的与邮件编码相关的库(邮件的 rfc2045-rfc2047/rfc822/base64/uucode 编码及解码库).**
8. **master: 封装了 C 库的服务器框架库**
9. beanstalk: 消息队列应用 beanstalkd 的客户端通信库,支持连接池
10. connpool: 通用的连接池库
11. hscoket: mysql 插件 handle-socket 的客户端通信库,支持连接池
12. memcache: memcached 应用的客户端库,支持连接池及连接池集群管理
13. queue: 磁盘文件队列操作库
14. ipc: 阻塞/非阻塞通信整合库
15. session: HTTP 会话库
16. **redis: 完整实现了 redis 协议的客户端通信库(总共 12 个大类150 多个命令),支持连接池及连接池集群管理**
17. disque: 支持集群消息队列服务 disque 的客户端库,支持连接池及连接池集群管理
18. **mqtt: 支持流式解析 MQTT 协议,可以与任何 IO 通信方式结合;同时提供了阻塞及非阻塞通信接口**
### 3.4、lib_fiber
1. c 目录:该目录下主要为 C 语言版本实现的网络协程库,其中包含源文件及头文件
2. cpp 目录:该目录下封装了 C 语言版本的网络协程库
3. samples 目录:该目录下有大量的使用协程库编程的例子
### 3.5、图例
* 类索引图:
![类索引图](res/img/index.jpg)
* 异步 IO 类继承图
![异步 IO 类继承图](res/img/aio_inherit.jpg)
* IO 流继承图
![IO 流继承图](res/img/stream_inherit.jpg)
* acl 服务框架守护进程事件处理流程
![acl 服务守护进程事件处理流程](res/img/acl_master.jpg)
* acl 服务器框架子进程事件处理流程
![服务子进程事件流程](res/img/master_proc.jpg)
* 接收上传文件的 CGI 程序:
![接收上传文件的 CGI 程序](res/img/cgi_upload.jpg)
* 文件下载客户端程序:
![文件下载客户端程序](res/img/http_download.jpg)
* 网页下载程序:
![网页下载程序](res/img/http_client.jpg)
### 3.6、acl 库中有大量示例可供参考,请参考:[SAMPLES.md](SAMPLES.md)
### 3.7、acl 使用 FAQ 参考 [FAQ.md](FAQ.md)
## 四、谁在使用acl
[![iqiyi](res/logo/logo_iqiyi.png)](http://www.iqiyi.com/)
[![263](res/logo/logo_263.png)](http://www.263.net/)
[![hexun](res/logo/logo_hexun.png)](http://www.hexun.com/)
[![v1](res/logo/logo_v1.png)](http://www.v1.cn/)
[![ksyun](res/logo/logo_ksyun.png)](https://www.ksyun.com/)
[![weibangong](res/logo/logo_weibangong.png)](https://www.weibangong.com/)
[![xianyou](res/logo/logo_xianyou.png)](http://www.i3game.com/)
[![foundao](res/logo/logo_foundao.png)](http://www.foundao.com/)
## 五、使用许可
- LGPL-v3 license (see [LICENSE.txt](LICENSE.txt) in the acl project)
## 六、参考
- WEB 站点: https://blog.csdn.net/zsxxsz
- Github: https://github.com/acl-dev/acl
- Gitee: https://gitee.com/acl-dev/acl
- Download: https://sourceforge.net/projects/acl- 微 博: http://weibo.com/zsxxsz
- QQ 群: 693868497

View File

@ -1,319 +0,0 @@
# acl -- One advanced C/C++ library for Unix/Windows.
<!-- vim-markdown-toc GFM -->
* [1 Description](#1-Description)
* [1.1 Library composition](#11-Library-composition)
* [1.2 Function module composition](#12-Function-module-composition)
* [1.2.1 Network communication library](#121-Network-communication-library)
* [1.2.1.1 Stream processing module](#1211-Stream-processing-module)
* [1.2.1.2 Network operation module](#1212-Network-operation-module)
* [1.2.1.3 Non-blocking network flow](#1213-Non-blocking-network-flow)
* [1.2.1.4 Common network application protocol Library](#1214-Common-network-application-protocol-library)
* [1.2.1.5 Common network communication library](#1215-Common-network-communication-library)
* [1.2.2 Network IO event engine](#122-Network-io-event-engine)
* [1.2.3 Web server framework](#123-Web-server-framework)
* [1.2.3.1 Process model](#1231-Process-model)
* [1.2.3.2 Thread model](#1232-Thread-model)
* [1.2.3.3 Non-blocking model](#1233-Non-blocking-model)
* [1.2.3.4 Coroutine model](#1234-Coroutine-model)
* [1.2.3.5 UDP communication model](#1235-UDP-communication-model)
* [1.2.3.6 Trigger model](#1236-Trigger-model)
* [1.2.4 Thread and thread pool module](#124-Thread-and-thread-pool-module)
* [1.2.5 HTTP protocol](#125-HTTP-protocol)
* [1.2.5.1 Client mode](#1251-Client-mode)
* [1.2.5.2 Server mode](#1252-Server-mode)
* [1.2.6 Redis client library](#126-Redis-client-library)
* [1.2.7 MIME protocol library](#127-Mime-protocol-library)
* [1.2.8 Network coroutine library](#128-Network-coroutine-library)
* [1.2.9 Database related](#129-Database-related)
* [1.2.10 K-V disk storage module (zdb) for numeric keys](#1210-Numeric-key-K-V-disk-storage-module-zdb)
* [1.2.11 Other function libraries](#1211-Other-function-libraries)
* [1.2.11.1 Common data structure module](#12111-Common-data-structure-module)
* [1.2.11.2 Memory operation module](#12112-Memory-operation-module)
* [1.2.11.3 Common string operation module](#12113-Common-string-operation-module)
* [1.2.11.4 File Directory module](#12114-File-Directory-module)
* [1.2.11.5 Read configuration file module](#12115-Read-configuration-file-module)
* [1.2.11.6 File queue processing library](#12116-File-queue-processing-library)
* [1.2.11.7 Json parsing library](#12117-Json-parsing-library)
* [1.2.11.8 Xml parsing library](#12118-Xml-parsing-library)
* [1.2.11.9 Common coding library](#12119-Common-coding-library)
* [2 Platform support and compilation](#2-Platform-support-and-compilation)
* [3 Description of directory structure](#3-Description-of-directory-structure)
* [3.1 lib_acl---Basic C library](#31-lib_acl)
* [3.2 lib_protocol---HTTP/SMTP/ICMP Protocol C Library](#32-lib_protocol)
* [3.3 lib_acl_cpp---C++ Function Library](#33-lib_acl_cpp)
* [3.4 lib_fiber---network coroutine library](#34-lib_fiber)
* [3.5 Legend](#35-Legend)
* [3.6 There are a lot of examples in the acl library for reference, please refer to: SAMPLES.md](#36-There-are-a-lot-of-examples-in-the-acl-library-for-reference-please-refer-to-samplesmd)
* [3.7 Acl using FAQ](#37-Acl-using-FAQ-faqmd)
* [4 Who are using acl](#4-Who-are-using-acl)
* [5 License](#5-License)
* [6 Reference](#6-Reference)
<!-- vim-markdown-toc -->
## 1 Description
The acl project is a cross-platform (supporting LINUX, WIN32, Solaris, MacOS, FreeBSD) network communication library and server programming framework, while providing more useful functional libraries. Through this library, users can easily write server programs, WEB applications, and database applications that support multiple modes (multi-threaded, multi-process, non-blocking, trigger, UDP, and coroutine). In addition, the library also provides client communication libraries for common applications (such as: HTTP, SMTP, ICMP, redis, memcache, beanstalk, handler socket), common streaming codec library: XML/JSON/MIME/BASE64/UUCODE/ QPCODE/RFC2047 etc.
### 1.1 Library composition
This project consists of 5 libraries and a large number of examples. The description of the five libraries is as follows:
1. lib_acl: This library is the most basic library, the other four libraries are dependent on the library; the library is implemented in C language.
2. lib_protocol: This library mainly implements the http protocol and the icmp/ping protocol; the library is implemented in C language.
3. lib_acl_cpp: This library encapsulates the lib_acl/lib_protocol libraries in C++ and adds some other valuable functional applications.
4. lib_fiber: This library supports the coroutine library, directly hooks the system read/write API, and supports high-concurrency network programming with epoll.
5. lib_dict: This library mainly implements the dictionary storage of KEY-VALUE, which also depends on BDB, CDB and tokyocabinet libraries.
6. lib_tls: This library encapsulates the openssl library so that the communication mode of lib_acl can support ssl.
* Overall architecture diagram
![Overall architecture diagram](res/img/architecture_en.png)
### 1.2 Function module composition
#### 1.2.1 Network communication library
##### 1.2.1.1 Stream processing module
This module is the most basic streaming communication module for the entire acl network communication. It not only supports network streaming, but also supports file streaming. It mainly supports:
1. Read data by line, compatible with \r\n under win32, and compatible with the end of \n under UNIX
2. Read data by line but require automatic removal of the trailing \n or \r\n
3. Read data as a string separator
4. Read the specified length of data
5. Try to read a row of data or try to read the specified length of data
6. Detect network IO status
7. Write a row of data
8. Write data by formatter, similar to fprintf
9. File stream location operation, similar to fseek
10. Write a set of data at once, similar to writev under unix
11. Truncate the file, similar to ftrunk
12. Get the file size
13. Get the current file stream pointer location, similar to ftell
14. Get the file size
15. Obtain the local address and remote address of the network stream
##### 1.2.1.2 Network operation module
This module mainly supports network server monitoring (supports TCP/UDP/UNIX domain socket), network client connection (supports TCP/UNIX domain socket), DNS domain name query and result cache (supports calling system gethostbyname/getaddrinfo function and direct Send DNS protocol two ways), socket (socket) operation and take the local network card and other functions.
##### 1.2.1.3 Non-blocking network flow
Support non-blocking mode connection, read (by row read, specified length read), write (write line, write specified length, write a set of data) and other operations.
##### 1.2.1.4 Common network application protocol library
It mainly supports common network application protocols, such as: HTTP, SMTP, ICMP, in which HTTP and ICMP modules implement blocking and non-blocking communication methods. In addition, the HTTP protocol supports server and client in C++ version of lib_acl_cpp. Two communication methods, when used as a server, support the interface usage similar to JAVA HttpServlet. When used as a client mode, it supports connection pool and cluster management. The module supports both cookie, session, and HTTP MIME file upload. Rich functions such as block transfer, automatic character set conversion, automatic decompression, and breakpoint resume.
##### 1.2.1.5 Common network communication library
Support memcached, beanstalk, handler socket client communication library, the communication library supports connection pool mode.
#### 1.2.2 Network IO event engine
Supports select (UNIX/LINUX/WIN32), poll (UNIX/LINUX), epoll (LINUX), kqueue (BSD), devpoll (solaris), iocp (WIN32), window message (WIN32) and other system event engines, and supports Reactor And Proactor two programming models.
#### 1.2.3 Web server framework
This module is the most important module in acl, and provides the infrastructure commonly used in server programming. The server framework is derived from the famous Postfix. It has been expanded on the basis of the following. The main service models that have been supported are:
##### 1.2.3.1 Process model
One connection to a process, the advantage of this model is that the programming is simple, safe and stable, and the disadvantage is that the degree of concurrency is not high;
##### 1.2.3.2 Thread model
Each child process handles all client connections by a group of threads in the thread pool. The IO event trigger mode is used. The connection is bound to a thread only when the connection has data readable. The thread is returned immediately after processing. For the thread pool, the biggest advantage of this model is that it can handle a large number of client connections with a small number of threads, and the programming is relatively simple (relative to the non-blocking model);
##### 1.2.3.3 Non-blocking model
Each child process consists of a single non-blocking thread that handles a large number of foreign client connections (similar to nginx/squid/ircd) in a completely non-blocking IO manner. The advantage of this model is that it has high processing efficiency and low resource consumption. Can handle a large number of client connections, the disadvantage is that programming is more complicated;
##### 1.2.3.4 Coroutine model
Although the non-blocking service model can obtain large concurrent processing capability, the programming complexity is high. The coroutine model combines the features of large concurrent processing and low programming complexity, enabling programmers to easily implement sequential IO programming. Business logic;
##### 1.2.3.5 UDP communication model
The model is mainly used to support the UDP network process and the service model is added;
##### 1.2.3.6 Trigger model
The model instance is mainly used to process the background service process of some scheduled tasks (similar to the system's crontab).
The sub-process utility in the server framework adopts the semi-resident service model, supports the sub-process pre-boot mechanism, the maximum and minimum process number control, the sub-process abnormal alarm, and the single process to listen to multiple addresses (can simultaneously listen to TCP/UDP sockets and UNIX). Domain sockets), child process security control, log output to syslog-ng, multi-process TCP connection uniformity; configuration file-driven mode, one configuration file per service, convenient process management and online upgrade of service process.
#### 1.2.4 Thread and thread pool module
Provides a cross-platform support for the Posix-compliant thread interface (WIN32 support); the thread pool module minimizes lock conflicts in thread task allocation (used in the multi-process multi-threaded service model in the acl server framework).
#### 1.2.5 HTTP protocol
Provides a complete HTTP protocol implementation, supports HTTP/1.0, 1.1 version; supports both client mode and server mode:
##### 1.2.5.1 Client mode
1. Support connection pool mode;
2. Support chunked block transfer;
3. Support compressed transmission;
4. Support SSL encrypted transmission;
5. Support for resumed breakpoints;
6. Support setting/acquisition of cookies;
7. Support Websocket.
##### 1.2.5.2 Server mode
1. Support Java-like HttpServlet usage;
2. Support chunked block transfer;
3. Support compressed transmission;
4. Support SSL encrypted transmission;
5. Support for resumed breakpoints;
6. Support setting/acquisition of cookies;
7. Support HTTP MIME format;
8. Support Websocket.
#### 1.2.6 Redis client library
1. Support redis cluster mode and non-cluster mode;
2. Support connection pool mode;
3. Divide into separate C++ classes according to the redis data structure type;
4. Each command is mapped to 1 to more functions.
Specific content reference: [Use the acl library to write efficient C++ redis client application] (http://zsxxsz.iteye.com/blog/2184744)
#### 1.2.7 MIME protocol library
1. Support streaming MIME data parsing;
2. Support MIME RFC2045, RFC2047, RFC822.
#### 1.2.8 Network coroutine library
Direct hook system The underlying IO API, in conjunction with epoll, implements a high-concurrency, high-performance programming framework for network IO. This module enables some native common blocking network libraries (such as client libraries such as mysql/redis/http) to directly support high Concurrent network operation; by using this module, the programmer uses the sequential thinking programming method to change the blocking mode to the non-blocking mode inside the coroutine library, thus greatly improving the network concurrency and processing performance.
#### 1.2.9 Database related
Designed a unified database operation interface and connection pool processing, currently supports sqlite/mysql/postgresql.
#### 1.2.10 Numeric key K-V disk storage module (zdb)
Take the KEY/VALUE block storage method, because the KEY is limited to the numeric type, you only need the memory calculation to calculate the position of the KEY, and the KEY stores the location of the VALUE, so you only need two disk positioning for any data query. (I used this method to replace K-V storage using B-trees such as BSD and TC when doing traffic statistics storage.)
#### 1.2.11 Other function libraries
##### 1.2.11.1 Common data structure module
The module provides common hash tables (and multiple hash algorithms), dynamic arrays, doubly linked lists, balanced binary trees, queues, binary search trees, 256-fork matching trees, and other array structures; provides a unified data structure traversal method (using acl_foreach).
##### 1.2.11.2 Memory operation module
This module provides three memory pool models:
1. <b>Basic memory mode:</b> The system's malloc/free API is encapsulated internally to provide security measures such as memory verification. This method also provides an external registration interface that allows users to register their own memory allocation models. ;
2. <b>memory slice (slab) mode:</b> allocate multiple fixed-length memory chains according to different sizes, which can effectively reduce memory fragmentation and greatly improve memory allocation efficiency;
3. <b>memory chain mode:</b> Allocate small memory of different lengths on one memory page, which can use memory very effectively and reduce memory waste.
##### 1.2.11.3 Common string operation module
Supports string matching lookup, pre (post) comparison, string splitting, string case conversion, H2B/B2H conversion, URL encoding/decoding, etc.
##### 1.2.11.4 File directory module
Support multi-level directory creation, multi-level directory scanning, file handle caching, etc., while processing multi-level directories in a round-robin manner, avoiding the potential for stack overflow in recursive mode.
##### 1.2.11.5 Read configuration file module
Supports reading the configuration file of the name=value format. When the value is long, you can use the backslash (\) to wrap the line, and use the configuration table to extract the configuration items in the configuration file.
##### 1.2.11.6 File queue processing library
Supports the creation, scanning, and deletion of multiple sets of directory queue files; it is commonly used in service programs for temporary file queue scheduling.
##### 1.2.11.7 Json parsing library
Supports streaming parsing of json data while supporting json packet assembly.
##### 1.2.11.8 Xml parsing library
Support streaming methods to parse xml data while supporting xml packet assembly.
##### 1.2.11.9 Common coding library
It also includes codecs such as rfc2047, url, base64, uucode, qpcode, charset, etc. These decoding libraries are all streamed and are suitable for multiple network IO models (blocking/non-blocking TCP, UDP).
## 2 Platform support and compilation
The entire project currently supports Linux (AS4, 5, 6, CS4, 5, 6, ubuntu), Windows, MacOS, FreeBSD, Solaris, Android, IOS.
* Linux/UNIX: The compiler is gcc, enter the lib_acl/lib_protocol/lib_acl_cpp directory directly in the terminal command line mode, run the make command.
* Windows: Can be compiled with VC2003/VC2008/VC2010/VC2012/vc2013/vc2015. (If you need to compile with VC6/VC2005, you can refer to the compilation conditions of VC2003).
* MacOS: Compiled with xcode.
* Support for CMake cross-platform compilation
There are a few things to keep in mind when using dynamic libraries in a WIN32 environment:
* When using the dynamic library of lib_acl, it needs to be predefined in the user's project: ACL_DLL;
* When using the HTTP library or ICMP library in the lib_protocol dynamic library, you need to predefine HTTP_DLL or ICMP_DLL in the project;
* When using the dynamic library of lib_acl_cpp, you need to predefine ACL_CPP_DLL in the project. If you use the VC2003 compiler environment, you need to predefine VC2003.
* When using the dynamic library of lib_dict, you need to predefine DICT_DLL in the project;
* When using a dynamic library of lib_tls, you need to predefine TLS_DLL in your project.
* Detailed compilation process, see: [compilation and use of acl library] (BUILD.md)
## 3 Description of directory structure
### 3.1 lib_acl
1. init : mainly used to initialize the acl base library
2. stdlib: is a relatively basic function library. In the stdlib/ root directory, it mainly includes some functions related to logging, network/file stream processing, VSTRING buffer operation, etc. There are two directories under stdlib/, as follows :
- 2.1 common : This directory is mainly used for some commonly used data structures and algorithmic function libraries, such as hash tables, linked lists, queues, dynamic arrays, stacks, caches, balanced binary trees, pattern matching trees, etc.
- 2.2 memory : This directory mainly contains function libraries related to memory operations, such as memory base allocation and verification, memory pool management, memory slice management, etc.
- 2.3 filedir: This directory mainly contains libraries related to directory traversal, directory creation, etc.
- 2.4 configure : This directory mainly contains the analysis library of the configuration file;
- 2.5 iostuff: This directory mainly contains some commonly used function libraries for IO operations, such as read/write timeout, setting the blocking mode of IO handles, etc.
- 2.6 string : This directory mainly contains some commonly used string manipulation libraries, providing more flexible and efficient string manipulation functions than standard C;
- 2.7 debug : Mainly used to assist in debugging memory leaks and other functions;
- 2.8 sys: is mainly a package function library of APIs related to different operating system platforms;
3. **net: is a function library related to network operation, including network monitoring, network connection, DNS query, socket parameter setting and other functions;
- 3.1 connect : Mainly a function library related to network connection, including network connection, domain socket connection, etc.;
- 3.2 listen : Mainly related to the network monitoring function library, including network monitoring, domain socket monitoring, etc.;
- 3.3 dns: Mainly related to the DNS domain name query, including the encapsulation of interfaces such as gethostbyname, and the ability to directly send UDP packets according to the RFC1035 standard.
4. **event: Mainly encapsulates system API interfaces such as select/poll/epoll/iocp/win message/kqueue/devpoll, which makes handling network events more flexible, efficient, and simple. It also includes timer interface, many in acl. Network applications will use these interfaces, such as aio, master and other modules; **
5. **aio: A function that mainly contains asynchronous operations on the network. This library is very efficient when dealing with high concurrency, and provides a more advanced calling method than the base API, than using a file like libevent. The library is simpler and thread safe;**
6. msg: mainly contains thread-based message events and network-based message events;
7. thread: Mainly encapsulates the basic thread API under each OS platform, which makes the external interface consistent, eliminates the difference of the platform, and also provides a semi-resident thread pool function library, as well as thread-local variables. Expansion
8. db: Mainly some database-related function libraries, defines a common database connection pool framework (and implements mysql connection pool instance); a simple in-memory database (by hash table, linked list, balanced binary tree) Combined); ZDB data storage engine, which is an efficient digital key-based storage engine;
9. proctl: the parent and child process control function library under the win32 platform;
10. code : Common coding function library, including base64 codec, URL codec and some Chinese character set encoding;
11. unit_test : contains a library of functions for testing C language units;
12. xml: is a streaming xml parser and constructor that supports blocking and blocking network communication;
13. json: is a streaming json parser and constructor that supports blocking and blocking network communications;
14. **master: is a server framework that supports multiple server modes in the UNIX environment. Currently, it supports multi-process mode, multi-process multi-thread mode, multi-process non-blocking mode, multi-process trigger mode and UDP communication mode; *
### 3.2 lib_protocol
1. http: HTTP protocol related library, support HTTP/1.1, communication mode supports synchronous/asynchronous mode
2. icmp: icmp/ping protocol library, supporting synchronous/asynchronous communication
3. smtp: mail client sending protocol library
### 3.3 lib_acl_cpp
1. stdlib: mainly contains string processing class (string), xml/json parsing library, zlib compression library (depends on zlib library), logging class, character set transcoding (ivel library is required in UNIX environment), memcached client Library, mutual exclusion class (supports thread lock, file lock);
2. **stream: Supports network flow/file flow, supports blocking/non-blocking communication modes, supports select/poll/epoll/iocp/win32 message/kqueue/devpoll in non-blocking mode; supports ssl encrypted transmission (blocking) And non-blocking mode, need polarsl library); **
3. ipc: provides a way to integrate blocking modules with non-blocking modules in non-blocking communication mode;
4. **http: A complete HTTP communication library and protocol parsing library, support client and server mode, support ssl/gzip transmission mode; support most interfaces similar to Java HttpServlet mode, convenient to write CGI and WEB server programs ;**
5. db: encapsulates the MYSQL/SQLITE library and supports database connection pooling;
6. hsocket: implements the complete handler-socket client communication library;
7. **mime: Supports complete library related to mail encoding (rfc2045-rfc2047/rfc822/base64/uucode encoding and decoding library for mail).**
8. **master: Server framework library that encapsulates the C library**
9. beanstalk: message queue application beanstalkd client communication library, support connection pool
10. connpool: Universal connection pool library
11. hscoket: mysql plugin handle-socket client communication library, support connection pool
12. memcache: client library of memcached application, support connection pool and connection pool cluster management
13. queue: disk file queue operation library
14. ipc: Blocking/non-blocking communication integration library
15. session: HTTP session library
16. **redis: Full implementation of the redis protocol client communication library (12 major categories, more than 150 commands), support connection pooling and connection pool cluster management**
17. disque: Support for cluster message queue service disque client library, support connection pool and connection pool cluster management
### 3.4 lib_fiber
1. c directory: This directory is mainly a network coroutine library implemented in C language version, which contains source files and header files.
2. cpp directory: This directory contains the C language version of the network coroutine library
3. samples directory: There are a lot of examples in this directory using the programming of the coroutine library.
### 3.5 Legend
* Class index map:
![class index map](res/img/index.jpg)
* Asynchronous IO class inheritance graph
![Asynchronous IO class inheritance graph](res/img/aio_inherit.jpg)
* IO stream inheritance graph
![IO stream inheritance map](res/img/stream_inherit.jpg)
* acl service framework daemon event processing flow
![acl service daemon event processing flow] (res/img/acl_master.jpg)
* acl server framework child process event processing flow
![Service Child Process Event Flow] (res/img/master_proc.jpg)
* Receive a CGI program that uploads files:
![CGI program to receive uploaded files] (res/img/cgi_upload.jpg)
* File download client program:
![File Download Client Program] (res/img/http_download.jpg)
* Web downloader:
![Web downloader](res/img/http_client.jpg)
### 3.6 There are a lot of examples in the acl library for reference, please refer to: [SAMPLES.md](SAMPLES.md)
### 3.7 Acl using FAQ: [FAQ.md](FAQ.md)
## 4 Who are using acl?
[![iqiyi](res/logo/logo_iqiyi.png)](http://www.iqiyi.com/)
[![263](res/logo/logo_263.png)](http://www.263.net/)
[![hexun](res/logo/logo_hexun.png)](http://www.hexun.com/)
[![v1](res/logo/logo_v1.png)](http://www.v1.cn/)
[![lecloud](res/logo/logo_lecloud.png)](http://www.lecloud.com/)
[![ksyun](res/logo/logo_ksyun.png)](https://www.ksyun.com/)
[![weibangong](res/logo/logo_weibangong.png)](https://www.weibangong.com/)
[![xianyou](res/logo/logo_xianyou.png)](http://www.i3game.com/)
[![foundao](res/logo/logo_foundao.png)](http://www.foundao.com/)
## 5 License
- LGPL-v3 license (see [LICENSE.txt](LICENSE.txt) in the acl project)
## 6 Reference
- WEB site: https://blog.csdn.net/zsxxsz
- Github: https://github.com/acl-dev/acl
- Oschina: https://gitee.com/acl-dev/acl
- Weibo: http://weibo.com/zsxxsz
- QQ Group: 693868497

View File

@ -1,181 +0,0 @@
# acl 示例
## acl 项目的测试及应用示例,主要包括三个示例集合,如下:
### 1、acl/samples该目录下的例子主要是基于 lib_acl 及 lib_protocol 两个库的例子
- 1.1 acl: 打印当前 acl 库版本号程序
- 1.2 aio/client: 非阻塞 io 客户端
- 1.3 aio/server: 非阻塞 io 服务器
- 1.4 base64: base64 编/解码程序
- 1.5 btree: 二叉树程序
- 1.6 cache: 对象缓存程序
- 1.7 cache2: 对象缓存程序
- 1.8 cgi_env: CGI 程序用来获得 CGI 环境变量
- 1.9 chunk_chain: 二分块数据程序
- 1.10 configure: 配置文件处理程序
- 1.11 connect: 网络客户端连接程序
- 1.12 dbpool: 数据库连接池程序
- 1.13 dlink: 二分块查找算法程序
- 1.14 dns: 域名查询程序
- 1.15 dns_req: 域名查询程序
- 1.16 event: 事件引擎程序
- 1.17 fifo: 先进先出算法程序
- 1.18 file: 文件流处理程序
- 1.19 file_fmt: 将 UNIX 下的 \n 转为 WIN32 下的 \r\n 或者反向转换程序
- 1.20 FileDir: win32 下目录操作程序
- 1.21 flock: 文件锁处理程序
- 1.22 gc: 内存自动回收程序
- 1.23 htable: 哈希表处理程序
- 1.24 http/header: http 客户端程序
- 1.25 http/url_get1: 网页下载客户端程序
- 1.26 http/url_get2: 网页下载客户端程序
- 1.27 http/url_get3: 网页下载客户端程序
- 1.28 http_aio: 简单的 HTTP 异步下载程序
- 1.29 http_client: WIN32 下 HTTP 客户端程序
- 1.30 http_probe: HTTP 客户端程序
- 1.31 ifconf: 获取本机网卡的程序
- 1.32 iplink: IP 地址段管理程序
- 1.33 iterator: C 方式进行遍历的程序
- 1.34 json: json 对象处理程序
- 1.35 json2: json 对象处理程序
- 1.36 json3: json 对象处理程序
- 1.37 jt2ft: 简体转繁体程序
- 1.38 log: 日志处理程序
- 1.39 master/aio_echo: 非阻塞回显服务器程序
- 1.40 master/aio_proxy: 非阻塞 TCP 代理程序
- 1.41 master/ioctl_echo2: 多线程回显示服务器程序
- 1.42 master/ioctl_echo3: 多线程回显示服务器程序
- 1.43 master/master_notify: 多线程服务器程序
- 1.44 master/master_threads: 多线程服务器程序
- 1.45 master/single_echo: 多进程回显示服务器程序
- 1.46 master/trigger: 触发器服务器程序
- 1.47 master/udp_echo: UDP 回显服务器程序
- 1.48 memdb: 简单的内存数据库程序
- 1.49 mempool: 内存池程序
- 1.50 mkdir: 创建多级目录程序
- 1.51 net: 简单网络程序
- 1.52 ping: 阻塞/非阻塞 PING 程序
- 1.53 pipe: 管道处理程序
- 1.54 proctl: WIN32 下父子进程程序
- 1.55 resolve: 域名解析程序
- 1.56 server: 简单的服务器程序
- 1.57 server1: 简单的服务器程序
- 1.58 slice: 内存池切片程序
- 1.59 slice_mem: 内存池切片程序
- 1.60 smtp_client: smtp 客户端发信程序
- 1.61 string: acl 字符串处理程序
- 1.62 thread: 线程程序
- 1.63 token_tree: 256 叉树程序
- 1.64 udp_clinet: UDP 客户端程序
- 1.65 udp_server: UDP 服务器程序
- 1.66 urlcode: URL 编码处理程序
- 1.67 vstream: IO 网络流处理程序
- 1.68 vstream_client: 网络客户端流程序
- 1.69 vstream_fseek: 文件流处理程序
- 1.70 vstream_fseek2: 文件流处理程序
- 1.71 vstream_popen: 管道流处理程序
- 1.71 vstream_popen2: 管道流处理程序
- 1.71 vstream_popen3: 管道流处理程序
- 1.72 vstream_server: 网络服务端程序
- 1.73 xml: XML 解析程序
- 1.74 xml2: XML 解析程序
- 1.75 zdb: 数字KEY/VALUE 文件存储引擎程序
### 2、acl/lib_acl_cpp/samples该目录下的例子基本是基于 lib_acl_cpp 库写的 C++ 例子
- 2.1 aio/aio_client: 非阻塞网络客户端程序
- 2.2 aio/aio_dns: 非阻塞域名解析客户端程序
- 2.3 aio/aio_echo: 非阻塞回显服务器程序
- 2.4 aio/aio_ipc: 阻塞/非阻塞整合的网络程序
- 2.5 aio/aio_server: 非阻塞服务器程序
- 2.6 beanstalk: 队列应用 beanstalkd 的客户端程序
- 2.7 benchmark: 与性能测试相关的程序集
- 2.8 cgi: 简单的 WEB CGI 程序
- 2.9 cgi_upload: 接收上传文件的 CGI 程序
- 2.10 charset: 字符集转换程序
- 2.11 check_trigger: 检测远程 HTTP 服务器状态的触发器程序
- 2.12 connect_manager: 客户端连接池集群管理程序
- 2.13 db_service: 与数据库相关的程序
- 2.14 dbpool: 使用数据库客户端连接池的程序
- 2.15 dircopy: 目录文件拷贝程序
- 2.16 final_class: 禁止继承类程序
- 2.17 flock: 文件锁处理程序
- 2.18 fs_benchmark: 文件系统压力测试程序
- 2.19 fstream: 文件流程序
- 2.20 gui_rpc: WIN32 下阻塞过程与 WIN32 界面的消息整合的例子
- 2.21 hsclient: handle-socket 客户端程序
- 2.22 http_client: HTTP 客户端程序
- 2.23 http_client2: HTTP 客户端程序
- 2.24 http_mime: HTTP 协议的 MIME 格式处理程序
- 2.25 htttp/http_request: 使用 http_request 类的 HTTP 客户端程序
- 2.26 http_request_manager: HTTP 客户端连接池集群程序
- 2.27 http_request_pool: HTTP 客户端连接池程序
- 2.28 http_request2: 使用 http_request 类的 HTTP 客户端程序
- 2.29 http/http_response: 使用 http_reponse 类响应 HTTP 客户端请求的程序
- 2.30 http_server: 简单的 HTTP 服务器程序
- 2.31 http_servlet: 类似于 JAVA HttpServlet 的程序
- 2.32 http_servlet2: 类似于 JAVA HttpServlet 的程序
- 2.33 HttpClient: 简单的 HTTP 客户端程序
- 2.34 json/json0 - json7: json 字符串对象解析程序
- 2.35 logger: 日志程序
- 2.36 master/master_aio: 非阻塞服务器程序
- 2.37 master_aio_proxy: 非阻塞 TCP 代理服务器程序
- 2.38 master/master_http_aio: 简单的非阻塞 HTTP 服务器程序
- 2.39 master/master_http_rpc: 阻塞/非阻塞整合的 HTTP 服务器程序
- 2.40 master/master_http_threads: 多线程 HTTP 服务器程序
- 2.40 master/master_http_threads2: 多线程 HTTP 服务器程序
- 2.41 master/maser_proc: 进程池服务器程序
- 2.42 master/master_threads: 多线程服务器程序
- 2.43 master/master_trigger: 触发器服务器程序
- 2.44 master/master_udp: UDP 通信服务器程序
- 2.45 master/master_udp_threads: 多线程 UDP 通信服务器程序
- 2.46 md5: md5 处理程序
- 2.47 mem_cache: memcached 客户端程序
- 2.47 memcache_pool: memcached 支持连接池的客户端程序
- 2.48 mime: 邮件 MIME 解析处理程序
- 2.49 mime_base64: MIME BASE64 格式处理程序
- 2.50 mime_qp: MIME QP 格式处理程序
- 2.51 mime_xxcode: MIME XXCODE 格式处理程序
- 2.52 mysql: mysql 客户端程序
- 2.53 mysql2: mysql 客户端程序
- 2.54 rfc822: 邮件的 RFC822 协议处理程序
- 2.55 rfc2047: 邮件的 RFC2047 协议处理程序
- 2.56 rpc_download: 采用阻塞/非阻塞整合方式进行 HTTP 下载的程序
- 2.57 scan_dir: 目录递归扫描程序
- 2.58 singleton: 单例程序
- 2.59 session: 会话程序
- 2.60 socket_client: 网络客户端程序
- 2.61 socket_stream: 网络流处理程序
- 2.62 sqlite: sqlite 数据库程序
- 2.63 ssl_aio_client: SSL 非阻塞网络客户端程序
- 2.64 ssl_clinet: SSL 阻塞网络客户端程序
- 2.65 string: 动态缓冲区处理程序
- 2.66 string2: 动态缓冲区处理程序
- 2.67 thread: 多线程程序
- 2.68 thread_client: 多线程客户端程序
- 2.69 thread_pool: 线程池程序
- 2.70 udp_client: UDP 通信客户端程序
- 2.71 url_coder: URL 编、解码程序
- 2.72 win_dbservice: 基于 WIN32 图形界面的数据库处理程序
- 2.73 winaio: 基于 WIN32 图形界面的非阻塞客户端程序
- 2.74 xml: XML 对象解析处理程序
- 2.75 zlib: 压缩格式处理程序
- 2.75 redis/redis_connection: redis Connection 客户端程序
- 2.76 redis/redis_hash: redis 哈希表类客户端程序
- 2.77 redis/redis_hyperloglog: redis hyperloglog 客户端程序
- 2.78 redis/redis_key: redis 键类客户端程序
- 2.79 redis/redis_list: redis 列表客户端程序
- 2.80 redis/redis_manager: redis 连接池集群管理客户端程序
- 2.81 redis/redis_pool: redis 连接池客户端程序
- 2.82 redis/redis_pubsub: redis 发布订阅客户端程序
- 2.83 redis/redis_server: redis 服务器管理的客户端程序
- 2.84 redis/redis_set: redis 集合客户端程序
- 2.85 redis/redis_string: redis 字符串客户端程序
- 2.86 redis/redis_trans: redis 事务客户端程序
- 2.87 redis/redis_zset: redis 有序集客户端程序
- 2.88 redis/redis_zset_pool: redis 有序集客户端程序,使用有序集对象存储大数据块,支持连接池方式
### 3、acl/app该目录下的例子主要是一些比较实用的例子
- **3.1 wizard: 用来生成基于 acl 服务器框架的程序模板的程序**
- 3.2 gid: 用来产生全局唯一 ID 号的服务程序(含客户端库)
- 3.3 net_tools: 用来测试网络状态的程序
- 3.4 master_dispatch: 对后端服务器分配 TCP 连接的连接均衡程序
- 3.5 jaws目前不可用基于 acl 的非阻塞通信模块和 HTTP 模块写的一个简易的 HTTP 高并发服务器程序

View File

@ -1 +0,0 @@
theme: jekyll-theme-slate

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros" />
<PropertyGroup />
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(ProjectDir)include;$(SolutionDir)lib_acl_cpp\include;$(SolutionDir)lib_acl\include;$(SolutionDir)lib_protocol\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(SolutionDir)lib_acl_cpp;$(SolutionDir)lib_acl;$(SolutionDir)lib_protocol;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<AdditionalDependencies>lib_acl_cpp_vc2015d.lib;lib_acl_vc2015d.lib;lib_protocol_vc2015d.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup />
</Project>

View File

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<Group
location = "container:"
name = "samples">
<Group
location = "container:"
name = "fiber">
<FileRef
location = "group:lib_fiber/samples/xcode/fiber_server/fiber_server.xcodeproj">
</FileRef>
</Group>
</Group>
<FileRef
location = "group:lib_fiber/fiber_cpp.xcodeproj">
</FileRef>
<FileRef
location = "group:lib_fiber/fiber.xcodeproj">
</FileRef>
<FileRef
location = "group:lib_acl/acl.xcodeproj">
</FileRef>
<FileRef
location = "group:lib_protocol/protocol.xcodeproj">
</FileRef>
<FileRef
location = "group:lib_acl_cpp/acl_cpp.xcodeproj">
</FileRef>
</Workspace>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,244 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.31101.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_acl", "lib_acl\lib_acl_vc2013.vcxproj", "{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_protocol", "lib_protocol\lib_protocol_vc2013.vcxproj", "{FE724EF7-3763-4E78-BDF5-BCBC075719FD}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_acl_cpp", "lib_acl_cpp\lib_acl_cpp_vc2013.vcxproj", "{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{C65ABD0D-658D-4FE6-8221-4400B8387F27}"
ProjectSection(SolutionItems) = preProject
changes.txt = changes.txt
README.md = README.md
SAMPLES.md = SAMPLES.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{F3FA3285-72DD-49F2-82EF-8CA03CE20792}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fiber", "fiber", "{BF81B2CD-2948-4EB9-925F-764AE0EB9BF9}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fiber", "lib_fiber\samples\fiber\fiber_vc2013.vcxproj", "{6265F6E1-CF6D-4C22-8F91-95921659C146}"
ProjectSection(ProjectDependencies) = postProject
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfiber_cpp", "lib_fiber\cpp\libfiber_cpp_vc2013.vcxproj", "{F2479E2C-7267-436C-A1F1-A63B39E7CB30}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfiber", "lib_fiber\c\libfiber_vc2013.vcxproj", "{AD99B75A-40BF-46DC-844B-23417FDC8690}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinEchod", "lib_fiber\samples\WinEchod\WinEchod_vc2013.vcxproj", "{F74A61AD-A309-47A5-A7C6-BAC888660BBC}"
ProjectSection(ProjectDependencies) = postProject
{F2479E2C-7267-436C-A1F1-A63B39E7CB30} = {F2479E2C-7267-436C-A1F1-A63B39E7CB30}
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
DebugDll|Mixed Platforms = DebugDll|Mixed Platforms
DebugDll|Win32 = DebugDll|Win32
DebugDll|x64 = DebugDll|x64
Release|Mixed Platforms = Release|Mixed Platforms
Release|Win32 = Release|Win32
Release|x64 = Release|x64
ReleaseDll|Mixed Platforms = ReleaseDll|Mixed Platforms
ReleaseDll|Win32 = ReleaseDll|Win32
ReleaseDll|x64 = ReleaseDll|x64
Template|Mixed Platforms = Template|Mixed Platforms
Template|Win32 = Template|Win32
Template|x64 = Template|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Win32.ActiveCfg = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Win32.Build.0 = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|x64.ActiveCfg = Debug|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Win32.Build.0 = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|x64.ActiveCfg = DebugDll|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Mixed Platforms.Build.0 = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Win32.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Win32.Build.0 = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|x64.ActiveCfg = Release|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll|x64.ActiveCfg = ReleaseDll|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Mixed Platforms.Build.0 = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Win32.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Win32.Build.0 = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|x64.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Win32.ActiveCfg = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Win32.Build.0 = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|x64.ActiveCfg = Debug|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Win32.Build.0 = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|x64.ActiveCfg = DebugDll|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Mixed Platforms.Build.0 = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Win32.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Win32.Build.0 = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|x64.ActiveCfg = Release|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll|x64.ActiveCfg = ReleaseDll|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Mixed Platforms.Build.0 = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Win32.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Win32.Build.0 = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|x64.ActiveCfg = ReleaseDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|Win32.ActiveCfg = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|Win32.Build.0 = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|x64.ActiveCfg = Debug|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|Win32.Build.0 = DebugDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|x64.ActiveCfg = DebugDll|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|Mixed Platforms.Build.0 = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|Win32.ActiveCfg = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|Win32.Build.0 = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|x64.ActiveCfg = Release|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.ReleaseDll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.ReleaseDll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.ReleaseDll|x64.ActiveCfg = ReleaseDll|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Mixed Platforms.Build.0 = ReleaseDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Win32.ActiveCfg = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Win32.Build.0 = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|x64.ActiveCfg = ReleaseDll|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Debug|Win32.ActiveCfg = Debug|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Debug|Win32.Build.0 = Debug|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Debug|x64.ActiveCfg = Debug|x64
{6265F6E1-CF6D-4C22-8F91-95921659C146}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.DebugDll|Win32.Build.0 = DebugDll|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.DebugDll|x64.ActiveCfg = DebugDll|x64
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Release|Mixed Platforms.Build.0 = Release|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Release|Win32.ActiveCfg = Release|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Release|Win32.Build.0 = Release|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Release|x64.ActiveCfg = Release|x64
{6265F6E1-CF6D-4C22-8F91-95921659C146}.ReleaseDll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.ReleaseDll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.ReleaseDll|x64.ActiveCfg = ReleaseDll|x64
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Template|Mixed Platforms.ActiveCfg = Release|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Template|Mixed Platforms.Build.0 = Release|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Template|Win32.ActiveCfg = Release|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Template|Win32.Build.0 = Release|Win32
{6265F6E1-CF6D-4C22-8F91-95921659C146}.Template|x64.ActiveCfg = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Debug|Win32.ActiveCfg = Debug|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Debug|Win32.Build.0 = Debug|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Debug|x64.ActiveCfg = Debug|x64
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.DebugDll|Win32.Build.0 = DebugDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.DebugDll|x64.ActiveCfg = DebugDll|x64
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Release|Mixed Platforms.Build.0 = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Release|Win32.ActiveCfg = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Release|Win32.Build.0 = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Release|x64.ActiveCfg = Release|x64
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.ReleaseDll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.ReleaseDll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.ReleaseDll|x64.ActiveCfg = ReleaseDll|x64
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|Mixed Platforms.ActiveCfg = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|Mixed Platforms.Build.0 = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|Win32.ActiveCfg = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|Win32.Build.0 = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|x64.ActiveCfg = Release|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Debug|Win32.ActiveCfg = Debug|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Debug|Win32.Build.0 = Debug|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Debug|x64.ActiveCfg = Debug|x64
{AD99B75A-40BF-46DC-844B-23417FDC8690}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.DebugDll|Win32.Build.0 = DebugDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.DebugDll|x64.ActiveCfg = DebugDll|x64
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Release|Mixed Platforms.Build.0 = Release|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Release|Win32.ActiveCfg = Release|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Release|Win32.Build.0 = Release|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Release|x64.ActiveCfg = Release|x64
{AD99B75A-40BF-46DC-844B-23417FDC8690}.ReleaseDll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.ReleaseDll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.ReleaseDll|x64.ActiveCfg = ReleaseDll|x64
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|Mixed Platforms.ActiveCfg = DebugDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|Mixed Platforms.Build.0 = DebugDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|Win32.ActiveCfg = DebugDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|Win32.Build.0 = DebugDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|x64.ActiveCfg = DebugDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Debug|Win32.ActiveCfg = Debug|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Debug|Win32.Build.0 = Debug|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Debug|x64.ActiveCfg = Debug|x64
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.DebugDll|Win32.Build.0 = DebugDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.DebugDll|x64.ActiveCfg = DebugDll|x64
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Release|Mixed Platforms.Build.0 = Release|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Release|Win32.ActiveCfg = Release|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Release|Win32.Build.0 = Release|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Release|x64.ActiveCfg = Release|x64
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.ReleaseDll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.ReleaseDll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.ReleaseDll|x64.ActiveCfg = ReleaseDll|x64
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Template|Mixed Platforms.ActiveCfg = DebugDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Template|Mixed Platforms.Build.0 = DebugDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Template|Win32.ActiveCfg = DebugDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Template|Win32.Build.0 = DebugDll|Win32
{F74A61AD-A309-47A5-A7C6-BAC888660BBC}.Template|x64.ActiveCfg = DebugDll|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{BF81B2CD-2948-4EB9-925F-764AE0EB9BF9} = {F3FA3285-72DD-49F2-82EF-8CA03CE20792}
{6265F6E1-CF6D-4C22-8F91-95921659C146} = {BF81B2CD-2948-4EB9-925F-764AE0EB9BF9}
{F74A61AD-A309-47A5-A7C6-BAC888660BBC} = {BF81B2CD-2948-4EB9-925F-764AE0EB9BF9}
EndGlobalSection
EndGlobal

File diff suppressed because it is too large Load Diff

View File

@ -1,140 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27004.2009
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_acl", "lib_acl\lib_acl_vc2017.vcxproj", "{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_protocol", "lib_protocol\lib_protocol_vc2017.vcxproj", "{FE724EF7-3763-4E78-BDF5-BCBC075719FD}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_acl_cpp", "lib_acl_cpp\lib_acl_cpp_vc2017.vcxproj", "{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{C65ABD0D-658D-4FE6-8221-4400B8387F27}"
ProjectSection(SolutionItems) = preProject
changes.txt = changes.txt
README.md = README.md
SAMPLES.md = SAMPLES.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{083DCC81-9A3F-4B12-9821-2B9F52BCCF79}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "app", "app", "{30B69273-9D47-4AD6-B1C5-CF362F9C6D80}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "acl", "acl", "{90E84C91-D60C-47C0-AE83-16056AB38FCC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "acl_cpp", "acl_cpp", "{AB838366-C278-426E-ADDF-BE3A32BADD3E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "protocol", "protocol", "{239E2283-051C-466D-8D61-877FDACE4EDF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aio", "aio", "{5E5307B3-44A8-4E49-A91D-999EF818C486}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "client", "client", "{B600857F-0C3F-4146-B347-009B57B67ADE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
DebugDll|Mixed Platforms = DebugDll|Mixed Platforms
DebugDll|Win32 = DebugDll|Win32
DebugDll|x64 = DebugDll|x64
Release|Mixed Platforms = Release|Mixed Platforms
Release|Win32 = Release|Win32
Release|x64 = Release|x64
Releasedll|Mixed Platforms = Releasedll|Mixed Platforms
Releasedll|Win32 = Releasedll|Win32
Releasedll|x64 = Releasedll|x64
Template|Mixed Platforms = Template|Mixed Platforms
Template|Win32 = Template|Win32
Template|x64 = Template|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Win32.ActiveCfg = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Win32.Build.0 = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|x64.ActiveCfg = Debug|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Win32.Build.0 = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|x64.ActiveCfg = DebugDll|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Mixed Platforms.Build.0 = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Win32.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Win32.Build.0 = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|x64.ActiveCfg = Release|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Mixed Platforms.Build.0 = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Win32.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Win32.Build.0 = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|x64.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Win32.ActiveCfg = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Win32.Build.0 = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|x64.ActiveCfg = Debug|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Win32.Build.0 = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|x64.ActiveCfg = DebugDll|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Mixed Platforms.Build.0 = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Win32.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Win32.Build.0 = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|x64.ActiveCfg = Release|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Mixed Platforms.Build.0 = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Win32.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Win32.Build.0 = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|x64.ActiveCfg = ReleaseDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|Win32.ActiveCfg = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|Win32.Build.0 = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|x64.ActiveCfg = Debug|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|Win32.Build.0 = DebugDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|x64.ActiveCfg = DebugDll|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|Mixed Platforms.Build.0 = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|Win32.ActiveCfg = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|Win32.Build.0 = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|x64.ActiveCfg = Release|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Releasedll|Mixed Platforms.ActiveCfg = Releasedll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Releasedll|Mixed Platforms.Build.0 = Releasedll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Releasedll|Win32.ActiveCfg = Releasedll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Releasedll|Win32.Build.0 = Releasedll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Releasedll|x64.ActiveCfg = Releasedll|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Mixed Platforms.ActiveCfg = Releasedll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Mixed Platforms.Build.0 = Releasedll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Win32.ActiveCfg = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Win32.Build.0 = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|x64.ActiveCfg = Releasedll|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{90E84C91-D60C-47C0-AE83-16056AB38FCC} = {083DCC81-9A3F-4B12-9821-2B9F52BCCF79}
{AB838366-C278-426E-ADDF-BE3A32BADD3E} = {083DCC81-9A3F-4B12-9821-2B9F52BCCF79}
{239E2283-051C-466D-8D61-877FDACE4EDF} = {083DCC81-9A3F-4B12-9821-2B9F52BCCF79}
{5E5307B3-44A8-4E49-A91D-999EF818C486} = {90E84C91-D60C-47C0-AE83-16056AB38FCC}
{B600857F-0C3F-4146-B347-009B57B67ADE} = {5E5307B3-44A8-4E49-A91D-999EF818C486}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {40FA3A5B-123F-4EC0-9EEB-8A9C17BF573B}
EndGlobalSection
EndGlobal

View File

@ -1,905 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30717.126
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_acl", "lib_acl\lib_acl_vc2019.vcxproj", "{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_protocol", "lib_protocol\lib_protocol_vc2019.vcxproj", "{FE724EF7-3763-4E78-BDF5-BCBC075719FD}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_acl_cpp", "lib_acl_cpp\lib_acl_cpp_vc2019.vcxproj", "{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{C65ABD0D-658D-4FE6-8221-4400B8387F27}"
ProjectSection(SolutionItems) = preProject
changes.txt = changes.txt
README.md = README.md
SAMPLES.md = SAMPLES.md
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{083DCC81-9A3F-4B12-9821-2B9F52BCCF79}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "app", "app", "{30B69273-9D47-4AD6-B1C5-CF362F9C6D80}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "acl", "acl", "{90E84C91-D60C-47C0-AE83-16056AB38FCC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "acl_cpp", "acl_cpp", "{AB838366-C278-426E-ADDF-BE3A32BADD3E}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "protocol", "protocol", "{239E2283-051C-466D-8D61-877FDACE4EDF}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aio", "aio", "{5E5307B3-44A8-4E49-A91D-999EF818C486}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfiber", "lib_fiber\c\libfiber_vc2019.vcxproj", "{AD99B75A-40BF-46DC-844B-23417FDC8690}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libfiber_cpp", "lib_fiber\cpp\libfiber_cpp_vc2019.vcxproj", "{F2479E2C-7267-436C-A1F1-A63B39E7CB30}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "redis_ssl", "lib_acl_cpp\samples\redis\redis_ssl\redis_ssl_vc2019.vcxproj", "{4D42F462-A2FE-4B4A-A680-53668FA128A6}"
ProjectSection(ProjectDependencies) = postProject
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fiber_cpp", "fiber_cpp", "{FD628E34-FBB8-4C60-8176-B770EC631CD9}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "server", "lib_fiber\samples-c++1x\server\server.vcxproj", "{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}"
ProjectSection(ProjectDependencies) = postProject
{F2479E2C-7267-436C-A1F1-A63B39E7CB30} = {F2479E2C-7267-436C-A1F1-A63B39E7CB30}
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "master_fiber", "lib_fiber\samples\master_fiber\master_fiber_vc2019.vcxproj", "{3E725148-0807-4CBA-8FC1-7FCA46F605F3}"
ProjectSection(ProjectDependencies) = postProject
{F2479E2C-7267-436C-A1F1-A63B39E7CB30} = {F2479E2C-7267-436C-A1F1-A63B39E7CB30}
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WinFiber", "lib_fiber\samples-gui\WinFiber\WinFiber_vc2019.vcxproj", "{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}"
ProjectSection(ProjectDependencies) = postProject
{F2479E2C-7267-436C-A1F1-A63B39E7CB30} = {F2479E2C-7267-436C-A1F1-A63B39E7CB30}
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fiber_gui", "fiber_gui", "{1CB30F2E-2587-43E7-A3CF-787783FB6924}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HttpGet", "lib_fiber\samples-gui\HttpGet\HttpGet.vcxproj", "{FE7E9F00-7F46-4072-8B29-A4E915259CDE}"
ProjectSection(ProjectDependencies) = postProject
{F2479E2C-7267-436C-A1F1-A63B39E7CB30} = {F2479E2C-7267-436C-A1F1-A63B39E7CB30}
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EchoServer", "lib_fiber\samples-gui\EchoServer\EchoServer.vcxproj", "{30A882E6-CF13-494F-9132-CE15E040B9DE}"
ProjectSection(ProjectDependencies) = postProject
{F2479E2C-7267-436C-A1F1-A63B39E7CB30} = {F2479E2C-7267-436C-A1F1-A63B39E7CB30}
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "client", "lib_fiber\samples-c++1x\client\client.vcxproj", "{2F80A939-E4BD-4ED7-B512-95FC2B563036}"
ProjectSection(ProjectDependencies) = postProject
{F2479E2C-7267-436C-A1F1-A63B39E7CB30} = {F2479E2C-7267-436C-A1F1-A63B39E7CB30}
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "server-threads", "lib_fiber\samples-c++1x\server-threads\server-threads.vcxproj", "{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}"
ProjectSection(ProjectDependencies) = postProject
{F2479E2C-7267-436C-A1F1-A63B39E7CB30} = {F2479E2C-7267-436C-A1F1-A63B39E7CB30}
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "httpd", "lib_fiber\samples-c++1x\httpd\httpd.vcxproj", "{2F80A939-E4BD-4ED7-B512-95FC2B563009}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "httpc", "lib_fiber\samples-c++1x\httpc\httpc.vcxproj", "{2F80A939-E4BD-4ED7-B512-95FC2B563099}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "redis_list", "lib_acl_cpp\samples\redis\redis_list\redis_list_vc2019.vcxproj", "{1D669177-07FD-4DDD-A13E-52A7DF19CA62}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "client2", "lib_fiber\samples\client2\client2_vc2019.vcxproj", "{A08F48F5-D359-4332-8743-F9D85887AEF6}"
ProjectSection(ProjectDependencies) = postProject
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "fiber", "fiber", "{57B0C6FC-DDAE-41EC-8E04-2D2D8E803D7A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "server2", "lib_fiber\samples\server2\server2_vc2019.vcxproj", "{7F39A2AE-FE11-4C92-A174-269BE486DE4D}"
ProjectSection(ProjectDependencies) = postProject
{AD99B75A-40BF-46DC-844B-23417FDC8690} = {AD99B75A-40BF-46DC-844B-23417FDC8690}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "thread", "thread", "{5084C239-8D10-4E35-9E9F-A58550DE70B5}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "thread_once", "lib_acl\samples\thread\thread_once\thread_once_vc2019.vcxproj", "{A08F48F5-D359-4332-8743-F9D85887AEFE}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aio_server", "lib_acl\samples\aio\server\aio_server_vc2019.vcxproj", "{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aio_client", "lib_acl\samples\aio\client\aio_client_vc2019.vcxproj", "{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aio_client2", "lib_acl\samples\aio\client2\aio_client2_vc2019.vcxproj", "{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wizard_demo", "wizard_demo", "{FF701178-83CC-4992-B3FA-114073E7A33A}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "httpd_proxy", "app\wizard_demo\httpd_proxy\httpd_proxy_vc2019.vcxproj", "{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}"
ProjectSection(ProjectDependencies) = postProject
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fiber_tbox", "lib_fiber\samples\fiber_tbox\fiber_tbox.vcxproj", "{92668907-1B34-4B74-98A2-5849FDE67B34}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dns-gate", "app\wizard_demo\dns-gate\service\dns-gate_vc2019.vcxproj", "{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wizard", "app\wizard\wizard_vc2019.vcxproj", "{84376B60-FF20-4FD0-967E-C568FC2FBC53}"
ProjectSection(ProjectDependencies) = postProject
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC} = {6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gson", "app\gson\gson_vc2019.vcxproj", "{D15D860E-5012-471A-83D4-81A1251BF88D}"
ProjectSection(ProjectDependencies) = postProject
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B} = {B40213C2-507C-4C7F-A6E1-B850C9BDC27B}
{FE724EF7-3763-4E78-BDF5-BCBC075719FD} = {FE724EF7-3763-4E78-BDF5-BCBC075719FD}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "net_tools", "app\net_tools\net_tools_vc2019.vcxproj", "{45276293-D169-4D73-8930-F255C09DA976}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Mixed Platforms = Debug|Mixed Platforms
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
DebugDll|Mixed Platforms = DebugDll|Mixed Platforms
DebugDll|Win32 = DebugDll|Win32
DebugDll|x64 = DebugDll|x64
Release|Mixed Platforms = Release|Mixed Platforms
Release|Win32 = Release|Win32
Release|x64 = Release|x64
Releasedll|Mixed Platforms = Releasedll|Mixed Platforms
Releasedll|Win32 = Releasedll|Win32
Releasedll|x64 = Releasedll|x64
Template|Mixed Platforms = Template|Mixed Platforms
Template|Win32 = Template|Win32
Template|x64 = Template|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Win32.ActiveCfg = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|x64.ActiveCfg = Debug|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|x64.ActiveCfg = DebugDll|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Win32.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|x64.ActiveCfg = Release|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Mixed Platforms.Build.0 = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Win32.ActiveCfg = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|Win32.Build.0 = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Template|x64.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Win32.ActiveCfg = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|x64.ActiveCfg = Debug|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|x64.ActiveCfg = DebugDll|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Win32.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|x64.ActiveCfg = Release|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Mixed Platforms.Build.0 = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Win32.ActiveCfg = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|Win32.Build.0 = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Template|x64.ActiveCfg = ReleaseDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|Win32.ActiveCfg = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Debug|x64.ActiveCfg = Debug|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.DebugDll|x64.ActiveCfg = DebugDll|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|Win32.ActiveCfg = Release|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Release|x64.ActiveCfg = Release|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Releasedll|Mixed Platforms.ActiveCfg = Releasedll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Releasedll|Win32.ActiveCfg = Releasedll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Releasedll|x64.ActiveCfg = Releasedll|x64
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Mixed Platforms.ActiveCfg = Releasedll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Mixed Platforms.Build.0 = Releasedll|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Win32.ActiveCfg = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|Win32.Build.0 = Debug|Win32
{6EC1F44E-6A6A-48E9-B699-D7E89B63C8DC}.Template|x64.ActiveCfg = Releasedll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Debug|Win32.ActiveCfg = Debug|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Debug|x64.ActiveCfg = Debug|x64
{AD99B75A-40BF-46DC-844B-23417FDC8690}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.DebugDll|x64.ActiveCfg = DebugDll|x64
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Release|Win32.ActiveCfg = Release|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Release|x64.ActiveCfg = Release|x64
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|Mixed Platforms.Build.0 = Debug|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|Win32.ActiveCfg = Debug|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|Win32.Build.0 = Debug|Win32
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|x64.ActiveCfg = Debug|x64
{AD99B75A-40BF-46DC-844B-23417FDC8690}.Template|x64.Build.0 = Debug|x64
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Debug|Win32.ActiveCfg = Debug|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Debug|x64.ActiveCfg = Debug|x64
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.DebugDll|x64.ActiveCfg = DebugDll|x64
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Release|Win32.ActiveCfg = Release|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Release|x64.ActiveCfg = Release|x64
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|Mixed Platforms.Build.0 = Debug|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|Win32.ActiveCfg = Debug|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|Win32.Build.0 = Debug|Win32
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|x64.ActiveCfg = Debug|x64
{F2479E2C-7267-436C-A1F1-A63B39E7CB30}.Template|x64.Build.0 = Debug|x64
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Debug|Win32.ActiveCfg = Debug|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Debug|x64.ActiveCfg = Debug|x64
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.DebugDll|x64.ActiveCfg = DebugDll|x64
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Release|Win32.ActiveCfg = Release|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Release|x64.ActiveCfg = Release|x64
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Releasedll|Mixed Platforms.ActiveCfg = Releasedll|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Releasedll|Win32.ActiveCfg = Releasedll|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Releasedll|x64.ActiveCfg = Releasedll|x64
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Template|Mixed Platforms.Build.0 = Debug|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Template|Win32.ActiveCfg = Debug|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Template|Win32.Build.0 = Debug|Win32
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Template|x64.ActiveCfg = Debug|x64
{4D42F462-A2FE-4B4A-A680-53668FA128A6}.Template|x64.Build.0 = Debug|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Debug|Win32.ActiveCfg = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Debug|x64.ActiveCfg = Debug|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.DebugDll|x64.ActiveCfg = DebugDll|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Release|Win32.ActiveCfg = Release|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Release|x64.ActiveCfg = Release|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Template|Mixed Platforms.Build.0 = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Template|Win32.ActiveCfg = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Template|Win32.Build.0 = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Template|x64.ActiveCfg = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2}.Template|x64.Build.0 = Debug|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Debug|Win32.ActiveCfg = Debug|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Debug|x64.ActiveCfg = Debug|x64
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.DebugDll|x64.ActiveCfg = DebugDll|x64
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Release|Win32.ActiveCfg = Release|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Release|x64.ActiveCfg = Release|x64
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Template|Mixed Platforms.Build.0 = Debug|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Template|Win32.ActiveCfg = Debug|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Template|Win32.Build.0 = Debug|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Template|x64.ActiveCfg = Debug|Win32
{3E725148-0807-4CBA-8FC1-7FCA46F605F3}.Template|x64.Build.0 = Debug|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Debug|Win32.ActiveCfg = Debug|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Debug|x64.ActiveCfg = Debug|x64
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.DebugDll|x64.ActiveCfg = DebugDll|x64
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Release|Win32.ActiveCfg = Release|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Release|x64.ActiveCfg = Release|x64
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Template|Mixed Platforms.Build.0 = Debug|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Template|Win32.ActiveCfg = Debug|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Template|Win32.Build.0 = Debug|Win32
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Template|x64.ActiveCfg = Debug|x64
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222}.Template|x64.Build.0 = Debug|x64
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Debug|Win32.ActiveCfg = Debug|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Debug|x64.ActiveCfg = Debug|x64
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.DebugDll|x64.ActiveCfg = DebugDll|x64
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Release|Win32.ActiveCfg = Release|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Release|x64.ActiveCfg = Release|x64
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Template|Mixed Platforms.Build.0 = Debug|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Template|Win32.ActiveCfg = Debug|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Template|Win32.Build.0 = Debug|Win32
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Template|x64.ActiveCfg = Debug|x64
{FE7E9F00-7F46-4072-8B29-A4E915259CDE}.Template|x64.Build.0 = Debug|x64
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Debug|Win32.ActiveCfg = Debug|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Debug|x64.ActiveCfg = Debug|x64
{30A882E6-CF13-494F-9132-CE15E040B9DE}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.DebugDll|x64.ActiveCfg = DebugDll|x64
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Release|Win32.ActiveCfg = Release|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Release|x64.ActiveCfg = Release|x64
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Template|Mixed Platforms.Build.0 = Debug|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Template|Win32.ActiveCfg = Debug|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Template|Win32.Build.0 = Debug|Win32
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Template|x64.ActiveCfg = Debug|x64
{30A882E6-CF13-494F-9132-CE15E040B9DE}.Template|x64.Build.0 = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Debug|Win32.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Debug|Win32.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Debug|x64.ActiveCfg = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Debug|x64.Build.0 = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.DebugDll|Mixed Platforms.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.DebugDll|Mixed Platforms.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.DebugDll|Win32.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.DebugDll|Win32.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.DebugDll|x64.ActiveCfg = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.DebugDll|x64.Build.0 = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Release|Mixed Platforms.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Release|Win32.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Release|Win32.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Release|x64.ActiveCfg = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Release|x64.Build.0 = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Releasedll|Mixed Platforms.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Releasedll|Mixed Platforms.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Releasedll|Win32.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Releasedll|Win32.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Releasedll|x64.ActiveCfg = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Releasedll|x64.Build.0 = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Template|Mixed Platforms.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Template|Win32.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Template|Win32.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Template|x64.ActiveCfg = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563036}.Template|x64.Build.0 = Debug|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Debug|Win32.ActiveCfg = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Debug|Win32.Build.0 = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Debug|x64.ActiveCfg = Debug|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Debug|x64.Build.0 = Debug|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.DebugDll|Win32.Build.0 = DebugDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.DebugDll|x64.ActiveCfg = DebugDll|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.DebugDll|x64.Build.0 = DebugDll|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Release|Mixed Platforms.Build.0 = Release|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Release|Win32.ActiveCfg = Release|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Release|Win32.Build.0 = Release|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Release|x64.ActiveCfg = Release|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Release|x64.Build.0 = Release|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Releasedll|x64.Build.0 = ReleaseDll|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Template|Mixed Platforms.Build.0 = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Template|Win32.ActiveCfg = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Template|Win32.Build.0 = Debug|Win32
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Template|x64.ActiveCfg = Debug|x64
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3}.Template|x64.Build.0 = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Debug|Win32.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Debug|Win32.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Debug|x64.ActiveCfg = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Debug|x64.Build.0 = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.DebugDll|Mixed Platforms.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.DebugDll|Mixed Platforms.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.DebugDll|Win32.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.DebugDll|Win32.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.DebugDll|x64.ActiveCfg = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.DebugDll|x64.Build.0 = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Release|Mixed Platforms.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Release|Win32.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Release|Win32.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Release|x64.ActiveCfg = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Release|x64.Build.0 = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Releasedll|Mixed Platforms.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Releasedll|Mixed Platforms.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Releasedll|Win32.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Releasedll|Win32.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Releasedll|x64.ActiveCfg = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Releasedll|x64.Build.0 = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Template|Mixed Platforms.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Template|Win32.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Template|Win32.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Template|x64.ActiveCfg = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563009}.Template|x64.Build.0 = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Debug|Win32.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Debug|Win32.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Debug|x64.ActiveCfg = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Debug|x64.Build.0 = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.DebugDll|Mixed Platforms.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.DebugDll|Mixed Platforms.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.DebugDll|Win32.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.DebugDll|Win32.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.DebugDll|x64.ActiveCfg = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.DebugDll|x64.Build.0 = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Release|Mixed Platforms.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Release|Win32.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Release|Win32.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Release|x64.ActiveCfg = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Release|x64.Build.0 = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Releasedll|Mixed Platforms.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Releasedll|Mixed Platforms.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Releasedll|Win32.ActiveCfg = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Releasedll|Win32.Build.0 = Release|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Releasedll|x64.ActiveCfg = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Releasedll|x64.Build.0 = Release|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Template|Mixed Platforms.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Template|Win32.ActiveCfg = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Template|Win32.Build.0 = Debug|Win32
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Template|x64.ActiveCfg = Debug|x64
{2F80A939-E4BD-4ED7-B512-95FC2B563099}.Template|x64.Build.0 = Debug|x64
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Debug|Win32.ActiveCfg = Debug|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Debug|Win32.Build.0 = Debug|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Debug|x64.ActiveCfg = Debug|x64
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Debug|x64.Build.0 = Debug|x64
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.DebugDll|Win32.Build.0 = DebugDll|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.DebugDll|x64.ActiveCfg = DebugDll|x64
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.DebugDll|x64.Build.0 = DebugDll|x64
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Release|Mixed Platforms.Build.0 = Release|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Release|Win32.ActiveCfg = Release|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Release|Win32.Build.0 = Release|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Release|x64.ActiveCfg = Release|x64
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Release|x64.Build.0 = Release|x64
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Releasedll|Mixed Platforms.ActiveCfg = Releasedll|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Releasedll|Mixed Platforms.Build.0 = Releasedll|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Releasedll|Win32.ActiveCfg = Releasedll|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Releasedll|Win32.Build.0 = Releasedll|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Releasedll|x64.ActiveCfg = Releasedll|x64
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Releasedll|x64.Build.0 = Releasedll|x64
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Template|Mixed Platforms.Build.0 = Debug|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Template|Win32.ActiveCfg = Debug|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Template|Win32.Build.0 = Debug|Win32
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Template|x64.ActiveCfg = Debug|x64
{1D669177-07FD-4DDD-A13E-52A7DF19CA62}.Template|x64.Build.0 = Debug|x64
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Debug|Win32.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Debug|Win32.Build.0 = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Debug|x64.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.DebugDll|Win32.Build.0 = DebugDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.DebugDll|x64.ActiveCfg = DebugDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Release|Mixed Platforms.Build.0 = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Release|Win32.ActiveCfg = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Release|Win32.Build.0 = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Release|x64.ActiveCfg = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Releasedll|x64.ActiveCfg = ReleaseDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Template|Mixed Platforms.Build.0 = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Template|Win32.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Template|Win32.Build.0 = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Template|x64.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEF6}.Template|x64.Build.0 = Debug|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Debug|Win32.ActiveCfg = Debug|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Debug|Win32.Build.0 = Debug|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Debug|x64.ActiveCfg = Debug|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.DebugDll|Win32.Build.0 = DebugDll|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.DebugDll|x64.ActiveCfg = DebugDll|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Release|Mixed Platforms.Build.0 = Release|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Release|Win32.ActiveCfg = Release|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Release|Win32.Build.0 = Release|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Release|x64.ActiveCfg = Release|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Releasedll|x64.ActiveCfg = ReleaseDll|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Template|Mixed Platforms.ActiveCfg = Release|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Template|Mixed Platforms.Build.0 = Release|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Template|Win32.ActiveCfg = Release|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Template|Win32.Build.0 = Release|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Template|x64.ActiveCfg = Release|Win32
{7F39A2AE-FE11-4C92-A174-269BE486DE4D}.Template|x64.Build.0 = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Debug|Win32.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Debug|Win32.Build.0 = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Debug|x64.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.DebugDll|Win32.Build.0 = DebugDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.DebugDll|x64.ActiveCfg = DebugDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Release|Mixed Platforms.Build.0 = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Release|Win32.ActiveCfg = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Release|Win32.Build.0 = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Release|x64.ActiveCfg = Release|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Releasedll|x64.ActiveCfg = ReleaseDll|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Template|Mixed Platforms.Build.0 = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Template|Win32.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Template|Win32.Build.0 = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Template|x64.ActiveCfg = Debug|Win32
{A08F48F5-D359-4332-8743-F9D85887AEFE}.Template|x64.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Debug|Win32.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Debug|Win32.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Debug|x64.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.DebugDll|Win32.Build.0 = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.DebugDll|x64.ActiveCfg = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Release|Mixed Platforms.Build.0 = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Release|Win32.ActiveCfg = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Release|Win32.Build.0 = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Release|x64.ActiveCfg = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Releasedll|x64.ActiveCfg = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Template|Mixed Platforms.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Template|Win32.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Template|Win32.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Template|x64.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20}.Template|x64.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Debug|Win32.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Debug|Win32.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Debug|x64.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.DebugDll|Win32.Build.0 = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.DebugDll|x64.ActiveCfg = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Release|Mixed Platforms.Build.0 = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Release|Win32.ActiveCfg = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Release|Win32.Build.0 = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Release|x64.ActiveCfg = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Releasedll|x64.ActiveCfg = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Template|Mixed Platforms.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Template|Win32.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Template|Win32.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Template|x64.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23}.Template|x64.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Debug|Win32.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Debug|Win32.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Debug|x64.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.DebugDll|Win32.Build.0 = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.DebugDll|x64.ActiveCfg = DebugDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Release|Mixed Platforms.Build.0 = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Release|Win32.ActiveCfg = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Release|Win32.Build.0 = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Release|x64.ActiveCfg = Release|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Releasedll|x64.ActiveCfg = ReleaseDll|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Template|Mixed Platforms.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Template|Win32.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Template|Win32.Build.0 = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Template|x64.ActiveCfg = Debug|Win32
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24}.Template|x64.Build.0 = Debug|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Debug|Win32.ActiveCfg = Debug|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Debug|Win32.Build.0 = Debug|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Debug|x64.ActiveCfg = Debug|x64
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Debug|x64.Build.0 = Debug|x64
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.DebugDll|Win32.Build.0 = DebugDll|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.DebugDll|x64.ActiveCfg = DebugDll|x64
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.DebugDll|x64.Build.0 = DebugDll|x64
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Release|Mixed Platforms.Build.0 = Release|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Release|Win32.ActiveCfg = Release|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Release|Win32.Build.0 = Release|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Release|x64.ActiveCfg = Release|x64
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Release|x64.Build.0 = Release|x64
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Releasedll|x64.Build.0 = ReleaseDll|x64
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Template|Mixed Platforms.Build.0 = Debug|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Template|Win32.ActiveCfg = Debug|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Template|Win32.Build.0 = Debug|Win32
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Template|x64.ActiveCfg = Debug|x64
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C}.Template|x64.Build.0 = Debug|x64
{92668907-1B34-4B74-98A2-5849FDE67B34}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Debug|Win32.ActiveCfg = Debug|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Debug|Win32.Build.0 = Debug|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Debug|x64.ActiveCfg = Debug|x64
{92668907-1B34-4B74-98A2-5849FDE67B34}.Debug|x64.Build.0 = Debug|x64
{92668907-1B34-4B74-98A2-5849FDE67B34}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.DebugDll|Win32.Build.0 = DebugDll|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.DebugDll|x64.ActiveCfg = DebugDll|x64
{92668907-1B34-4B74-98A2-5849FDE67B34}.DebugDll|x64.Build.0 = DebugDll|x64
{92668907-1B34-4B74-98A2-5849FDE67B34}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Release|Mixed Platforms.Build.0 = Release|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Release|Win32.ActiveCfg = Release|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Release|Win32.Build.0 = Release|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Release|x64.ActiveCfg = Release|x64
{92668907-1B34-4B74-98A2-5849FDE67B34}.Release|x64.Build.0 = Release|x64
{92668907-1B34-4B74-98A2-5849FDE67B34}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{92668907-1B34-4B74-98A2-5849FDE67B34}.Releasedll|x64.Build.0 = ReleaseDll|x64
{92668907-1B34-4B74-98A2-5849FDE67B34}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Template|Mixed Platforms.Build.0 = Debug|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Template|Win32.ActiveCfg = Debug|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Template|Win32.Build.0 = Debug|Win32
{92668907-1B34-4B74-98A2-5849FDE67B34}.Template|x64.ActiveCfg = Debug|x64
{92668907-1B34-4B74-98A2-5849FDE67B34}.Template|x64.Build.0 = Debug|x64
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Debug|Win32.ActiveCfg = Debug|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Debug|Win32.Build.0 = Debug|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Debug|x64.ActiveCfg = Debug|x64
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Debug|x64.Build.0 = Debug|x64
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.DebugDll|Win32.Build.0 = DebugDll|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.DebugDll|x64.ActiveCfg = DebugDll|x64
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.DebugDll|x64.Build.0 = DebugDll|x64
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Release|Mixed Platforms.Build.0 = Release|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Release|Win32.ActiveCfg = Release|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Release|Win32.Build.0 = Release|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Release|x64.ActiveCfg = Release|x64
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Release|x64.Build.0 = Release|x64
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Releasedll|x64.ActiveCfg = ReleaseDll|x64
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Releasedll|x64.Build.0 = ReleaseDll|x64
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Template|Mixed Platforms.Build.0 = Debug|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Template|Win32.ActiveCfg = Debug|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Template|Win32.Build.0 = Debug|Win32
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Template|x64.ActiveCfg = Debug|x64
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88}.Template|x64.Build.0 = Debug|x64
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Debug|Win32.ActiveCfg = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Debug|Win32.Build.0 = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Debug|x64.ActiveCfg = Debug|x64
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Debug|x64.Build.0 = Debug|x64
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.DebugDll|Mixed Platforms.ActiveCfg = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.DebugDll|Mixed Platforms.Build.0 = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.DebugDll|Win32.ActiveCfg = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.DebugDll|Win32.Build.0 = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.DebugDll|x64.ActiveCfg = Debug|x64
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.DebugDll|x64.Build.0 = Debug|x64
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Release|Mixed Platforms.Build.0 = Release|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Release|Win32.ActiveCfg = Release|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Release|Win32.Build.0 = Release|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Release|x64.ActiveCfg = Release|x64
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Release|x64.Build.0 = Release|x64
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Releasedll|Mixed Platforms.ActiveCfg = Release|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Releasedll|Mixed Platforms.Build.0 = Release|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Releasedll|Win32.ActiveCfg = Release|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Releasedll|Win32.Build.0 = Release|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Releasedll|x64.ActiveCfg = Release|x64
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Releasedll|x64.Build.0 = Release|x64
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Template|Mixed Platforms.Build.0 = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Template|Win32.ActiveCfg = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Template|Win32.Build.0 = Debug|Win32
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Template|x64.ActiveCfg = Debug|x64
{84376B60-FF20-4FD0-967E-C568FC2FBC53}.Template|x64.Build.0 = Debug|x64
{D15D860E-5012-471A-83D4-81A1251BF88D}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Debug|Mixed Platforms.Build.0 = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Debug|Win32.ActiveCfg = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Debug|Win32.Build.0 = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Debug|x64.ActiveCfg = Debug|x64
{D15D860E-5012-471A-83D4-81A1251BF88D}.Debug|x64.Build.0 = Debug|x64
{D15D860E-5012-471A-83D4-81A1251BF88D}.DebugDll|Mixed Platforms.ActiveCfg = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.DebugDll|Mixed Platforms.Build.0 = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.DebugDll|Win32.ActiveCfg = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.DebugDll|Win32.Build.0 = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.DebugDll|x64.ActiveCfg = Debug|x64
{D15D860E-5012-471A-83D4-81A1251BF88D}.DebugDll|x64.Build.0 = Debug|x64
{D15D860E-5012-471A-83D4-81A1251BF88D}.Release|Mixed Platforms.ActiveCfg = Release|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Release|Mixed Platforms.Build.0 = Release|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Release|Win32.ActiveCfg = Release|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Release|Win32.Build.0 = Release|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Release|x64.ActiveCfg = Release|x64
{D15D860E-5012-471A-83D4-81A1251BF88D}.Release|x64.Build.0 = Release|x64
{D15D860E-5012-471A-83D4-81A1251BF88D}.Releasedll|Mixed Platforms.ActiveCfg = Release|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Releasedll|Mixed Platforms.Build.0 = Release|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Releasedll|Win32.ActiveCfg = Release|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Releasedll|Win32.Build.0 = Release|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Releasedll|x64.ActiveCfg = Release|x64
{D15D860E-5012-471A-83D4-81A1251BF88D}.Releasedll|x64.Build.0 = Release|x64
{D15D860E-5012-471A-83D4-81A1251BF88D}.Template|Mixed Platforms.ActiveCfg = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Template|Mixed Platforms.Build.0 = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Template|Win32.ActiveCfg = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Template|Win32.Build.0 = Debug|Win32
{D15D860E-5012-471A-83D4-81A1251BF88D}.Template|x64.ActiveCfg = Debug|x64
{D15D860E-5012-471A-83D4-81A1251BF88D}.Template|x64.Build.0 = Debug|x64
{45276293-D169-4D73-8930-F255C09DA976}.Debug|Mixed Platforms.ActiveCfg = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Debug|Mixed Platforms.Build.0 = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Debug|Win32.ActiveCfg = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Debug|Win32.Build.0 = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Debug|x64.ActiveCfg = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.DebugDll|Win32.Build.0 = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.DebugDll|x64.ActiveCfg = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.DebugDll|x64.Build.0 = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Release|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Release|Mixed Platforms.Build.0 = ReleaseDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Release|Win32.ActiveCfg = ReleaseDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Release|Win32.Build.0 = ReleaseDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Release|x64.ActiveCfg = ReleaseDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Releasedll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Releasedll|Mixed Platforms.Build.0 = ReleaseDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Releasedll|Win32.ActiveCfg = ReleaseDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Releasedll|Win32.Build.0 = ReleaseDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Releasedll|x64.ActiveCfg = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Releasedll|x64.Build.0 = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Template|Mixed Platforms.ActiveCfg = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Template|Mixed Platforms.Build.0 = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Template|Win32.ActiveCfg = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Template|Win32.Build.0 = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Template|x64.ActiveCfg = DebugDll|Win32
{45276293-D169-4D73-8930-F255C09DA976}.Template|x64.Build.0 = DebugDll|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{90E84C91-D60C-47C0-AE83-16056AB38FCC} = {083DCC81-9A3F-4B12-9821-2B9F52BCCF79}
{AB838366-C278-426E-ADDF-BE3A32BADD3E} = {083DCC81-9A3F-4B12-9821-2B9F52BCCF79}
{239E2283-051C-466D-8D61-877FDACE4EDF} = {083DCC81-9A3F-4B12-9821-2B9F52BCCF79}
{5E5307B3-44A8-4E49-A91D-999EF818C486} = {90E84C91-D60C-47C0-AE83-16056AB38FCC}
{4D42F462-A2FE-4B4A-A680-53668FA128A6} = {AB838366-C278-426E-ADDF-BE3A32BADD3E}
{FD628E34-FBB8-4C60-8176-B770EC631CD9} = {083DCC81-9A3F-4B12-9821-2B9F52BCCF79}
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B2} = {FD628E34-FBB8-4C60-8176-B770EC631CD9}
{3E725148-0807-4CBA-8FC1-7FCA46F605F3} = {FD628E34-FBB8-4C60-8176-B770EC631CD9}
{141DDEA4-DDEF-4D7E-9FE1-5FEFE0D95222} = {1CB30F2E-2587-43E7-A3CF-787783FB6924}
{1CB30F2E-2587-43E7-A3CF-787783FB6924} = {083DCC81-9A3F-4B12-9821-2B9F52BCCF79}
{FE7E9F00-7F46-4072-8B29-A4E915259CDE} = {1CB30F2E-2587-43E7-A3CF-787783FB6924}
{30A882E6-CF13-494F-9132-CE15E040B9DE} = {1CB30F2E-2587-43E7-A3CF-787783FB6924}
{2F80A939-E4BD-4ED7-B512-95FC2B563036} = {FD628E34-FBB8-4C60-8176-B770EC631CD9}
{EE518BE5-94B2-4F8E-82CC-C08503BBD6B3} = {FD628E34-FBB8-4C60-8176-B770EC631CD9}
{2F80A939-E4BD-4ED7-B512-95FC2B563009} = {FD628E34-FBB8-4C60-8176-B770EC631CD9}
{2F80A939-E4BD-4ED7-B512-95FC2B563099} = {FD628E34-FBB8-4C60-8176-B770EC631CD9}
{1D669177-07FD-4DDD-A13E-52A7DF19CA62} = {AB838366-C278-426E-ADDF-BE3A32BADD3E}
{A08F48F5-D359-4332-8743-F9D85887AEF6} = {57B0C6FC-DDAE-41EC-8E04-2D2D8E803D7A}
{57B0C6FC-DDAE-41EC-8E04-2D2D8E803D7A} = {083DCC81-9A3F-4B12-9821-2B9F52BCCF79}
{7F39A2AE-FE11-4C92-A174-269BE486DE4D} = {57B0C6FC-DDAE-41EC-8E04-2D2D8E803D7A}
{5084C239-8D10-4E35-9E9F-A58550DE70B5} = {90E84C91-D60C-47C0-AE83-16056AB38FCC}
{A08F48F5-D359-4332-8743-F9D85887AEFE} = {5084C239-8D10-4E35-9E9F-A58550DE70B5}
{4A56E6AE-448C-4D98-AB7F-3C077ECABE20} = {5E5307B3-44A8-4E49-A91D-999EF818C486}
{4A56E6AE-448C-4D98-AB7F-3C077ECABE23} = {5E5307B3-44A8-4E49-A91D-999EF818C486}
{4A56E6AE-448C-4D98-AB7F-3C077ECABE24} = {5E5307B3-44A8-4E49-A91D-999EF818C486}
{FF701178-83CC-4992-B3FA-114073E7A33A} = {30B69273-9D47-4AD6-B1C5-CF362F9C6D80}
{58FE3581-C997-4BD5-9AC6-AEEB54A43D2C} = {FF701178-83CC-4992-B3FA-114073E7A33A}
{92668907-1B34-4B74-98A2-5849FDE67B34} = {FD628E34-FBB8-4C60-8176-B770EC631CD9}
{7D4D4DD5-E3E7-4D35-BA76-B451974F1E88} = {FF701178-83CC-4992-B3FA-114073E7A33A}
{84376B60-FF20-4FD0-967E-C568FC2FBC53} = {30B69273-9D47-4AD6-B1C5-CF362F9C6D80}
{D15D860E-5012-471A-83D4-81A1251BF88D} = {30B69273-9D47-4AD6-B1C5-CF362F9C6D80}
{45276293-D169-4D73-8930-F255C09DA976} = {30B69273-9D47-4AD6-B1C5-CF362F9C6D80}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {40FA3A5B-123F-4EC0-9EEB-8A9C17BF573B}
EndGlobalSection
EndGlobal

View File

@ -1,66 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_acl", "lib_acl\lib_acl_vc2003.vcproj", "{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_protocol", "lib_protocol\lib_protocol_vc2003.vcproj", "{FE724EF7-3763-4E78-BDF5-BCBC075719FD}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_dict", "lib_dict\lib_dict.vcproj", "{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_tls", "lib_tls\lib_tls.vcproj", "{389FDE47-7F16-4DD4-B37A-27918BE745B6}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
DebugDll = DebugDll
Release = Release
ReleaseDll = ReleaseDll
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug.ActiveCfg = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug.Build.0 = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll.ActiveCfg = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll.Build.0 = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release.Build.0 = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll.Build.0 = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug.ActiveCfg = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug.Build.0 = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll.ActiveCfg = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll.Build.0 = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release.Build.0 = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll.Build.0 = ReleaseDll|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.Debug.ActiveCfg = Debug|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.Debug.Build.0 = Debug|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.DebugDll.ActiveCfg = DebugDll|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.DebugDll.Build.0 = DebugDll|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.Release.ActiveCfg = Release|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.Release.Build.0 = Release|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.ReleaseDll.ActiveCfg = ReleaseDll|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.ReleaseDll.Build.0 = ReleaseDll|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.Debug.ActiveCfg = Debug|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.Debug.Build.0 = Debug|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.DebugDll.ActiveCfg = DebugDll|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.DebugDll.Build.0 = DebugDll|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.Release.ActiveCfg = Release|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.Release.Build.0 = Release|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.ReleaseDll.ActiveCfg = ReleaseDll|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.ReleaseDll.Build.0 = ReleaseDll|Win32
EndGlobalSection
GlobalSection(SolutionItems) = postSolution
changes.txt = changes.txt
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal

View File

@ -1,60 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_acl", "lib_acl\lib_acl_vc2010.vcxproj", "{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_protocol", "lib_protocol\lib_protocol_vc2010.vcxproj", "{FE724EF7-3763-4E78-BDF5-BCBC075719FD}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_dict", "lib_dict\lib_dict.vcxproj", "{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_tls", "lib_tls\lib_tls.vcxproj", "{389FDE47-7F16-4DD4-B37A-27918BE745B6}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F9F91DA0-E242-4D91-A3E1-EE9440A70B53}"
ProjectSection(SolutionItems) = preProject
changes.txt = changes.txt
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
DebugDll|Win32 = DebugDll|Win32
Release|Win32 = Release|Win32
ReleaseDll|Win32 = ReleaseDll|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Win32.ActiveCfg = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Win32.Build.0 = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Win32.Build.0 = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Win32.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Win32.Build.0 = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Win32.ActiveCfg = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Win32.Build.0 = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Win32.Build.0 = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Win32.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Win32.Build.0 = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.Debug|Win32.ActiveCfg = Debug|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.Debug|Win32.Build.0 = Debug|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.DebugDll|Win32.Build.0 = DebugDll|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.Release|Win32.ActiveCfg = Release|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.Release|Win32.Build.0 = Release|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{9E6E9FE9-EAAC-44BA-B463-70DE0233822E}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.Debug|Win32.ActiveCfg = Debug|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.Debug|Win32.Build.0 = Debug|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.DebugDll|Win32.Build.0 = DebugDll|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.Release|Win32.ActiveCfg = Release|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.Release|Win32.Build.0 = Release|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{389FDE47-7F16-4DD4-B37A-27918BE745B6}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -1,40 +0,0 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_acl", "lib_acl\lib_acl_vc2012.vcxproj", "{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lib_protocol", "lib_protocol\lib_protocol_vc2012.vcxproj", "{FE724EF7-3763-4E78-BDF5-BCBC075719FD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{2597AF7B-516E-478A-B72E-0BC8A59E8965}"
ProjectSection(SolutionItems) = preProject
changes.txt = changes.txt
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
DebugDll|Win32 = DebugDll|Win32
Release|Win32 = Release|Win32
ReleaseDll|Win32 = ReleaseDll|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Win32.ActiveCfg = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Debug|Win32.Build.0 = Debug|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.DebugDll|Win32.Build.0 = DebugDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Win32.ActiveCfg = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.Release|Win32.Build.0 = Release|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{B40213C2-507C-4C7F-A6E1-B850C9BDC27B}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Win32.ActiveCfg = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Debug|Win32.Build.0 = Debug|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.DebugDll|Win32.Build.0 = DebugDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Win32.ActiveCfg = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.Release|Win32.Build.0 = Release|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
{FE724EF7-3763-4E78-BDF5-BCBC075719FD}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View File

@ -1,175 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="acl_c++_shared" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":" />
<option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.3.1" />
<option name="LAST_KNOWN_AGP_VERSION" value="3.3.1" />
</configuration>
</facet>
<facet type="native-android-gradle" name="Native-Android-Gradle">
<configuration>
<option name="SELECTED_ABI" />
<option name="SELECTED_VARIANT" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/src/debug/res;file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
<option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/androidTest/res;file://$MODULE_DIR$/src/androidTestDebug/res;file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug;file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
<option name="PROJECT_TYPE" value="1" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
<output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" />
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/.cxx" />
<excludeFolder url="file://$MODULE_DIR$/.externalNativeBuild" />
<excludeFolder url="file://$MODULE_DIR$/.gradle" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<content url="file://$MODULE_DIR$/../../include">
<sourceFolder url="file://$MODULE_DIR$/../../include" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../include/pgsql" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../include/sqlite" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../include/mysql" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../include/pgsql" />
<sourceFolder url="file://$MODULE_DIR$/../../include/sqlite" />
<sourceFolder url="file://$MODULE_DIR$/../../include/mysql" />
<sourceFolder url="file://$MODULE_DIR$/../../include" />
</content>
<content url="file://$MODULE_DIR$/../../include/mysql">
<sourceFolder url="file://$MODULE_DIR$/../../include/mysql" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../include/pgsql">
<sourceFolder url="file://$MODULE_DIR$/../../include/pgsql" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../include/sqlite">
<sourceFolder url="file://$MODULE_DIR$/../../include/sqlite" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/include" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src" />
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/include" />
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/include">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/include" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/include">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/include" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/include" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber" />
</content>
<content url="file://$MODULE_DIR$/../../lib_protocol/include">
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/include" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/include" />
</content>
<content url="file://$MODULE_DIR$/../../lib_protocol/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/src" />
</content>
<orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: javax.annotation:javax.annotation-api:1.2" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core:2.2.2@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:rules:0.5@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner:0.5@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:2.2.2@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish:0.5@aar" level="project" />
</component>
</module>

View File

@ -1,120 +0,0 @@
apply plugin: 'com.android.library'
buildscript {
repositories {
google()
jcenter()
}
dependencies {
//classpath 'com.android.tools.build:gradle:3.3.2'
//classpath 'com.android.tools.build:gradle:2.3.0'
classpath 'com.android.tools.build:gradle:3.3.1'
}
//implementation {}
}
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
repositories {
maven { url 'https://repo1.maven.org/maven2' }
}
defaultConfig {
minSdkVersion 14
targetSdkVersion 28
versionCode 1
versionName "1.0"
def HOOK_NEW = false
// testIstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
//arguments "-DANDROID_STL=stl_shared"
//arguments "-DANDROID_STL=gnustl_shared" // for ndk12b, ndk16b
//arguments "-DACL_DISABLE_HOOK_IO=YES" // for ndk12b
arguments "-DANDROID_STL=c++_shared" // for ndk20 or above
arguments "-DHAS_ATOMIC=YES" // for ndk20 or above
arguments "-DCMAKE_BUILD_TYPE=RELEASE"
arguments "-DCMAKE_CXX_FLAGS_RELEASE=-O3"
arguments "-DCMAKE_C_FLAGS_RELEASE=-O3"
//arguments "-DCMAKE_VERBOSE_MAKEFILE=ON"
arguments "-DACL_CLIENT_ONLY=YES"
arguments "-DHAS_MBEDTLS=YES"
arguments "-DACL_BUILD_SHARED=YES"
//cppFlags "-fexceptions"
if (HOOK_NEW) {
arguments "-DACL_HOOK_NEW=YES"
}
//abiFilters 'armeabi', 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
//abiFilters 'armeabi', 'arm64-v8a', 'armeabi-v7a', 'x86' // for ndk16b
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86' // for ndk20 or above
}
cmake {
//arguments '-DANDROID_PLATFORM=android-14','-DANDROID_TOOLCHAIN=clang'
//targets 'acl_static', 'protocol_static', 'acl_cpp_static', 'fiber_static', 'fiber_cpp_static' // for ndk12b, ndk16b
targets 'acl_static', 'protocol_static', 'acl_cpp_static', 'fiber_static', 'fiber_cpp_static', 'acl', 'protocol', 'acl_cpp', 'fiber', 'fiber_cpp' // for ndk20 or above
}
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
jniDebuggable true
debuggable true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path '../../CMakeLists.txt'
version "3.10.2"
}
}
packagingOptions {
exclude 'lib/arm64-v8a/libgnustl_shared.so'
exclude 'lib/armeabi-v7a/libgnustl_shared.so'
exclude 'lib/armeabi/libgnustl_shared.so'
exclude 'lib/x86/libgnustl_shared.so'
exclude 'lib/arm64-v8a/libc++_shared.so'
exclude 'lib/armeabi-v7a/libc++_shared.so'
exclude 'lib/armeabi/libc++_shared.so'
exclude 'lib/x86/libc++_shared.so'
}
productFlavors {
}
}
dependencies {
//compile fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(include: ['*.jar'], dir: 'libs')
//androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
//compile 'com.android.support:appcompat-v7:25.3.1'
//compile 'com.android.support.constraint:constraint-layout:1.0.2'
//testCompile 'junit:junit:4.12'
//compile files('libs/junit-4.12.jar')
//implementation files('libs/junit-4.12.jar')
}
allprojects {
repositories {
google()
jcenter()
}
}

View File

@ -1,6 +0,0 @@
#Thu Mar 07 11:56:22 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

View File

@ -1,160 +0,0 @@
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

View File

@ -1,90 +0,0 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -1,9 +0,0 @@
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Mon May 20 09:16:13 CST 2019
ndk.dir=E:\\tools\\android\\Sdk\\ndk-bundle
sdk.dir=E:\\tools\\android\\Sdk

View File

@ -1,10 +0,0 @@
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Thu Oct 17 17:02:59 CST 2019
#ndk.dir=/Users/shuxinzheng/Library/Android/sdk/ndk-bundle
ndk.dir=/Users/shuxinzheng/Library/Android/ndk
sdk.dir=/Users/shuxinzheng/Library/Android/sdk

View File

@ -1,8 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.acl_dev.acl">
<application android:allowBackup="true" android:label="@string/app_name"
android:supportsRtl="true">
</application>
</manifest>

View File

@ -1,3 +0,0 @@
<resources>
<string name="app_name">Acl</string>
</resources>

View File

@ -1,321 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="acl_ndk12b" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":" />
<option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.3.1" />
<option name="LAST_KNOWN_AGP_VERSION" value="3.3.1" />
</configuration>
</facet>
<facet type="native-android-gradle" name="Native-Android-Gradle">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug-x86" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/build/generated/res/rs/debug;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
<option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
<option name="PROJECT_TYPE" value="1" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
<output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" />
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/.cxx" />
<excludeFolder url="file://$MODULE_DIR$/.externalNativeBuild" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/aio">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/aio" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/code">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/code" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/db">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/db" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/db/memdb">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/db/memdb" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/db/mysql">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/db/mysql" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/db/null">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/db/null" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/db/zdb">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/db/zdb" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/event">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/event" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/init">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/init" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/ioctl">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/ioctl" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/json">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/json" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/master">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/master" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/master/template">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/master/template" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/msg">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/msg" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/net">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/net" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/net/connect">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/net/connect" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/net/dns">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/net/dns" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/net/listen">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/net/listen" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/private">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/private" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/common">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/common" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/configure">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/configure" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/debug">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/debug" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/filedir">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/filedir" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/iostuff">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/iostuff" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/memory">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/memory" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/string">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/string" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/sys">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/sys" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/sys/unix">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/sys/unix" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/thread">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/thread" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/unit_test">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/unit_test" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/xml">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/xml" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/beanstalk">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/beanstalk" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/connpool">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/connpool" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/db">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/db" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/disque">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/disque" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/event">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/event" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/hsocket">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/hsocket" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/http">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/http" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/ipc">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/ipc" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/master">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/master" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/memcache">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/memcache" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/mime">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/mime" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/mime/internal">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/mime/internal" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/net">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/net" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/queue">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/queue" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/redis">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/redis" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/serialize">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/serialize" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/session">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/session" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/smtp">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/smtp" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/stdlib">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/stdlib" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/stream">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/stream" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/common">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/common" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/dns">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/dns" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/event">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/event" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/fiber">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/fiber" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/fiber/boost">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/fiber/boost" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/hook">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/hook" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/cpp/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/cpp/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/cpp/src/keeper">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/cpp/src/keeper" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_protocol/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_protocol/src/http">
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/src/http" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_protocol/src/icmp">
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/src/icmp" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_protocol/src/smtp">
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/src/smtp" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: javax.annotation:javax.annotation-api:1.2@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core:2.2.2@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:rules:0.5@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner:0.5@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:2.2.2@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish:0.5@aar" level="project" />
</component>
</module>

View File

@ -1,108 +0,0 @@
apply plugin: 'com.android.library'
buildscript {
repositories {
google()
jcenter()
}
dependencies {
//classpath 'com.android.tools.build:gradle:3.3.2'
//classpath 'com.android.tools.build:gradle:2.3.0'
classpath 'com.android.tools.build:gradle:3.3.1'
}
//implementation {}
}
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
repositories {
maven { url 'https://repo1.maven.org/maven2' }
}
defaultConfig {
minSdkVersion 14
targetSdkVersion 28
versionCode 1
versionName "1.0"
// testIstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
//arguments "-DANDROID_STL=stl_shared"
arguments "-DANDROID_STL=gnustl_shared" // for ndk12b, ndk16b
arguments "-DACL_DISABLE_HOOK_IO=YES" // for ndk12b
//arguments "-DANDROID_STL=c++_shared" // for ndk20 or above
//arguments "-DHAS_ATOMIC=YES" // for ndk20 or above
//arguments "-DCMAKE_VERBOSE_MAKEFILE=ON"
arguments "-DCMAKE_BUILD_TYPE=RELEASE"
arguments "-DCMAKE_CXX_FLAGS_RELEASE=-O3"
arguments "-DCMAKE_C_FLAGS_RELEASE=-O3"
arguments "-DACL_CLIENT_ONLY=YES"
arguments "-DHAS_MBEDTLS=YES"
arguments "-DACL_BUILD_SHARED=YES"
//cppFlags "-fexceptions"
//abiFilters 'armeabi', 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
abiFilters 'armeabi', 'arm64-v8a', 'armeabi-v7a', 'x86' // for ndk12b, ndk16b
//abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86' // for ndk20 or above
}
cmake {
//arguments '-DANDROID_PLATFORM=android-14','-DANDROID_TOOLCHAIN=clang'
targets 'acl_static', 'protocol_static', 'acl_cpp_static', 'fiber_static', 'fiber_cpp_static' // for ndk12b, ndk16b
//targets 'acl_static', 'protocol_static', 'acl_cpp_static', 'fiber_static', 'fiber_cpp_static', 'acl', 'protocol', 'acl_cpp', 'fiber', 'fiber_cpp' // for ndk20 or above
}
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
jniDebuggable true
debuggable true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path '../../CMakeLists.txt'
version "3.10.2"
}
}
packagingOptions {
exclude 'lib/arm64-v8a/libgnustl_shared.so'
exclude 'lib/armeabi-v7a/libgnustl_shared.so'
exclude 'lib/armeabi/libgnustl_shared.so'
exclude 'lib/x86/libgnustl_shared.so'
exclude 'lib/arm64-v8a/libc++_shared.so'
exclude 'lib/armeabi-v7a/libc++_shared.so'
exclude 'lib/armeabi/libc++_shared.so'
exclude 'lib/x86/libc++_shared.so'
}
productFlavors {
}
}
dependencies {
//compile fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(include: ['*.jar'], dir: 'libs')
//androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
//compile 'com.android.support:appcompat-v7:25.3.1'
//compile 'com.android.support.constraint:constraint-layout:1.0.2'
//testCompile 'junit:junit:4.12'
//compile files('libs/junit-4.12.jar')
//implementation files('libs/junit-4.12.jar')
}
allprojects {
repositories {
google()
jcenter()
}
}

View File

@ -1,6 +0,0 @@
#Thu Mar 07 11:56:22 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

View File

@ -1,160 +0,0 @@
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

View File

@ -1,90 +0,0 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -1,9 +0,0 @@
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Mon May 20 09:16:13 CST 2019
ndk.dir=E:\\tools\\android\\Sdk\\ndk-bundle
sdk.dir=E:\\tools\\android\\Sdk

View File

@ -1,10 +0,0 @@
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Thu Oct 17 17:02:59 CST 2019
#ndk.dir=/Users/shuxinzheng/Library/Android/sdk/ndk-bundle
ndk.dir=/Users/shuxinzheng/Library/Android/ndk
sdk.dir=/Users/shuxinzheng/Library/Android/sdk

View File

@ -1,8 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.acl_dev.acl">
<application android:allowBackup="true" android:label="@string/app_name"
android:supportsRtl="true">
</application>
</manifest>

View File

@ -1,3 +0,0 @@
<resources>
<string name="app_name">Acl</string>
</resources>

View File

@ -1,319 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="acl_ndk16b" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":" />
<option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.3.1" />
<option name="LAST_KNOWN_AGP_VERSION" value="3.3.1" />
</configuration>
</facet>
<facet type="native-android-gradle" name="Native-Android-Gradle">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug-x86" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
<option name="PROJECT_TYPE" value="1" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
<output url="file://$MODULE_DIR$/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes" />
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/compileDebugUnitTestJavaWithJavac/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/apt/test/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/.cxx" />
<excludeFolder url="file://$MODULE_DIR$/.externalNativeBuild" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/aio">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/aio" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/code">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/code" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/db">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/db" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/db/memdb">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/db/memdb" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/db/mysql">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/db/mysql" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/db/null">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/db/null" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/db/zdb">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/db/zdb" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/event">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/event" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/init">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/init" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/ioctl">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/ioctl" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/json">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/json" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/master">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/master" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/master/template">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/master/template" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/msg">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/msg" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/net">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/net" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/net/connect">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/net/connect" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/net/dns">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/net/dns" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/net/listen">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/net/listen" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/private">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/private" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/common">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/common" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/configure">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/configure" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/debug">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/debug" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/filedir">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/filedir" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/iostuff">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/iostuff" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/memory">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/memory" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/string">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/string" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/sys">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/sys" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/sys/unix">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/stdlib/sys/unix" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/thread">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/thread" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/unit_test">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/unit_test" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl/src/xml">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl/src/xml" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/beanstalk">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/beanstalk" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/connpool">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/connpool" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/db">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/db" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/disque">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/disque" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/event">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/event" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/hsocket">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/hsocket" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/http">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/http" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/ipc">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/ipc" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/master">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/master" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/memcache">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/memcache" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/mime">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/mime" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/mime/internal">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/mime/internal" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/net">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/net" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/queue">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/queue" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/redis">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/redis" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/serialize">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/serialize" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/session">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/session" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/smtp">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/smtp" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/stdlib">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/stdlib" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_acl_cpp/src/stream">
<sourceFolder url="file://$MODULE_DIR$/../../lib_acl_cpp/src/stream" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/common">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/common" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/dns">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/dns" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/event">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/event" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/fiber">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/fiber" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/fiber/boost">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/fiber/boost" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/c/src/hook">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/c/src/hook" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/cpp/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/cpp/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_fiber/cpp/src/keeper">
<sourceFolder url="file://$MODULE_DIR$/../../lib_fiber/cpp/src/keeper" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_protocol/src">
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/src" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_protocol/src/http">
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/src/http" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_protocol/src/icmp">
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/src/icmp" isTestSource="false" />
</content>
<content url="file://$MODULE_DIR$/../../lib_protocol/src/smtp">
<sourceFolder url="file://$MODULE_DIR$/../../lib_protocol/src/smtp" isTestSource="false" />
</content>
<orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: javax.annotation:javax.annotation-api:1.2@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-core:2.2.2@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:rules:0.5@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner:0.5@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:2.2.2@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish:0.5@aar" level="project" />
</component>
</module>

View File

@ -1,108 +0,0 @@
apply plugin: 'com.android.library'
buildscript {
repositories {
google()
jcenter()
}
dependencies {
//classpath 'com.android.tools.build:gradle:3.3.2'
//classpath 'com.android.tools.build:gradle:2.3.0'
classpath 'com.android.tools.build:gradle:3.3.1'
}
//implementation {}
}
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
repositories {
maven { url 'https://repo1.maven.org/maven2' }
}
defaultConfig {
minSdkVersion 14
targetSdkVersion 28
versionCode 1
versionName "1.0"
// testIstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
//arguments "-DANDROID_STL=stl_shared"
arguments "-DANDROID_STL=gnustl_shared" // for ndk12b, ndk16b
//arguments "-DACL_DISABLE_HOOK_IO=YES" // for ndk12b
//arguments "-DANDROID_STL=c++_shared" // for ndk20 or above
//arguments "-DHAS_ATOMIC=YES" // for ndk20 or above
//arguments "-DCMAKE_VERBOSE_MAKEFILE=ON"
arguments "-DCMAKE_BUILD_TYPE=RELEASE"
arguments "-DCMAKE_CXX_FLAGS_RELEASE=-O3"
arguments "-DCMAKE_C_FLAGS_RELEASE=-O3"
arguments "-DACL_CLIENT_ONLY=YES"
arguments "-DHAS_MBEDTLS=YES"
arguments "-DACL_BUILD_SHARED=YES"
//cppFlags "-fexceptions"
//abiFilters 'armeabi', 'arm64-v8a', 'armeabi-v7a', 'x86', 'x86_64'
abiFilters 'armeabi', 'arm64-v8a', 'armeabi-v7a', 'x86' // for ndk12b, ndk16b
//abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86' // for ndk20 or above
}
cmake {
//arguments '-DANDROID_PLATFORM=android-14','-DANDROID_TOOLCHAIN=clang'
targets 'acl_static', 'protocol_static', 'acl_cpp_static', 'fiber_static', 'fiber_cpp_static' // for ndk12b, ndk16b
//targets 'acl_static', 'protocol_static', 'acl_cpp_static', 'fiber_static', 'fiber_cpp_static', 'acl', 'protocol', 'acl_cpp', 'fiber', 'fiber_cpp' // for ndk20 or above
}
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
jniDebuggable true
debuggable true
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path '../../CMakeLists.txt'
version "3.10.2"
}
}
packagingOptions {
exclude 'lib/arm64-v8a/libgnustl_shared.so'
exclude 'lib/armeabi-v7a/libgnustl_shared.so'
exclude 'lib/armeabi/libgnustl_shared.so'
exclude 'lib/x86/libgnustl_shared.so'
exclude 'lib/arm64-v8a/libc++_shared.so'
exclude 'lib/armeabi-v7a/libc++_shared.so'
exclude 'lib/armeabi/libc++_shared.so'
exclude 'lib/x86/libc++_shared.so'
}
productFlavors {
}
}
dependencies {
//compile fileTree(include: ['*.jar'], dir: 'libs')
implementation fileTree(include: ['*.jar'], dir: 'libs')
//androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
//compile 'com.android.support:appcompat-v7:25.3.1'
//compile 'com.android.support.constraint:constraint-layout:1.0.2'
//testCompile 'junit:junit:4.12'
//compile files('libs/junit-4.12.jar')
//implementation files('libs/junit-4.12.jar')
}
allprojects {
repositories {
google()
jcenter()
}
}

View File

@ -1,6 +0,0 @@
#Thu Mar 07 11:56:22 CST 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

View File

@ -1,160 +0,0 @@
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

View File

@ -1,90 +0,0 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@ -1,9 +0,0 @@
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Mon May 20 09:16:13 CST 2019
ndk.dir=E:\\tools\\android\\Sdk\\ndk-bundle
sdk.dir=E:\\tools\\android\\Sdk

View File

@ -1,10 +0,0 @@
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Thu Oct 17 17:02:59 CST 2019
#ndk.dir=/Users/shuxinzheng/Library/Android/sdk/ndk-bundle
ndk.dir=/Users/shuxinzheng/Library/Android/ndk
sdk.dir=/Users/shuxinzheng/Library/Android/sdk

View File

@ -1,8 +0,0 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.acl_dev.acl">
<application android:allowBackup="true" android:label="@string/app_name"
android:supportsRtl="true">
</application>
</manifest>

View File

@ -1,3 +0,0 @@
<resources>
<string name="app_name">Acl</string>
</resources>

View File

@ -1,145 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id=":HttpFiber" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$/.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":HttpFiber" />
<option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" value="3.5.0" />
<option name="LAST_KNOWN_AGP_VERSION" value="3.5.0" />
</configuration>
</facet>
<facet type="native-android-gradle" name="Native-Android-Gradle">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug-x86" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<afterSyncTasks>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res;file://$MODULE_DIR$/build/generated/res/resValues/debug" />
<option name="TEST_RES_FOLDERS_RELATIVE_PATH" value="" />
<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7">
<output url="file://$MODULE_DIR$/build/intermediates/javac/debug/classes" />
<output-test url="file://$MODULE_DIR$/build/intermediates/javac/debugUnitTest/classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/cpp" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debug/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debug/compileDebugAidl/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debug/compileDebugRenderscript/out" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugAndroidTest/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/aidl_source_output_dir/debugAndroidTest/compileDebugAndroidTestAidl/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/renderscript_source_output_dir/debugAndroidTest/compileDebugAndroidTestRenderscript/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/ap_generated_sources/debugUnitTest/out" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testDebug/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/.cxx" />
<excludeFolder url="file://$MODULE_DIR$/.externalNativeBuild" />
<excludeFolder url="file://$MODULE_DIR$/build" />
</content>
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="TEST" name="Gradle: junit:junit:4.12@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-integration:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-library:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: org.hamcrest:hamcrest-core:1.3@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: net.sf.kxml:kxml2:2.3.0@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.squareup:javawriter:2.1.1@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: javax.inject:javax.inject:1@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: com.google.code.findbugs:jsr305:2.0.1@jar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-core:3.2.0@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: androidx.test:runner:1.2.0@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: androidx.test:monitor:1.2.0@aar" level="project" />
<orderEntry type="library" scope="TEST" name="Gradle: androidx.test.espresso:espresso-idling-resource:3.2.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.collection:collection:1.1.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-common:2.1.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.arch.core:core-common:2.1.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.annotation:annotation:1.1.0@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout-solver:1.1.3@jar" level="project" />
<orderEntry type="library" name="Gradle: androidx.appcompat:appcompat:1.1.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.fragment:fragment:1.1.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.appcompat:appcompat-resources:1.1.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.drawerlayout:drawerlayout:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.viewpager:viewpager:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.loader:loader:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.activity:activity:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable-animated:1.1.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.vectordrawable:vectordrawable:1.1.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.customview:customview:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.core:core:1.1.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.cursoradapter:cursoradapter:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.versionedparcelable:versionedparcelable:1.1.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-viewmodel:2.1.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-runtime:2.1.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.savedstate:savedstate:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata:2.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.lifecycle:lifecycle-livedata-core:2.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.interpolator:interpolator:1.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.arch.core:core-runtime:2.0.0@aar" level="project" />
<orderEntry type="library" name="Gradle: androidx.constraintlayout:constraintlayout:1.1.3@aar" level="project" />
</component>
</module>

View File

@ -1,63 +0,0 @@
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.HttpFiber"
minSdkVersion 15
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
cppFlags ""
arguments "-DANDROID_STL=c++_shared"
//arguments "-DANDROID_STL=gnustl_shared"
arguments "-DCMAKE_BUILD_TYPE=RELEASE"
//arguments "-DCMAKE_BUILD_TYPE=DEBUG"
arguments "-DCMAKE_CXX_FLAGS_RELEASE=-O3"
arguments "-DCMAKE_VERBOSE_MAKEFILE=ON"
//abiFilters 'armeabi', 'arm64-v8a', 'armeabi-v7a', 'x86'//, 'x86_64'
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86' //, 'x86_64'
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
}
packagingOptions {
doNotStrip "*/armeabi/*.so"
doNotStrip "*/arm64-v8a/*.so"
doNotStrip "*/armeabi-v7a/*.so"
doNotStrip "*/x86/*.so"
doNotStrip "*/x86_64/*.so"
}
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
//implementation(name:'acl-debug', ext:'aar')
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

View File

@ -1,21 +0,0 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@ -1,27 +0,0 @@
package com.example.http;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.example.http", appContext.getPackageName());
}
}

View File

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.HttpFiber">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name="com.example.HttpFiber.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

View File

@ -1,133 +0,0 @@
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
if (${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
message(FATAL_ERROR "Please into another dir to build!")
endif()
add_definitions(
"-W"
"-Wall"
"-Werror"
"-Wshadow"
"-Wformat"
"-Wpointer-arith"
"-D_REENTRANT"
"-Wno-long-long"
"-Wuninitialized"
"-D_POSIX_PTHREAD_SEMANTICS"
"-fexceptions"
"-Wno-unused-parameter"
"-fPIC"
)
if (CMAKE_BUILD_TYPE STREQUAL "")
set(CMAKE_BUILD_TYPE "DEBUG")
endif()
if (CMAKE_BUILD_TYPE STREQUAL "RELEASE")
set(build_rpath "release")
add_definitions("-g")
add_definitions("-DACL_CPP_LOG_SKIP_FILE")
add_definitions("-Os")
# add_definitions("-O2")
elseif (CMAKE_BUILD_TYPE STREQUAL "DEBUG")
set(build_rpath "debug")
add_definitions("-g")
add_definitions("-Os")
else()
message(FATAL_ERROR "debug")
add_definitions("-g")
set(build_rpath "debug")
endif()
#string(TOUPPER ${CMAKE_SYSTEM_NAME} CMAKE_SYSTEM_NAME)
if(CMAKE_SYSTEM_NAME MATCHES "Android")
add_definitions("-DANDROID -Wno-unused-command-line-argument")
list(APPEND ANDROID_LINKER_FLAGS -Qunused-arguments)
string( APPEND CMAKE_CXX_FLAGS " -Qunused-arguments")
# xxx: don't set -flto for shared mode in cflags
#add_definitions("-flto")
# xxx: don't set any CMAKE_SHARED_LINKER_FLAGS on NDK with gnustl_shared
if (NOT ANDROID_STL MATCHES "gnustl_shared")
set(CMAKE_SHARED_LINKER_FLAGS "-fvisibility=hidden")
endif()
add_definitions("-fvisibility=hidden")
add_definitions("-fvisibility-inlines-hidden")
add_definitions("-fdata-sections -ffunction-sections")
elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
add_definitions(
"-Wno-invalid-source-encoding"
"-Wno-unused-private-field"
"-Wno-unused-const-variable"
)
else()
message(FATAL_ERROR "unknown CMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}")
endif()
##############################################################################
set(acl_home ${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../..)
set(acl_c_path ${acl_home}/lib_acl)
set(acl_c_include ${acl_c_path}/include)
set(acl_cpp_path ${acl_home}/lib_acl_cpp)
set(acl_cpp_include ${acl_cpp_path}/include)
set(fiber_path ${acl_home}/lib_fiber)
set(fiber_c_include ${fiber_path}/c/include)
set(fiber_cpp_include ${fiber_path}/cpp/include)
include_directories(
"./"
${acl_c_include}
${acl_cpp_include}
${fiber_c_include}
${fiber_cpp_include}
${CMAKE_CURRENT_SOURCE_DIR}
)
set(src ${CMAKE_CURRENT_SOURCE_DIR})
set(sources
${src}
)
foreach(iter ${sources})
aux_source_directory(${iter} lib_src)
endforeach()
if(CMAKE_SYSTEM_NAME MATCHES "Android")
if (NOT ANDROID_STL MATCHES "gnustl_shared")
set(CMAKE_SHARED_LINKER_FLAGS "-shared -O3 -flto")
endif()
endif()
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log)
if(CMAKE_SYSTEM_NAME MATCHES "Android")
set(lib_acl_path ${acl_home}/android/lib/${ANDROID_ABI})
set(libacl ${lib_acl_path}/libacl.a)
set(libacl_cpp ${lib_acl_path}/libacl_cpp.a)
set(libprotocol ${lib_acl_path}/libprotocol.a)
set(libfiber ${lib_acl_path}/libfiber.a)
set(libfiber_cpp ${lib_acl_path}/libfiber_cpp.a)
set(lib_all ${libfiber_cpp} ${libacl_cpp} ${libprotocol} ${libacl} ${libfiber} -lz)
# set(lib_all ${libacl_cpp} ${libprotocol} ${libacl} -lz)
endif()
add_library(native-lib SHARED ${lib_src})
target_link_libraries(native-lib ${lib_all} ${log-lib})
###############################################################################

View File

@ -1,118 +0,0 @@
//
// Created by shuxin   zheng on 2020/10/4.
//
#include "stdafx.h"
#include "log.h"
#include "fiber_waiter.h"
#include "jobject_set.h"
static JavaVM* g_jvm = NULL;
static JNIEnv* get_env(void) {
JNIEnv* env;
int status = g_jvm->GetEnv((void**) &env, JNI_VERSION_1_6);
if (status == JNI_EDETACHED || env == NULL) {
log_info("get_env(%d): status=%d, %d, env=%p",
__LINE__, status, JNI_EDETACHED, env);
log_info("try call AttachCurrentThread to get env, jvm=%p", g_jvm);
//status = g_jvm->AttachCurrentThreadAsDaemon(&env, NULL);
status = g_jvm->AttachCurrentThread(&env, NULL);
if (status != JNI_OK || env == NULL) {
log_error("get_env: AttachCurrentThread failed");
return NULL;
}
log_info("get_env(%d): status=%d, env=%p", __LINE__, status, env);
}
if (env->ExceptionOccurred()) {
log_error("%d: some exception happened!", __LINE__);
env->ExceptionDescribe();
env->ExceptionClear();
}
log_info("get_env: get env=%p ok, status=%d", env, status);
return env;
}
static void fiber_thread_run(fiber_waiter* waiter) {
waiter->start(1024000);
JNIEnv* env = get_env();
log_info(">>>get env=%p<<<", env);
acl::fiber::schedule();
}
extern "C" JNIEXPORT jlong JNICALL
Java_com_example_HttpFiber_FiberThread_FiberSchedule(
JNIEnv* env,
jobject me)
{
env->GetJavaVM(&g_jvm);
fiber_waiter* waiter = new fiber_waiter;
std::thread* thread = new std::thread(fiber_thread_run, waiter);
thread->detach();
return (jlong) waiter;
}
class myfiber : public acl::fiber {
public:
myfiber(jobject o) : o_(o) {
}
private:
~myfiber(void) {
JNIEnv* env = get_env();
if (env) {
env->DeleteGlobalRef(o_);
}
}
public:
void run(void) {
log_info(">>>fiber started<<<");
JNIEnv* env = get_env();
if (env == NULL) {
return;
}
log_info(">>>run: env=%p, o=%p<<<", env, o_);
//jclass clz = env->GetObjectClass(o_);
//log_info(">>>o=%p, clz=%p<<", o_, clz);
jobject fb = env->NewGlobalRef(o_);
jobject_set oper(env, fb);
oper.call("onRun");
//delete this;
}
private:
jobject o_;
};
static void thread_call(myfiber* fb) {
log_info("-----------begin-----------------");
fb->run();
log_info("-----------end-------------------");
}
extern "C" JNIEXPORT void JNICALL
Java_com_example_HttpFiber_FiberThread_FiberStart(
JNIEnv *env,
jobject thiz,
jlong owaiter,
jobject ofiber)
{
jobject fb = env->NewGlobalRef(ofiber);
fiber_waiter* waiter = (fiber_waiter*) owaiter;
myfiber* fiber = new myfiber(fb);
log_info("start one fiber");
if (0) {
std::thread thread(thread_call, fiber);
thread.detach();
} else {
waiter->push(fiber);
}
}

View File

@ -1,32 +0,0 @@
//
// Created by shuxin   zheng on 2020/10/4.
//
#include "stdafx.h"
#include "log.h"
#include "fiber_waiter.h"
fiber_waiter::fiber_waiter(void) {
box_ = new acl::fiber_tbox<acl::fiber>;
}
fiber_waiter::~fiber_waiter(void) {
delete box_;
}
void fiber_waiter::push(acl::fiber* fiber) {
box_->push(fiber);
}
void fiber_waiter::run(void) {
log_info(">>>waiter fiber started!");
// can't call any jni function in fiber.
// test();
while (true) {
// blocking wait for one task;
acl::fiber* fiber = box_->pop();
fiber->start(12800000);
}
}

View File

@ -1,21 +0,0 @@
//
// Created by shuxin   zheng on 2020/10/4.
//
#pragma once
class fiber_waiter : public acl::fiber {
public:
fiber_waiter(void);
~fiber_waiter(void);
// add the fiber queue
void push(acl::fiber* fiber);
protected:
// @override
void run(void);
private:
acl::fiber_tbox<acl::fiber>* box_;
};

View File

@ -1,107 +0,0 @@
//
// Created by shuxin   zheng on 2020/10/4.
//
#include "stdafx.h"
#include "log.h"
#include "http_get.h"
http_get::http_get(const char* host, int port, const char* url)
: host_(host)
, port_(port)
, url_(url)
{}
bool http_get::get(const char* addr, const char* host,
const char *url, acl::string &out) {
acl::http_request request(addr);
acl::http_header& header = request.request_header();
header.set_url(url)
.set_host(host)
.accept_gzip(true)
.set_keep_alive(false);
log_info("http_get(%d): addr=%s, host=%s, url=%s", __LINE__, addr, host, url);
if (!request.request(NULL, 0)) {
log_error("send http request error=%s", acl::last_serror());
return false;
}
if (!request.get_body(out)) {
log_error("get body error: %s", acl::last_serror());
return false;
}
acl::http_client* conn = request.get_client();
acl::string hdr_res;
conn->sprint_header(hdr_res, "response header");
log_info("%s", hdr_res.c_str());
return true;
}
void http_get::run(void) {
std::vector<acl::string> ips;
const char* host = host_.c_str();
int err = 0;
go_wait_thread[&] {
log_info("begin resolve host=%s", host);
// resolve domain in a thread to avoid blocking the fiber thread scheule.
#if 1
struct hostent* ent = gethostbyname(host);
if (ent == NULL) {
err = h_errno;
log_error("can't get addr for host=%s, %s", host, hstrerror(h_errno));
return;
}
char ip[64];
for (char** pptr = ent->h_addr_list; *pptr != NULL; pptr++) {
if (inet_ntop(ent->h_addrtype, *pptr, ip, sizeof(ip))) {
ips.push_back(ip);
log_info("http_get::run: one ip: %s", ip);
}
}
#else
ACL_DNS_DB* db = acl_gethostbyname(host, &errnum);
if (db == NULL) {
logger_error("gethostbyname error=%s, domain=%s, herr=%d",
acl_netdb_strerror(errnum), host, errnum);
return;
}
ACL_ITER iter;
acl_foreach(iter, db) {
const ACL_HOSTNAME* hn = (const ACL_HOSTNAME*) iter.data;
if (hn->saddr.sa.sa_family == AF_INET) {
ips.push_back(hn->ip);
} else if (hn->saddr.sa.sa_family == AF_INET6) {
ips.push_back(hn->ip);
} else {
log_info("domain=%s, ipv=%s, type=%d", host, hn->ip,
hn->saddr.sa.sa_family);
}
}
acl_netdb_free(db);
#endif
};
if (ips.empty()) {
log_error("resolve domain(%s) failed", host);
acl::string buf;
buf.format("can't get addr=%s, error=%s", host, hstrerror(err));
return;
}
for (std::vector<acl::string>::const_iterator cit = ips.begin();
cit != ips.end(); ++cit) {
acl::string addr;
addr.format("%s:%d", (*cit).c_str(), port_);
acl::string buf;
if (get(addr, host, url_.c_str(), buf)) {
break;
} else {
buf.clear();
}
}
}

View File

@ -1,22 +0,0 @@
//
// Created by shuxin   zheng on 2020/10/4.
//
#pragma once
class http_get {
public:
http_get( const char* host, int port, const char* url);
~http_get(void) {}
void run(void);
private:
acl::string host_;
int port_;
acl::string url_;
bool get(const char* addr, const char* host,
const char* url, acl::string& out);
};

View File

@ -1,205 +0,0 @@
#include "stdafx.h"
#include "log.h"
#include "jobject_set.h"
#include "util.h"
jobject_set::jobject_set(JNIEnv *env, jobject obj)
: env_(env)
, obj_(obj)
{
clz_ = env_->GetObjectClass(obj_);
if (clz_ == NULL) {
log_error("GetObjectClass error");
abort();
}
#if 1
jmethodID foo = env_->GetMethodID(clz_, "<init>", "()V");
jobject o = env_->NewObject(clz_, foo, "()V");
log_info(">>>new obj=%p, clz=%p, env=%p<<<", o, clz_, env_);
if (env_->ExceptionOccurred()) {
log_error("%d: some exception happened!", __LINE__);
env_->ExceptionDescribe();
env_->ExceptionClear();
//abort();
}
#endif
}
bool jobject_set::set(const char *name, int in)
{
jfieldID fID = env_->GetFieldID(clz_, name, "I");
if (fID == NULL) {
log_error("%s not found", name);
return false;
}
env_->SetIntField(obj_, fID, (jint) in);
return true;
}
bool jobject_set::set(const char *name, long long int in)
{
jfieldID fID = env_->GetFieldID(clz_, name, "I");
if (fID == NULL) {
log_error("%s not found", name);
return false;
}
env_->SetIntField(obj_, fID, (jlong) in);
return true;
}
bool jobject_set::set(const char *name, const std::string &in)
{
jfieldID fID = env_->GetFieldID(clz_, name, "Ljava/lang/String;");
if (fID == NULL) {
log_error("%s not found", name);
return false;
}
jstring str = util::String2JString(env_, in.c_str());
if (str == NULL) {
log_error("GetString error, field=%s", name);
return false;
}
env_->SetObjectField(obj_, fID, str);
env_->DeleteLocalRef(str);
return true;
}
bool jobject_set::set(const char *name, const std::vector<const char*>& in)
{
jfieldID fID = env_->GetFieldID(clz_, name, "[Ljava/lang/String;");
if (fID == NULL) {
log_error("%s not found", name);
return false;
}
jclass clazz = env_->FindClass("java/lang/String");
if (clazz == NULL) {
log_error("not found java/lang/String");
return false;
}
jobjectArray array = env_->NewObjectArray(in.size(), clazz, NULL);
env_->DeleteLocalRef(clazz);
int i = 0;
for (std::vector<const char*>::const_iterator cit = in.begin();
cit != in.end(); ++cit, ++i) {
jstring js = util::String2JString(env_, (*cit));
env_->SetObjectArrayElement(array, i, js);
env_->DeleteLocalRef(js);
}
env_->SetObjectField(obj_, fID, array);
return true;
}
bool jobject_set::set(const char *name, const std::vector<std::string> &in)
{
jfieldID fID = env_->GetFieldID(clz_, name, "[Ljava/lang/String;");
if (fID == NULL) {
log_error("%s not found", name);
return false;
}
jclass clazz = env_->FindClass("java/lang/String");
if (clazz == NULL) {
log_error("not found java/lang/String");
return false;
}
jobjectArray array = env_->NewObjectArray(in.size(), clazz, NULL);
env_->DeleteLocalRef(clazz);
int i = 0;
for (std::vector<std::string>::const_iterator cit = in.begin();
cit != in.end(); ++cit, ++i) {
jstring js = util::String2JString(env_, (*cit).c_str());
env_->SetObjectArrayElement(array, i, js);
env_->DeleteLocalRef(js);
}
env_->SetObjectField(obj_, fID, array);
return true;
}
bool jobject_set::call(const char* method)
{
jmethodID mID = env_->GetMethodID(clz_, method, "()V");
//jmethodID mID = env_->GetStaticMethodID(clz_, method, "()V");
if (!mID) {
log_error("method %s not found", method);
return false;
}
if (env_->ExceptionOccurred()) {
log_error("%d: some exception happened!", __LINE__);
env_->ExceptionDescribe();
env_->ExceptionClear();
}
log_info(">>>call method=%s, env=%p, clz=%p, obj=%p, mid=%p<<<", method, &env_, clz_, obj_, mID);
env_->CallVoidMethod(obj_, mID);
//env_->CallStaticVoidMethod(clz_, mID);
log_info(">>>call finished<<<");
if (env_->ExceptionOccurred()) {
log_error("%d: some exception happened!", __LINE__);
env_->ExceptionDescribe();
env_->ExceptionClear();
}
return true;
}
bool jobject_set::call(const char *method, const std::vector<const char*>& in)
{
jmethodID mID = env_->GetMethodID(clz_, method, "([Ljava/lang/String;)V");
if (!mID) {
log_error("method %s not found", method);
return false;
}
jclass clazz = env_->FindClass("java/lang/String");
if (clazz == NULL) {
log_error("not found java/lang/String");
return false;
}
jobjectArray array = env_->NewObjectArray(in.size(), clazz, NULL);
env_->DeleteLocalRef(clazz);
int i = 0;
for (std::vector<const char*>::const_iterator cit = in.begin();
cit != in.end(); ++cit, ++i) {
jstring js = util::String2JString(env_, (*cit));
env_->SetObjectArrayElement(array, i, js);
env_->DeleteLocalRef(js);
}
env_->CallVoidMethod(obj_, mID, array);
return true;
}
bool jobject_set::call(const char *method, const std::vector<std::string> &in)
{
jmethodID mID = env_->GetMethodID(clz_, method, "([Ljava/lang/String;)V");
if (!mID) {
log_error("method %s not found", method);
return false;
}
jclass clazz = env_->FindClass("java/lang/String");
if (clazz == NULL) {
log_error("not found java/lang/String");
return false;
}
jobjectArray array = env_->NewObjectArray(in.size(), clazz, NULL);
env_->DeleteLocalRef(clazz);
int i = 0;
for (std::vector<std::string>::const_iterator cit = in.begin();
cit != in.end(); ++cit, ++i) {
jstring js = util::String2JString(env_, (*cit).c_str());
env_->SetObjectArrayElement(array, i, js);
env_->DeleteLocalRef(js);
}
env_->CallVoidMethod(obj_, mID, array);
return true;
}

View File

@ -1,30 +0,0 @@
//
// Created by zhengshuxin on 2019/9/10.
//
#pragma once
#include <jni.h>
#include <string>
#include <vector>
class jobject_set {
public:
jobject_set(JNIEnv* env, jobject obj);
~jobject_set() {}
bool set(const char* name, int in);
bool set(const char* name, long long int in);
bool set(const char* name, const std::string& in);
bool set(const char* name, const std::vector<const char*>& in);
bool set(const char* name, const std::vector<std::string>& in);
bool call(const char* method);
bool call(const char* method, const std::vector<const char*>& in);
bool call(const char* method, const std::vector<std::string>& in);
private:
JNIEnv* env_;
jobject obj_;
jclass clz_;
};

View File

@ -1,52 +0,0 @@
#include "stdafx.h"
#include "log.h"
void log_info(const char* fmt, ...) {
va_list ap;
va_start(ap, fmt);
acl::string buf;
buf.format("thread-%lu: ", acl::thread::self());
buf.vformat_append(fmt, ap);
va_end(ap);
__android_log_write(ANDROID_LOG_INFO, "info", buf.c_str());
}
void log_error(const char* fmt, ...) {
va_list ap;
va_start(ap, fmt);
acl::string buf;
buf.format("thread-%lu: ", acl::thread::self());
buf.vformat_append(fmt, ap);
va_end(ap);
__android_log_write(ANDROID_LOG_ERROR, "error", buf.c_str());
}
typedef void (*write_fn)(void*, const char*, va_list);
static int open_callback(const char*, void*) {
return 0;
}
static void write_callback(void*, const char* fmt, va_list ap) {
char tag[256];
snprintf(tag, sizeof(tag), "debug");
char buf[512];
vsnprintf(buf, sizeof(buf), fmt, ap);
__android_log_print(ANDROID_LOG_INFO, tag, "%s", buf);
}
static void fiber_logger_callback(void *ctx, const char *fmt, va_list ap) {
__android_log_vprint(ANDROID_LOG_ERROR, "fiber", fmt, ap);
}
void log_open(void) {
acl_msg_register(open_callback, NULL, write_callback, NULL);
acl_msg_open("dummy.txt", "dummy");
logger("acl lib init ok!");
acl_fiber_msg_register(fiber_logger_callback, NULL);
}

View File

@ -1,5 +0,0 @@
#pragma once
void log_open(void);
void log_info(const char* fmt, ...);
void log_error(const char* fmt, ...);

View File

@ -1,26 +0,0 @@
/**
* Copyright (C) 2015-2018 IQIYI
* All rights reserved.
*
* AUTHOR(S)
* Zheng Shuxin
* E-mail: zhengshuxin@gmail.com
*
* VERSION
* 3/29 14:42:56 2020
*/
#pragma once
#include <stdlib.h>
#include <stdio.h>
#include <jni.h>
#include <android/log.h>
#include <string>
#include <thread>
#include "lib_acl.h"
#include "acl_cpp/lib_acl.hpp"
#include "fiber/libfiber.h"
#include "fiber/libfiber.hpp"
#include "fiber/go_fiber.hpp"

View File

@ -1,21 +0,0 @@
//
// Created by zhengshuxin on 2019/9/7.
//
#include "stdafx.h"
#include "util.h"
void util::JString2String(JNIEnv *env, jstring js, std::string &out)
{
const char *ptr = env->GetStringUTFChars(js, 0);
out = ptr;
env->ReleaseStringUTFChars(js, ptr);
}
jstring util::String2JString(JNIEnv *env, const char *s)
{
jstring js = env->NewStringUTF(s);
return js;
}
//extern "C" int atexit(void (*)()) { return 0; }

View File

@ -1,15 +0,0 @@
//
// Created by zhengshuxin on 2019/9/7.
//
#pragma once
#include <jni.h>
class util {
public:
util(void) {}
~util(void) {}
static void JString2String(JNIEnv* env, jstring js, std::string& out);
static jstring String2JString(JNIEnv* env, const char* s);
};

View File

@ -1,21 +0,0 @@
package com.example.HttpFiber;
public abstract class Fiber {
private String msg;
public Fiber() {}
private void setMsg(String msg) {
this.msg = msg;
}
private void onRun() {
System.out.println("Fiber: onRun");
this.run();
}
public abstract void run();
////////////////////////////////////////////////////////////////////////////
}

View File

@ -1,19 +0,0 @@
package com.example.HttpFiber;
public class FiberThread {
private long waiter;
public FiberThread() {}
public void start() {
waiter = FiberSchedule();
}
public void execute(HttpFiber fiber) {
FiberStart(waiter, fiber);
}
///////////////////////////////////////////////////////////////////////////
private native long FiberSchedule();
private native void FiberStart(long fiberSchedule, Object o);
}

View File

@ -1,14 +0,0 @@
package com.example.HttpFiber;
public class HttpFiber {
public HttpFiber() {}
private void onRun() {
System.out.println("Fiber: onRun");
this.run();
}
public void run() {
System.out.println("HttpFiber started!");
}
}

View File

@ -1,52 +0,0 @@
package com.example.HttpFiber;
import android.os.Handler;
import android.os.Message;
public final class HttpHandler extends Handler {
final public static int BODY_OK = 0;
final public static int BODY_ERR = 1;
private final MainActivity mainActivity;
public HttpHandler(MainActivity mainActivity) {
this.mainActivity = mainActivity;
}
@Override
public void handleMessage(Message message) {
switch (message.what) {
case BODY_OK:
mainActivity.onBody((String) message.obj);
break;
case BODY_ERR:
mainActivity.onError((String) message.obj);
break;
default:
break;
}
}
/**
* 成功获得 HTTP 数据体的回调方法
* @param body {String} 响应的 HTTP 数据体
*/
public void onBody(String body) {
Message message = new Message();
message.what = BODY_OK;
message.obj = body;
this.sendMessage(message);
}
/**
* 获取 HTTP 结果失败时的回调方法
* @param domain {String} 请求的域名
* @param url {String} 请求的 URL
*/
public void onError(String domain, String url) {
String error = "Domain: domain, " + "url: url";
Message message = new Message();
message.what = BODY_ERR;
message.obj = error;
this.sendMessage(message);
}
}

View File

@ -1,86 +0,0 @@
package com.example.HttpFiber;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private EditText domain;
private TextView result;
private FiberThread fiberThread = new FiberThread();
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
/**
* HTTP 读取失败的回调方法
* @param info
*/
public void onError(String info) {
StringBuffer text = new StringBuffer();
text.append("httpGet error\r\n");
text.append(info + "\r\n");
result.setText(text);
}
/**
* 获得 HTTP 数据体成功的回调方法
* @param body
*/
public void onBody(String body) {
result.setText(body);
}
/**
* HTTP 服务器获得数据
*/
private void httpGet() {
String host = domain.getText().toString().trim();
if (host.isEmpty()) {
return;
}
HttpFiber fiber = new HttpFiber();
System.out.println("create one fiber");
fiberThread.execute(fiber);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
domain = (EditText) findViewById(R.id.domain);
result = findViewById(R.id.result);
result.setMovementMethod(ScrollingMovementMethod.getInstance());
// 绑定 HTTP 请求事件
Button get = (Button) findViewById(R.id.http_get);
get.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
httpGet();
}
});
Button clear = (Button) findViewById(R.id.clear_results);
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 清空结果显示区域
result.setText("");
}
});
HttpHandler handler = new HttpHandler(this);
// 创建协程调度线程
fiberThread.start();
}
}

View File

@ -1,34 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillType="evenOdd"
android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
android:strokeWidth="1"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:endX="78.5885"
android:endY="90.9159"
android:startX="48.7653"
android:startY="61.0927"
android:type="linear">
<item
android:color="#44000000"
android:offset="0.0" />
<item
android:color="#00000000"
android:offset="1.0" />
</gradient>
</aapt:attr>
</path>
<path
android:fillColor="#FFFFFF"
android:fillType="nonZero"
android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
android:strokeWidth="1"
android:strokeColor="#00000000" />
</vector>

View File

@ -1,170 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#008577"
android:pathData="M0,0h108v108h-108z" />
<path
android:fillColor="#00000000"
android:pathData="M9,0L9,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,0L19,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,0L29,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,0L39,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,0L49,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,0L59,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,0L69,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,0L79,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M89,0L89,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M99,0L99,108"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,9L108,9"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,19L108,19"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,29L108,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,39L108,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,49L108,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,59L108,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,69L108,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,79L108,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,89L108,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M0,99L108,99"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,29L89,29"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,39L89,39"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,49L89,49"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,59L89,59"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,69L89,69"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M19,79L89,79"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M29,19L29,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M39,19L39,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M49,19L49,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M59,19L59,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M69,19L69,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
<path
android:fillColor="#00000000"
android:pathData="M79,19L79,89"
android:strokeWidth="0.8"
android:strokeColor="#33FFFFFF" />
</vector>

View File

@ -1,86 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RelativeLayout
android:id="@+id/layoutText"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/domain_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp">
<TextView
android:id="@+id/domain_lable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:text="域名:"
android:textSize="20sp" />
<EditText
android:id="@+id/domain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:layout_toRightOf="@+id/domain_lable"
android:layout_centerVertical="true"
android:text="www.baidu.com"
android:verticalScrollbarPosition="defaultPosition"
tools:layout_editor_absoluteX="88dp"
tools:layout_editor_absoluteY="97dp" />
</RelativeLayout>
<Button
android:id="@+id/http_get"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="请求"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:textSize="20sp"
android:layout_below="@+id/domain_layout"
android:layout_centerVertical="true"
android:textStyle="bold" />
<Button
android:id="@+id/clear_results"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/http_get"
android:layout_centerVertical="true"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="清空"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/http_get"
android:layout_centerVertical="true"
android:layout_marginTop="55dp"
android:fadeScrollbars="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:maxLines="15"
android:paddingLeft="40dp"
android:paddingTop="40dp"
android:paddingRight="40dp"
android:paddingBottom="40dp"
android:scrollbarStyle="outsideInset"
android:scrollbars="vertical"
android:scrollHorizontally="true"
android:text="TextView"
android:visibility="visible"
tools:layout_editor_absoluteX="65dp"
tools:visibility="visible" />
</RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View File

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View File

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color>
<color name="colorAccent">#D81B60</color>
</resources>

Some files were not shown because too many files have changed in this diff Show More