# COMLIB **Repository Path**: ratred/comlib ## Basic Information - **Project Name**: COMLIB - **Description**: C++跨平台(LINUX/WINDOWS/CYGWIN/MINGW/ANDROID/OPENHARMONY)基础开发库,支持信创操作系统以及移动操作系统。 - **Primary Language**: C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 8 - **Created**: 2020-11-27 - **Last Updated**: 2025-03-06 ## Categories & Tags **Categories**: web-dev-toolkits **Tags**: None ## README # COMLIB #### 介绍 C++跨平台(LINUX/WINDOWS/ANDROID/OPENHARMONY/CYGWIN/MINGW)网络程序开发基础库: CommType, Buffer, String, StringList, Array, Arguments, List, SharedPtr, ScopedPtr: 通用数据类型,各种基础数据类型的转化以及序列化与反序列化。 Thread, ThreadPool, Task, MessageQueue, Atom, AtomInt, ThreadLock, ThreadFreeLock, ThreadRWLock, ThreadSignal, ThreadSemaphore: 线程,线程池,任务,消息队列,原子变量,线程同步。 SocketAcceptor, SocketConnector, TCPClient, MessageReactor, HttpServer, RPC server & client: 基于消息边界的异步TCP服务端以及客户端,HTTP服务端,RPC服务端以及客户端。 CodecUTF8, CodecBase64, CodecMD5, CodecJson, CodecXML, CodecAES, Regex: 各种编码转码,加解密,正则表达式。 Application, Log, SqlDatabase, StackTracer, Proc, File, Timer, NTService: 日志,数据库,堆栈跟踪,进程,文件,时间,服务等操作系统相关。 #### 软件架构 WINDOWS, LINUX, ANDROID, OPENHARMONY #### CPU架构 I386, AMD64, ARM64, MIPS64, LOONGARCH64 #### 安装教程 1. LINUX: ./src/build.sh 2. ANDROID: ./src/build_android_(arm|aarch64).sh 3. HARMONY: ./src/build_harmony_(arm|aarch64).sh 4. WINDOWS: ./src/libcomm/vcproject/build_(x64|x86).bat #### 服务端与客户端RPC双向调用完整示例 ``` #include class MyClass { public: MyClass() { RPC_FUNC_REGISTER(MyClass,GetName,String,int); RPC_FUNC_REGISTER(MyClass,Error,void,const char*); } String GetName(int index) { const char* szNames[] = {"hello","world","bye"}; return szNames[index]; } void Error(const char* err) { printf("error: %s.\n", err); } }; #define CRT_FILE "d:\\mycrt\\www.wanghonghao.cn.pem" #define KEY_FILE "d:\\mycrt\\www.wanghonghao.cn.key" int main(int argc, char *argv[]) { LOGDEBUG("COMLIB: %s",common_version()); SocketAddress address(40218,"127.0.0.1"); #ifdef __GNUC__ //SocketAddress address(String::format("%s/server.sock",Application::GetApplicationDirectory().get())); #endif String input(512); MyClass clsInst; RPC rpc(address,(argc==1)?false:true/*,ThreadPool::DefaultThreadsCount,10,CRT_FILE,KEY_FILE*/); do { gets(input); if(input == "") { continue; } if(input == "q") { break; } else if(input == "c") { rpc.Messager()->Peer()->Close(); //break; continue; } int index = atoi(input); if(index >= 1 && index <=3) { CommType result; Arguments args; args << index-1; if(rpc.Call("MyClass::GetName",args,&result)) { printf("rpc class result: %s.\n",(const char*)result); } } else { Arguments args; args << "error in peer endpoint."; rpc.Call("MyClass::Error", args); } } while (true); return 0; } ```