NIM 跨平台 C++ SDK
全部  命名空间 文件 函数 变量 类型定义 枚举 枚举值 友元 宏定义 
v2_nim_internal.hpp
浏览该文件的文档.
1#ifndef V2_NIM_INTERNAL_H
2#define V2_NIM_INTERNAL_H
4#if defined(WIN32) || defined(_WIN32)
5#include <Windows.h>
6#else
7#include <dlfcn.h>
8#endif
9namespace v2 {
11 : code(code) {
12 auto iter = V2NIM_ERROR_DESC_MAPPING.find(code);
13 if (iter != V2NIM_ERROR_DESC_MAPPING.end()) {
14 desc = iter->second;
15 }
16 if (!pair.first.empty()) {
17 detail.emplace(std::move(pair));
18 }
19}
21 return detail[key];
22}
23namespace internal {
24enum {
29};
30enum {
33};
34// V2NIMClientAntispamUtilInternal
36public:
38};
40
41// V2NIMConversationIdUtilInternal
43public:
44 virtual nstd::string p2pConversationId(const nstd::string& accountId) = 0;
45 virtual nstd::string teamConversationId(const nstd::string& teamId) = 0;
46 virtual nstd::string superTeamConversationId(const nstd::string& superTeamId) = 0;
47 virtual V2NIMConversationType parseConversationType(const nstd::string& conversationId) = 0;
48 virtual nstd::string parseConversationTargetId(const nstd::string& conversationId) = 0;
49};
51
52// V2NIMMessageUtilInternal
54public:
57 nstd::string name,
58 nstd::string sceneName,
59 uint32_t width,
60 uint32_t height) = 0;
61 virtual nstd::optional<V2NIMMessage> createAudioMessage(nstd::string audioPath, nstd::string name, nstd::string sceneName, uint32_t duration) = 0;
63 nstd::string name,
64 nstd::string sceneName,
65 uint32_t duration,
66 uint32_t width,
67 uint32_t height) = 0;
69 virtual nstd::optional<V2NIMMessage> createLocationMessage(double latitude, double longitude, nstd::string address) = 0;
72 int32_t subType) = 0;
76 const nstd::string& channelId,
77 int32_t status,
79 const nstd::string& text) = 0;
82 virtual nstd::string imageThumbUrl(const nstd::string& url, int32_t thumbSize) = 0;
83 virtual nstd::string videoCoverUrl(const nstd::string& url, int32_t offset, int32_t thumbSize, const nstd::string& type) = 0;
85 double longitude,
86 const nstd::string& address) = 0;
87};
89
90// V2NIMChatroomMessageUtilInternal
92public:
95 nstd::string name,
96 nstd::string sceneName,
97 uint32_t width,
98 uint32_t height) = 0;
100 nstd::string name,
101 nstd::string sceneName,
102 uint32_t duration) = 0;
104 nstd::string name,
105 nstd::string sceneName,
106 uint32_t duration,
107 uint32_t width,
108 uint32_t height) = 0;
110 virtual nstd::optional<V2NIMChatroomMessage> createLocationMessage(double latitude, double longitude, nstd::string address) = 0;
113 int32_t subType) = 0;
116};
118
119#ifdef WIN32
120static const char* NIM_SDK_NAME = "nim.dll";
121static const char* NIM_CHATROOM_SDK_NAME = "nim_chatroom.dll";
122#elif __APPLE__
123static const char* NIM_SDK_NAME = "libnim.dylib";
124static const char* NIM_CHATROOM_SDK_NAME = "libnim_chatroom.dylib";
125#else
126static const char* NIM_SDK_NAME = "libnim.so";
127static const char* NIM_CHATROOM_SDK_NAME = "libnim_chatroom.so";
128#endif
129template <typename T>
130inline T callSdkFunction(const char* sdkName, const char* functionName) {
131#ifdef WIN32
132 auto* sdkHandle = ::LoadLibraryA(sdkName);
133 if (sdkHandle == nullptr) {
134 throw std::runtime_error("LoadLibraryA error: " + std::to_string(::GetLastError()));
135 }
136 auto* instanceFunction = ::GetProcAddress(static_cast<HMODULE>(sdkHandle), functionName);
137 if (instanceFunction == nullptr) {
138 throw std::runtime_error("GetProcAddress error: " + std::to_string(::GetLastError()));
139 }
140#else
141 // 获取当前模块所在路径
142 auto* sdkHandle = dlopen(sdkName, RTLD_LAZY);
143 if (sdkHandle == nullptr) {
144 throw std::runtime_error("dlopen error: " + std::string(dlerror()));
145 }
146 auto* instanceFunction = dlsym(sdkHandle, functionName);
147 if (instanceFunction == nullptr) {
148 throw std::runtime_error("dlsym error: " + std::string(dlerror()));
149 }
150#endif
151 return reinterpret_cast<T (*)()>(instanceFunction)();
152}
153} // namespace internal
156}
158 nstd::string name,
159 nstd::string sceneName,
160 uint32_t width,
161 uint32_t height) {
162 return internal::internalMessageUtil->createImageMessage(imagePath, name, sceneName, width, height);
163}
165 nstd::string name,
166 nstd::string sceneName,
167 uint32_t duration) {
168 return internal::internalMessageUtil->createAudioMessage(audioPath, name, sceneName, duration);
169}
171 nstd::string name,
172 nstd::string sceneName,
173 uint32_t duration,
174 uint32_t width,
175 uint32_t height) {
176 return internal::internalMessageUtil->createVideoMessage(videoPath, name, sceneName, duration, width, height);
177}
179 return internal::internalMessageUtil->createFileMessage(filePath, name, sceneName);
180}
182 return internal::internalMessageUtil->createLocationMessage(latitude, longitude, address);
183}
185 return internal::internalMessageUtil->createCustomMessage(text, rawAttachment);
186}
188 int32_t subType) {
190}
193}
196}
198 const nstd::string& channelId,
199 int32_t status,
201 const nstd::string& text) {
202 return internal::internalMessageUtil->createCallMessage(type, channelId, status, durations, text);
203}
204
207}
209 nstd::string name,
210 nstd::string sceneName,
211 uint32_t width,
212 uint32_t height) {
213 return internal::internalChatroomMessageUtil->createImageMessage(imagePath, name, sceneName, width, height);
214}
216 nstd::string name,
217 nstd::string sceneName,
218 uint32_t duration) {
219 return internal::internalChatroomMessageUtil->createAudioMessage(audioPath, name, sceneName, duration);
220}
222 nstd::string name,
223 nstd::string sceneName,
224 uint32_t duration,
225 uint32_t width,
226 uint32_t height) {
227 return internal::internalChatroomMessageUtil->createVideoMessage(videoPath, name, sceneName, duration, width, height);
228}
230 nstd::string name,
231 nstd::string sceneName) {
232 return internal::internalChatroomMessageUtil->createFileMessage(filePath, name, sceneName);
233}
235 double longitude,
236 nstd::string address) {
237 return internal::internalChatroomMessageUtil->createLocationMessage(latitude, longitude, address);
238}
241}
244 int32_t subType) {
246}
249}
252}
255}
258}
259inline nstd::string V2NIMStorageUtil::imageThumbUrl(const nstd::string& url, int32_t thumbSize) {
260 return internal::internalMessageUtil->imageThumbUrl(url, thumbSize);
261}
262inline nstd::string V2NIMStorageUtil::videoCoverUrl(const nstd::string& url, int32_t offset, int32_t thumbSize, const nstd::string& type) {
263 return internal::internalMessageUtil->videoCoverUrl(url, offset, thumbSize, type);
264}
266 double longitude,
267 const nstd::string& address) {
268 return internal::internalMessageUtil->createLocationMessageAttachment(latitude, longitude, address);
269}
272}
275}
278}
281}
284}
287}
288
289} // namespace v2
290#endif
Definition: ne_stl_continuous_container.h:15
Definition: ne_stl_smart_ptr.h:30
Definition: ne_stl_string.h:19
static nstd::optional< V2NIMChatroomMessage > createTextMessage(nstd::string text)
创建文本消息
Definition: v2_nim_internal.hpp:205
static nstd::optional< V2NIMChatroomMessage > createCustomMessageWithAttachment(nstd::shared_ptr< V2NIMMessageCustomAttachment > attachment, int32_t subType)
创建群聊自定义消息
Definition: v2_nim_internal.hpp:242
static nstd::optional< V2NIMChatroomMessage > createLocationMessage(double latitude, double longitude, nstd::string address)
创建位置消息
Definition: v2_nim_internal.hpp:234
static nstd::optional< V2NIMChatroomMessage > createFileMessage(nstd::string filePath, nstd::string name, nstd::string sceneName)
创建文件消息
Definition: v2_nim_internal.hpp:229
static nstd::optional< V2NIMChatroomMessage > createTipsMessage(nstd::string text)
创建提示消息
Definition: v2_nim_internal.hpp:247
static nstd::optional< V2NIMChatroomMessage > createImageMessage(nstd::string imagePath, nstd::string name, nstd::string sceneName, uint32_t width, uint32_t height)
创建图片消息
Definition: v2_nim_internal.hpp:208
static nstd::optional< V2NIMChatroomMessage > createForwardMessage(V2NIMChatroomMessage message)
创建转发消息
Definition: v2_nim_internal.hpp:250
static nstd::optional< V2NIMChatroomMessage > createVideoMessage(nstd::string videoPath, nstd::string name, nstd::string sceneName, uint32_t duration, uint32_t width, uint32_t height)
创建视频消息
Definition: v2_nim_internal.hpp:221
static nstd::optional< V2NIMChatroomMessage > createCustomMessage(nstd::string rawAttachment)
创建自定义消息
Definition: v2_nim_internal.hpp:239
static nstd::optional< V2NIMChatroomMessage > createAudioMessage(nstd::string audioPath, nstd::string name, nstd::string sceneName, uint32_t duration)
创建音频消息
Definition: v2_nim_internal.hpp:215
static V2NIMClientAntispamResult checkTextAntispam(nstd::string text, nstd::string replace)
文本本地反垃圾
Definition: v2_nim_internal.hpp:285
static nstd::string superTeamConversationId(const nstd::string &superTeamId)
获取超级群会话ID
Definition: v2_nim_internal.hpp:276
static V2NIMConversationType parseConversationType(const nstd::string &conversationId)
获取会话ID对应的会话类型
Definition: v2_nim_internal.hpp:279
static nstd::string p2pConversationId(const nstd::string &accountId)
获取点对点会话ID
Definition: v2_nim_internal.hpp:270
static nstd::string teamConversationId(const nstd::string &teamId)
获取群组会话ID
Definition: v2_nim_internal.hpp:273
static nstd::string parseConversationTargetId(const nstd::string &conversationId)
获取会话ID对应的目标ID
Definition: v2_nim_internal.hpp:282
static nstd::shared_ptr< V2NIMMessageLocationAttachment > createLocationMessageAttachment(double latitude, double longitude, const nstd::string &address)
构造地理位置消息附件
Definition: v2_nim_internal.hpp:265
static nstd::optional< nstd::string > messageSerialization(const V2NIMMessage &message)
将 V2NIMMessage 序列化为字符串
Definition: v2_nim_internal.hpp:253
static nstd::optional< V2NIMMessage > messageDeserialization(const nstd::string &messageString)
将字符串反序列化为 V2NIMMessage
Definition: v2_nim_internal.hpp:256
static nstd::optional< V2NIMMessage > createCustomMessage(nstd::string text, nstd::string rawAttachment)
创建自定义消息
Definition: v2_nim_internal.hpp:184
static nstd::optional< V2NIMMessage > createFileMessage(nstd::string filePath, nstd::string name, nstd::string sceneName)
创建文件消息
Definition: v2_nim_internal.hpp:178
static nstd::optional< V2NIMMessage > createAudioMessage(nstd::string audioPath, nstd::string name, nstd::string sceneName, uint32_t duration)
创建音频消息
Definition: v2_nim_internal.hpp:164
static nstd::optional< V2NIMMessage > createImageMessage(nstd::string imagePath, nstd::string name, nstd::string sceneName, uint32_t width, uint32_t height)
创建图片消息
Definition: v2_nim_internal.hpp:157
static nstd::optional< V2NIMMessage > createLocationMessage(double latitude, double longitude, nstd::string address)
创建位置消息
Definition: v2_nim_internal.hpp:181
static nstd::optional< V2NIMMessage > createVideoMessage(nstd::string videoPath, nstd::string name, nstd::string sceneName, uint32_t duration, uint32_t width, uint32_t height)
创建视频消息
Definition: v2_nim_internal.hpp:170
static nstd::optional< V2NIMMessage > createTipsMessage(nstd::string text)
创建提示消息
Definition: v2_nim_internal.hpp:191
static nstd::optional< V2NIMMessage > createCustomMessageWithAttachment(nstd::shared_ptr< V2NIMMessageCustomAttachment > attachment, int32_t subType)
创建群聊自定义消息
Definition: v2_nim_internal.hpp:187
static nstd::optional< V2NIMMessage > createCallMessage(int32_t type, const nstd::string &channelId, int32_t status, const nstd::vector< V2NIMMessageCallDuration > &durations, const nstd::string &text)
构造话单消息
Definition: v2_nim_internal.hpp:197
static nstd::optional< V2NIMMessage > createForwardMessage(V2NIMMessage message)
创建转发消息
Definition: v2_nim_internal.hpp:194
static nstd::optional< V2NIMMessage > createTextMessage(nstd::string text)
创建文本消息
Definition: v2_nim_internal.hpp:154
static nstd::string videoCoverUrl(const nstd::string &url, int32_t offset, int32_t thumbSize, const nstd::string &type)
获取视频封面
Definition: v2_nim_internal.hpp:262
static nstd::string imageThumbUrl(const nstd::string &url, int32_t thumbSize)
获取图片缩略图
Definition: v2_nim_internal.hpp:259
Definition: v2_nim_internal.hpp:91
virtual nstd::optional< V2NIMChatroomMessage > createForwardMessage(V2NIMChatroomMessage message)=0
virtual nstd::optional< V2NIMChatroomMessage > createLocationMessage(double latitude, double longitude, nstd::string address)=0
virtual nstd::optional< V2NIMChatroomMessage > createTextMessage(nstd::string text)=0
virtual nstd::optional< V2NIMChatroomMessage > createCustomMessageWithAttachment(nstd::shared_ptr< V2NIMMessageCustomAttachment > attachment, int32_t subType)=0
virtual nstd::optional< V2NIMChatroomMessage > createFileMessage(nstd::string filePath, nstd::string name, nstd::string sceneName)=0
virtual nstd::optional< V2NIMChatroomMessage > createImageMessage(nstd::string imagePath, nstd::string name, nstd::string sceneName, uint32_t width, uint32_t height)=0
virtual nstd::optional< V2NIMChatroomMessage > createVideoMessage(nstd::string videoPath, nstd::string name, nstd::string sceneName, uint32_t duration, uint32_t width, uint32_t height)=0
virtual nstd::optional< V2NIMChatroomMessage > createCustomMessage(nstd::string rawAttachment)=0
virtual nstd::optional< V2NIMChatroomMessage > createTipsMessage(nstd::string text)=0
virtual nstd::optional< V2NIMChatroomMessage > createAudioMessage(nstd::string audioPath, nstd::string name, nstd::string sceneName, uint32_t duration)=0
Definition: v2_nim_internal.hpp:35
virtual V2NIMClientAntispamResult checkTextAntispam(nstd::string text, nstd::string replace)=0
Definition: v2_nim_internal.hpp:42
virtual nstd::string p2pConversationId(const nstd::string &accountId)=0
virtual nstd::string teamConversationId(const nstd::string &teamId)=0
virtual nstd::string parseConversationTargetId(const nstd::string &conversationId)=0
virtual nstd::string superTeamConversationId(const nstd::string &superTeamId)=0
virtual V2NIMConversationType parseConversationType(const nstd::string &conversationId)=0
Definition: v2_nim_internal.hpp:53
virtual nstd::string imageThumbUrl(const nstd::string &url, int32_t thumbSize)=0
virtual nstd::optional< V2NIMMessage > createCustomMessageWithAttachment(nstd::shared_ptr< V2NIMMessageCustomAttachment > attachment, int32_t subType)=0
virtual nstd::optional< V2NIMMessage > createLocationMessage(double latitude, double longitude, nstd::string address)=0
virtual nstd::optional< V2NIMMessage > createTextMessage(nstd::string text)=0
virtual nstd::optional< V2NIMMessage > createAudioMessage(nstd::string audioPath, nstd::string name, nstd::string sceneName, uint32_t duration)=0
virtual nstd::optional< V2NIMMessage > createCustomMessage(nstd::string text, nstd::string rawAttachment)=0
virtual nstd::optional< V2NIMMessage > createForwardMessage(V2NIMMessage message)=0
virtual nstd::optional< V2NIMMessage > createFileMessage(nstd::string filePath, nstd::string name, nstd::string sceneName)=0
virtual nstd::optional< V2NIMMessage > createTipsMessage(nstd::string text)=0
virtual nstd::shared_ptr< V2NIMMessageLocationAttachment > createLocationMessageAttachment(double latitude, double longitude, const nstd::string &address)=0
virtual nstd::optional< V2NIMMessage > messageDeserialization(const nstd::string &message)=0
virtual nstd::string videoCoverUrl(const nstd::string &url, int32_t offset, int32_t thumbSize, const nstd::string &type)=0
virtual nstd::optional< V2NIMMessage > createImageMessage(nstd::string imagePath, nstd::string name, nstd::string sceneName, uint32_t width, uint32_t height)=0
virtual nstd::optional< V2NIMMessage > createVideoMessage(nstd::string videoPath, nstd::string name, nstd::string sceneName, uint32_t duration, uint32_t width, uint32_t height)=0
virtual nstd::optional< V2NIMMessage > createCallMessage(int32_t type, const nstd::string &channelId, int32_t status, const nstd::vector< V2NIMMessageCallDuration > &durations, const nstd::string &text)=0
virtual nstd::optional< nstd::string > messageSerialization(const V2NIMMessage &message)=0
phmap::priv::Pair< const K, V > Pair
Definition: ne_stl_map.h:11
static const char * NIM_SDK_NAME
Definition: v2_nim_internal.hpp:126
V2NIMClientAntispamUtilInternal * internalClientAntispamUtil
Definition: v2_nim_internal.hpp:39
V2NIMChatroomMessageUtilInternal * internalChatroomMessageUtil
Definition: v2_nim_internal.hpp:117
V2NIMMessageUtilInternal * internalMessageUtil
Definition: v2_nim_internal.hpp:88
V2NIMConversationIdUtilInternal * internalConversationIdUtil
Definition: v2_nim_internal.hpp:50
@ V2_NIM_CHATROOM_MESSAGE_UTIL
Definition: v2_nim_internal.hpp:32
@ V2_NIM_CHATROOM_SDK_EXPORT
Definition: v2_nim_internal.hpp:31
T callSdkFunction(const char *sdkName, const char *functionName)
Definition: v2_nim_internal.hpp:130
@ V2_NIM_INTERNEL_INSTANCE
Definition: v2_nim_internal.hpp:25
@ V2_NIM_INTERNEL_CONVERSATION_ID_UTIL
Definition: v2_nim_internal.hpp:27
@ V2_NIM_INTERNEL_CLIENT_ANTI_SPAM_UTIL
Definition: v2_nim_internal.hpp:26
@ V2_NIM_INTERNEL_MESSAGE_UTIL
Definition: v2_nim_internal.hpp:28
static const char * NIM_CHATROOM_SDK_NAME
Definition: v2_nim_internal.hpp:127
Definition: v2_nim_ai_service.hpp:4
static const std::map< uint32_t, const char *const > V2NIM_ERROR_DESC_MAPPING
Definition: v2_nim_def_enum.hpp:563
V2NIMConversationType
Definition: v2_nim_def_enum.hpp:913
Definition: ne_stl_optional.h:16
Definition: v2_nim_def_struct.hpp:1886
Definition: v2_nim_def_struct.hpp:927
uint32_t code
错误码, 详见 V2NIMErrorCode
Definition: v2_nim_def_struct.hpp:9
nstd::string & operator[](const nstd::string &key)
Definition: v2_nim_internal.hpp:20
nstd::map< nstd::string, nstd::string > detail
错误详情
Definition: v2_nim_def_struct.hpp:13
nstd::string desc
错误描述
Definition: v2_nim_def_struct.hpp:11
V2NIMError()=default
Definition: v2_nim_def_struct.hpp:651