node-nim 7.8.13-rc.3 → 7.8.13-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/just-task.js +14 -9
  2. package/package.json +3 -2
  3. package/src/api/nim_node_client.cpp +282 -0
  4. package/src/api/nim_node_client.h +52 -0
  5. package/src/api/nim_node_client_event_handler.cpp +269 -0
  6. package/src/api/nim_node_client_event_handler.h +63 -0
  7. package/src/api/nim_node_data_event_handler.cpp +28 -0
  8. package/src/api/nim_node_data_event_handler.h +29 -0
  9. package/src/api/nim_node_data_sync.cpp +59 -0
  10. package/src/api/nim_node_data_sync.h +31 -0
  11. package/src/api/nim_node_friend.cpp +141 -0
  12. package/src/api/nim_node_friend.h +39 -0
  13. package/src/api/nim_node_friend_event_handler.cpp +75 -0
  14. package/src/api/nim_node_friend_event_handler.h +35 -0
  15. package/src/api/nim_node_global.cpp +144 -0
  16. package/src/api/nim_node_global.h +37 -0
  17. package/src/api/nim_node_global_event_handler.cpp +101 -0
  18. package/src/api/nim_node_global_event_handler.h +38 -0
  19. package/src/api/nim_node_msglog.cpp +1126 -0
  20. package/src/api/nim_node_msglog.h +60 -0
  21. package/src/api/nim_node_msglog_event_handler.cpp +277 -0
  22. package/src/api/nim_node_msglog_event_handler.h +103 -0
  23. package/src/api/nim_node_nos.cpp +194 -0
  24. package/src/api/nim_node_nos.h +44 -0
  25. package/src/api/nim_node_nos_event_handler.cpp +172 -0
  26. package/src/api/nim_node_nos_event_handler.h +45 -0
  27. package/src/api/nim_node_online_session.cpp +116 -0
  28. package/src/api/nim_node_online_session.h +37 -0
  29. package/src/api/nim_node_online_session_event_handler.cpp +92 -0
  30. package/src/api/nim_node_online_session_event_handler.h +39 -0
  31. package/src/api/nim_node_pass_service_event_handler.cpp +56 -0
  32. package/src/api/nim_node_pass_service_event_handler.h +33 -0
  33. package/src/api/nim_node_pass_through_proxy.cpp +70 -0
  34. package/src/api/nim_node_pass_through_proxy.h +33 -0
  35. package/src/api/nim_node_plugin.cpp +78 -0
  36. package/src/api/nim_node_plugin.h +59 -0
  37. package/src/api/nim_node_session.cpp +598 -0
  38. package/src/api/nim_node_session.h +53 -0
  39. package/src/api/nim_node_session_event_handler.cpp +278 -0
  40. package/src/api/nim_node_session_event_handler.h +70 -0
  41. package/src/api/nim_node_signaling.cpp +243 -0
  42. package/src/api/nim_node_signaling.h +45 -0
  43. package/src/api/nim_node_signaling_event_handler.cpp +245 -0
  44. package/src/api/nim_node_signaling_event_handler.h +41 -0
  45. package/src/api/nim_node_subscribe_event.cpp +164 -0
  46. package/src/api/nim_node_subscribe_event.h +40 -0
  47. package/src/api/nim_node_subscribe_event_handler.cpp +118 -0
  48. package/src/api/nim_node_subscribe_event_handler.h +43 -0
  49. package/src/api/nim_node_super_team.cpp +760 -0
  50. package/src/api/nim_node_super_team.h +56 -0
  51. package/src/api/nim_node_super_team_event_handler.cpp +243 -0
  52. package/src/api/nim_node_super_team_event_handler.h +99 -0
  53. package/src/api/nim_node_sysmsg.cpp +190 -0
  54. package/src/api/nim_node_sysmsg.h +44 -0
  55. package/src/api/nim_node_sysmsg_event_handler.cpp +102 -0
  56. package/src/api/nim_node_sysmsg_event_handler.h +38 -0
  57. package/src/api/nim_node_talk.cpp +343 -0
  58. package/src/api/nim_node_talk.h +42 -0
  59. package/src/api/nim_node_talk_event_handler.cpp +160 -0
  60. package/src/api/nim_node_talk_event_handler.h +43 -0
  61. package/src/api/nim_node_talk_ex.cpp +252 -0
  62. package/src/api/nim_node_talk_ex.h +68 -0
  63. package/src/api/nim_node_talk_ex_event_handler.cpp +319 -0
  64. package/src/api/nim_node_talk_ex_event_handler.h +184 -0
  65. package/src/api/nim_node_team.cpp +955 -0
  66. package/src/api/nim_node_team.h +64 -0
  67. package/src/api/nim_node_team_event_handler.cpp +248 -0
  68. package/src/api/nim_node_team_event_handler.h +86 -0
  69. package/src/api/nim_node_tool.cpp +129 -0
  70. package/src/api/nim_node_tool.h +40 -0
  71. package/src/api/nim_node_tool_event_handler.cpp +45 -0
  72. package/src/api/nim_node_tool_event_handler.h +32 -0
  73. package/src/api/nim_node_user.cpp +194 -0
  74. package/src/api/nim_node_user.h +44 -0
  75. package/src/api/nim_node_user_event_handler.cpp +126 -0
  76. package/src/api/nim_node_user_event_handler.h +42 -0
  77. package/src/helper/nim_node_client_helper.cpp +336 -0
  78. package/src/helper/nim_node_client_helper.h +32 -0
  79. package/src/helper/nim_node_friend_helper.cpp +181 -0
  80. package/src/helper/nim_node_friend_helper.h +30 -0
  81. package/src/helper/nim_node_global_helper.cpp +25 -0
  82. package/src/helper/nim_node_global_helper.h +26 -0
  83. package/src/helper/nim_node_msglog_helper.cpp +218 -0
  84. package/src/helper/nim_node_msglog_helper.h +38 -0
  85. package/src/helper/nim_node_nos_helper.cpp +106 -0
  86. package/src/helper/nim_node_nos_helper.h +33 -0
  87. package/src/helper/nim_node_online_session_helper.cpp +57 -0
  88. package/src/helper/nim_node_online_session_helper.h +28 -0
  89. package/src/helper/nim_node_session_helper.cpp +129 -0
  90. package/src/helper/nim_node_session_helper.h +40 -0
  91. package/src/helper/nim_node_signaling_helper.cpp +164 -0
  92. package/src/helper/nim_node_signaling_helper.h +48 -0
  93. package/src/helper/nim_node_subscribe_helper.cpp +174 -0
  94. package/src/helper/nim_node_subscribe_helper.h +67 -0
  95. package/src/helper/nim_node_super_team_helper.cpp +338 -0
  96. package/src/helper/nim_node_super_team_helper.h +32 -0
  97. package/src/helper/nim_node_sysmsg_helper.cpp +132 -0
  98. package/src/helper/nim_node_sysmsg_helper.h +28 -0
  99. package/src/helper/nim_node_talk_ex_helper.cpp +137 -0
  100. package/src/helper/nim_node_talk_ex_helper.h +57 -0
  101. package/src/helper/nim_node_talk_helper.cpp +332 -0
  102. package/src/helper/nim_node_talk_helper.h +58 -0
  103. package/src/helper/nim_node_team_helper.cpp +482 -0
  104. package/src/helper/nim_node_team_helper.h +50 -0
  105. package/src/helper/nim_node_tool_helper.cpp +30 -0
  106. package/src/helper/nim_node_tool_helper.h +25 -0
  107. package/src/helper/nim_node_user_helper.cpp +186 -0
  108. package/src/helper/nim_node_user_helper.h +28 -0
  109. package/src/nim_event_handler.cpp +22 -0
  110. package/src/nim_event_handler.h +28 -0
  111. package/src/nim_node_async_queue.cpp +19 -0
  112. package/src/nim_node_async_queue.h +146 -0
  113. package/src/nim_node_engine.cpp +67 -0
  114. package/src/nim_node_engine.h +5 -0
  115. package/src/nim_node_helper.cpp +297 -0
  116. package/src/nim_node_helper.h +261 -0
package/just-task.js CHANGED
@@ -107,20 +107,21 @@ task('install', () => {
107
107
  logger.info('[install] Skip downlaod prebuilt libraries.')
108
108
  return
109
109
  }
110
- let target = '5.0.8'
111
- let runtime = 'electron'
110
+ let target = process.env.npm_config_target
111
+ let runtime = process.env.npm_config_runtime
112
112
  const targetPlatform = process.env.npm_config_target_platform || process.platform
113
113
  const targetArch = process.env.npm_config_target_arch || process.arch
114
- const downloadUrl = process.env.npm_config_download_url
115
114
  const curPkgMeta = require(path.join(__dirname, 'package.json'))
116
115
  const rootPkgMeta = require(path.join(process.env.INIT_CWD, 'package.json'))
117
116
  logger.info('------------------ just install --------------------')
118
- if (rootPkgMeta.devDependencies && rootPkgMeta.devDependencies.electron) {
119
- // v13.1.2 => 13.1.2, remove prefix 'v'
120
- target = rootPkgMeta.devDependencies.electron.replace(/^.*?(\d+.+\d).*/, '$1')
121
- } else {
122
- target = process.version.match(/^v(\d+\.\d+)/)[1]
123
- runtime = 'node'
117
+ if (!target && !runtime) {
118
+ if (rootPkgMeta.devDependencies && rootPkgMeta.devDependencies.electron) {
119
+ // v13.1.2 => 13.1.2, remove prefix 'v'
120
+ target = rootPkgMeta.devDependencies.electron.replace(/^.*?(\d+.+\d).*/, '$1')
121
+ } else {
122
+ target = process.version.match(/^v(\d+\.\d+)/)[1]
123
+ runtime = 'node'
124
+ }
124
125
  }
125
126
  // 13.1.2 => 13.1, match major.minor only
126
127
  const nodeAbi = `${runtime}-v${target.replace(/^(\d+.+?\d+).*/, '$1')}`
@@ -147,12 +148,16 @@ task('install', () => {
147
148
  const cachePath = path.join(__dirname, 'nim_sdk')
148
149
  const temporaryPath = path.join(__dirname, 'temporary')
149
150
  fetchWrapper({
151
+ platform: targetPlatform,
152
+ arch: targetArch,
150
153
  fetchUrl: nativeUrl,
151
154
  temporaryPath,
152
155
  extractPath: cachePath
153
156
  })
154
157
  .then(() => {
155
158
  return buildWrapper({
159
+ platform: targetPlatform,
160
+ arch: targetArch,
156
161
  sourcePath: cachePath
157
162
  })
158
163
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-nim",
3
- "version": "7.8.13-rc.3",
3
+ "version": "7.8.13-rc.5",
4
4
  "description": "NetEase IM nodejs wrapper based on NetEase IM C++ SDK",
5
5
  "main": "js/nim.js",
6
6
  "types": "types/nim.d.ts",
@@ -45,6 +45,7 @@
45
45
  "js",
46
46
  "scripts",
47
47
  "just-task.js",
48
- "binding.gyp"
48
+ "binding.gyp",
49
+ "src"
49
50
  ]
50
51
  }
@@ -0,0 +1,282 @@
1
+ #include "nim_node_client.h"
2
+ #include <node_object_wrap.h>
3
+ #include "../helper/nim_node_client_helper.h"
4
+ #include "nim_cpp_wrapper/api/nim_cpp_client.h"
5
+ #include "nim_node_client_event_handler.h"
6
+ #include "nim_node_helper.h"
7
+
8
+ namespace nim_node {
9
+ DEFINE_CLASS(Client);
10
+
11
+ Client::Client(Isolate* isolate) {
12
+ isolate_ = isolate;
13
+ }
14
+ Client::~Client() {}
15
+ void Client::InitModule(Local<Object>& module) {
16
+ BEGIN_OBJECT_INIT(Client, New, 5)
17
+
18
+ SET_PROTOTYPE(Init)
19
+ SET_PROTOTYPE(GetSDKConfig)
20
+ SET_PROTOTYPE(CleanUp)
21
+ SET_PROTOTYPE(CleanUp2)
22
+ SET_PROTOTYPE(LoginCustomDataToJson)
23
+ SET_PROTOTYPE(Login)
24
+ SET_PROTOTYPE(GetLoginState)
25
+ SET_PROTOTYPE(Relogin)
26
+ SET_PROTOTYPE(Logout)
27
+ SET_PROTOTYPE(KickOtherClient)
28
+ SET_PROTOTYPE(RegReloginCb)
29
+ SET_PROTOTYPE(RegKickoutCb)
30
+ SET_PROTOTYPE(RegDisconnectCb)
31
+ SET_PROTOTYPE(RegMultispotLoginCb)
32
+ SET_PROTOTYPE(RegKickOtherClientCb)
33
+ SET_PROTOTYPE(RegSyncMultiportPushConfigCb)
34
+ SET_PROTOTYPE(SetMultiportPushConfigAsync)
35
+ SET_PROTOTYPE(GetMultiportPushConfigAsync)
36
+ SET_PROTOTYPE(GetSDKVersion)
37
+ SET_PROTOTYPE(GetServerCurrentTime)
38
+ SET_PROTOTYPE(GetCurrentUserAccount)
39
+ SET_PROTOTYPE(UnregClientCb)
40
+ END_OBJECT_INIT(Client)
41
+ }
42
+
43
+ void Client::New(const FunctionCallbackInfo<Value>& args) {
44
+ Isolate* isolate = args.GetIsolate();
45
+ if (args.IsConstructCall()) {
46
+ Client* client = new Client(isolate);
47
+ client->Wrap(args.This());
48
+ args.GetReturnValue().Set(args.This());
49
+ } else {
50
+ Local<Function> cons = Local<Function>::New(isolate, constructor);
51
+ Local<Context> context = isolate->GetCurrentContext();
52
+ Local<Object> instance = cons->NewInstance(context).ToLocalChecked();
53
+ args.GetReturnValue().Set(instance);
54
+ }
55
+ }
56
+
57
+ NIM_SDK_NODE_API_DEF(Client, Init) {
58
+ CHECK_API_FUNC(Client, 4)
59
+ UTF8String appkey, appdata_path, app_install_path;
60
+ auto status = napi_ok;
61
+ GET_ARGS_VALUE(isolate, 0, utf8string, appkey)
62
+ GET_ARGS_VALUE(isolate, 1, utf8string, appdata_path)
63
+ GET_ARGS_VALUE(isolate, 2, utf8string, app_install_path)
64
+ nim::SDKConfig config;
65
+ status = nim_client_config_obj_to_struct(isolate, args[3]->ToObject(isolate->GetCurrentContext()).ToLocalChecked(), config);
66
+ if (status != napi_ok) {
67
+ }
68
+ bool ret = nim::Client::Init(appkey.toUtf8String(), appdata_path.toUtf8String(), app_install_path.toUtf8String(), config);
69
+ args.GetReturnValue().Set(Integer::New(args.GetIsolate(), ret ? 1 : 0));
70
+ }
71
+
72
+ NIM_SDK_NODE_API_DEF(Client, GetSDKConfig) {
73
+ CHECK_API_FUNC(Client, 0)
74
+
75
+ nim::SDKConfig config = nim::Client::GetSDKConfig();
76
+ Local<Object> config_obj = Object::New(isolate);
77
+ nim_client_config_to_obj(isolate, config, config_obj);
78
+ args.GetReturnValue().Set(config_obj);
79
+ }
80
+ NIM_SDK_NODE_API_DEF(Client, CleanUp) {
81
+ CHECK_API_FUNC(Client, 1)
82
+
83
+ UTF8String ext;
84
+ auto status = napi_ok;
85
+ GET_ARGS_VALUE(isolate, 0, utf8string, ext)
86
+
87
+ nim::Client::Cleanup(ext.toUtf8String());
88
+ }
89
+ NIM_SDK_NODE_API_DEF(Client, CleanUp2) {
90
+ CHECK_API_FUNC(Client, 1)
91
+
92
+ UTF8String ext;
93
+ auto status = napi_ok;
94
+ GET_ARGS_VALUE(isolate, 0, utf8string, ext)
95
+
96
+ nim::Client::Cleanup2(ext.toUtf8String());
97
+ }
98
+ NIM_SDK_NODE_API_DEF(Client, LoginCustomDataToJson) {
99
+ CHECK_API_FUNC(Client, 1)
100
+
101
+ UTF8String custom_data;
102
+ auto status = napi_ok;
103
+ GET_ARGS_VALUE(isolate, 0, utf8string, custom_data)
104
+
105
+ utf8_string jsonValue;
106
+ nim::Client::LoginCustomDataToJson(custom_data.toUtf8String(), jsonValue);
107
+
108
+ args.GetReturnValue().Set(String::NewFromUtf8(isolate, jsonValue.c_str(), NewStringType::kInternalized).ToLocalChecked());
109
+ }
110
+ NIM_SDK_NODE_API_DEF(Client, Login) {
111
+ CHECK_API_FUNC(Client, 5)
112
+ UTF8String appkey, account, psw, exten;
113
+ auto status = napi_ok;
114
+ GET_ARGS_VALUE(isolate, 0, utf8string, appkey)
115
+ GET_ARGS_VALUE(isolate, 1, utf8string, account)
116
+ GET_ARGS_VALUE(isolate, 2, utf8string, psw)
117
+ GET_ARGS_VALUE(isolate, 4, utf8string, exten)
118
+ ASSEMBLE_BASE_CALLBACK(3);
119
+ auto callback = std::bind(&ClientEventHandler::OnLoginCallback, bcb, false, std::placeholders::_1);
120
+ bool ret = nim::Client::Login(appkey.toUtf8String(), account.toUtf8String(), psw.toUtf8String(), callback);
121
+
122
+ args.GetReturnValue().Set(Boolean::New(args.GetIsolate(), ret ? 200 : 0));
123
+ }
124
+ NIM_SDK_NODE_API_DEF(Client, GetLoginState) {
125
+ CHECK_API_FUNC(Client, 1)
126
+
127
+ UTF8String ext;
128
+ auto status = napi_ok;
129
+ GET_ARGS_VALUE(isolate, 0, utf8string, ext)
130
+
131
+ nim::NIMLoginState state = nim::Client::GetLoginState(ext.toUtf8String());
132
+ args.GetReturnValue().Set(Integer::NewFromUnsigned(isolate, (uint32_t)state));
133
+ }
134
+ NIM_SDK_NODE_API_DEF(Client, Relogin) {
135
+ CHECK_API_FUNC(Client, 1)
136
+
137
+ UTF8String ext;
138
+ auto status = napi_ok;
139
+ GET_ARGS_VALUE(isolate, 0, utf8string, ext)
140
+
141
+ nim::Client::Relogin(ext.toUtf8String());
142
+ }
143
+ NIM_SDK_NODE_API_DEF(Client, Logout) {
144
+ CHECK_API_FUNC(Client, 3)
145
+ uint32_t type;
146
+ UTF8String exten;
147
+ auto status = napi_ok;
148
+ GET_ARGS_VALUE(isolate, 0, uint32, type)
149
+ ASSEMBLE_BASE_CALLBACK(1)
150
+ GET_ARGS_VALUE(isolate, 2, utf8string, exten)
151
+
152
+ auto callback = std::bind(&ClientEventHandler::OnLogoutCallback, bcb, std::placeholders::_1);
153
+ nim::Client::Logout((nim::NIMLogoutType)(type), callback, exten.toUtf8String());
154
+ }
155
+ NIM_SDK_NODE_API_DEF(Client, KickOtherClient) {
156
+ CHECK_API_FUNC(Client, 1)
157
+
158
+ std::list<utf8_string> others;
159
+ auto status = napi_ok;
160
+ GET_ARGS_VALUE(isolate, 0, utf8string_list, others)
161
+
162
+ nim::Client::KickOtherClient(others);
163
+ }
164
+ NIM_SDK_NODE_API_DEF(Client, RegReloginCb) {
165
+ CHECK_API_FUNC(Client, 2)
166
+
167
+ UTF8String exten;
168
+ ASSEMBLE_REG_CALLBACK(0, ClientEventHandler, "OnReloginCallback")
169
+ auto status = napi_ok;
170
+ GET_ARGS_VALUE(isolate, 1, utf8string, exten)
171
+
172
+ auto callback = std::bind(&ClientEventHandler::OnLoginCallback, nullptr, true, std::placeholders::_1);
173
+ nim::Client::RegReloginCb(callback, exten.toUtf8String());
174
+ }
175
+ NIM_SDK_NODE_API_DEF(Client, RegKickoutCb) {
176
+ CHECK_API_FUNC(Client, 2)
177
+
178
+ UTF8String exten;
179
+ ASSEMBLE_REG_CALLBACK(0, ClientEventHandler, "OnKickoutCallback")
180
+ auto status = napi_ok;
181
+ GET_ARGS_VALUE(isolate, 1, utf8string, exten)
182
+
183
+ auto callback = std::bind(&ClientEventHandler::OnKickoutCallback, std::placeholders::_1);
184
+ nim::Client::RegKickoutCb(callback, exten.toUtf8String());
185
+ }
186
+ NIM_SDK_NODE_API_DEF(Client, RegDisconnectCb) {
187
+ CHECK_API_FUNC(Client, 2)
188
+
189
+ UTF8String exten;
190
+ ASSEMBLE_REG_CALLBACK(0, ClientEventHandler, "OnDisconnectCallback")
191
+ auto status = napi_ok;
192
+ GET_ARGS_VALUE(isolate, 1, utf8string, exten)
193
+
194
+ auto callback = std::bind(&ClientEventHandler::OnDisconnectCallback);
195
+ nim::Client::RegDisconnectCb(callback, exten.toUtf8String());
196
+ }
197
+ NIM_SDK_NODE_API_DEF(Client, RegMultispotLoginCb) {
198
+ CHECK_API_FUNC(Client, 2)
199
+
200
+ UTF8String exten;
201
+ ASSEMBLE_REG_CALLBACK(0, ClientEventHandler, "OnMultispotLoginCallback")
202
+ auto status = napi_ok;
203
+ GET_ARGS_VALUE(isolate, 1, utf8string, exten)
204
+
205
+ auto callback = std::bind(&ClientEventHandler::OnMultispotLoginCallback, std::placeholders::_1);
206
+ nim::Client::RegMultispotLoginCb(callback, exten.toUtf8String());
207
+ }
208
+ NIM_SDK_NODE_API_DEF(Client, RegKickOtherClientCb) {
209
+ CHECK_API_FUNC(Client, 2)
210
+
211
+ UTF8String exten;
212
+ ASSEMBLE_REG_CALLBACK(0, ClientEventHandler, "OnKickOtherClientCallback")
213
+ auto status = napi_ok;
214
+ GET_ARGS_VALUE(isolate, 1, utf8string, exten)
215
+
216
+ auto callback = std::bind(&ClientEventHandler::OnKickOtherClientCallback, std::placeholders::_1);
217
+ nim::Client::RegKickOtherClientCb(callback, exten.toUtf8String());
218
+ }
219
+ NIM_SDK_NODE_API_DEF(Client, RegSyncMultiportPushConfigCb) {
220
+ CHECK_API_FUNC(Client, 2)
221
+
222
+ UTF8String exten;
223
+ ASSEMBLE_REG_CALLBACK(0, ClientEventHandler, "OnSyncMultiportPushConfigCallback")
224
+ auto status = napi_ok;
225
+ GET_ARGS_VALUE(isolate, 1, utf8string, exten)
226
+
227
+ auto callback = std::bind(&ClientEventHandler::OnSyncMultiportPushConfigCallback, nullptr, std::placeholders::_1, std::placeholders::_2);
228
+ nim::Client::RegSyncMultiportPushConfigCb(callback, exten.toUtf8String());
229
+ }
230
+ NIM_SDK_NODE_API_DEF(Client, SetMultiportPushConfigAsync) {
231
+ CHECK_API_FUNC(Client, 3)
232
+ bool switch_on;
233
+ UTF8String exten;
234
+ auto status = napi_ok;
235
+ GET_ARGS_VALUE(isolate, 0, bool, switch_on)
236
+ ASSEMBLE_BASE_CALLBACK(1)
237
+ GET_ARGS_VALUE(isolate, 2, utf8string, exten)
238
+
239
+ auto callback = std::bind(&ClientEventHandler::OnSyncMultiportPushConfigCallback, bcb, std::placeholders::_1, std::placeholders::_2);
240
+ nim::Client::SetMultiportPushConfigAsync(switch_on, callback, exten.toUtf8String());
241
+ }
242
+ NIM_SDK_NODE_API_DEF(Client, GetMultiportPushConfigAsync) {
243
+ CHECK_API_FUNC(Client, 2)
244
+
245
+ UTF8String exten;
246
+ auto status = napi_ok;
247
+ GET_ARGS_VALUE(isolate, 1, utf8string, exten)
248
+ ASSEMBLE_BASE_CALLBACK(0)
249
+
250
+ auto callback = std::bind(&ClientEventHandler::OnSyncMultiportPushConfigCallback, bcb, std::placeholders::_1, std::placeholders::_2);
251
+ nim::Client::GetMultiportPushConfigAsync(callback, exten.toUtf8String());
252
+ }
253
+ NIM_SDK_NODE_API_DEF(Client, GetSDKVersion) {
254
+ CHECK_API_FUNC(Client, 0)
255
+
256
+ utf8_string version = nim::Client::GetSDKVersion();
257
+ args.GetReturnValue().Set(nim_napi_new_utf8string(args.GetIsolate(), version.c_str()));
258
+ }
259
+ NIM_SDK_NODE_API_DEF(Client, GetServerCurrentTime) {
260
+ CHECK_API_FUNC(Client, 2)
261
+
262
+ bool calc_local;
263
+ auto status = napi_ok;
264
+ GET_ARGS_VALUE(isolate, 1, bool, calc_local)
265
+ ASSEMBLE_BASE_CALLBACK(0)
266
+
267
+ auto callback =
268
+ std::bind(&ClientEventHandler::OnGetServerCurrentTimeCallback, bcb, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3);
269
+ nim::Client::GetServerCurrentTime(callback, calc_local);
270
+ }
271
+ NIM_SDK_NODE_API_DEF(Client, GetCurrentUserAccount) {
272
+ CHECK_API_FUNC(Client, 0)
273
+
274
+ auto accid = nim::Client::GetCurrentUserAccount();
275
+ args.GetReturnValue().Set(nim_napi_new_utf8string(args.GetIsolate(), accid.c_str()));
276
+ }
277
+ NIM_SDK_NODE_API_DEF(Client, UnregClientCb) {
278
+ CHECK_API_FUNC(Client, 0)
279
+ nim::Client::UnregClientCb();
280
+ }
281
+
282
+ } // namespace nim_node
@@ -0,0 +1,52 @@
1
+ #ifndef NIM_NODE_SDK_CLIENT_H
2
+ #define NIM_NODE_SDK_CLIENT_H
3
+
4
+ #include <node.h>
5
+ #include <node_object_wrap.h>
6
+ #include "nim_cpp_wrapper/helper/nim_client_helper.h"
7
+ #include "nim_node_helper.h"
8
+
9
+ namespace nim_node {
10
+ class Client : public node::ObjectWrap {
11
+ private:
12
+ /* data */
13
+ public:
14
+ static void New(const FunctionCallbackInfo<Value>& args);
15
+ static void InitModule(Local<Object>& module);
16
+
17
+ public:
18
+ NIM_SDK_NODE_API(Init);
19
+ NIM_SDK_NODE_API(GetSDKConfig);
20
+ NIM_SDK_NODE_API(CleanUp);
21
+ NIM_SDK_NODE_API(CleanUp2);
22
+ NIM_SDK_NODE_API(LoginCustomDataToJson);
23
+ NIM_SDK_NODE_API(Login);
24
+ NIM_SDK_NODE_API(GetLoginState);
25
+ NIM_SDK_NODE_API(Relogin);
26
+ NIM_SDK_NODE_API(Logout);
27
+ NIM_SDK_NODE_API(KickOtherClient);
28
+ NIM_SDK_NODE_API(RegReloginCb);
29
+ NIM_SDK_NODE_API(RegKickoutCb);
30
+ NIM_SDK_NODE_API(RegDisconnectCb);
31
+ NIM_SDK_NODE_API(RegMultispotLoginCb);
32
+ NIM_SDK_NODE_API(RegKickOtherClientCb);
33
+ NIM_SDK_NODE_API(RegSyncMultiportPushConfigCb);
34
+ NIM_SDK_NODE_API(SetMultiportPushConfigAsync);
35
+ NIM_SDK_NODE_API(GetMultiportPushConfigAsync);
36
+ NIM_SDK_NODE_API(GetSDKVersion);
37
+ NIM_SDK_NODE_API(GetServerCurrentTime);
38
+ NIM_SDK_NODE_API(GetCurrentUserAccount);
39
+ NIM_SDK_NODE_API(UnregClientCb);
40
+
41
+ protected:
42
+ Client(Isolate* isolate);
43
+ ~Client();
44
+
45
+ private:
46
+ DECLARE_CLASS;
47
+
48
+ Isolate* isolate_;
49
+ };
50
+ } // namespace nim_node
51
+
52
+ #endif // NIM_NODE_SDK_CLIENT_H
@@ -0,0 +1,269 @@
1
+ #include "nim_node_client_event_handler.h"
2
+ #include "../helper/nim_node_client_helper.h"
3
+ #include "nim_node_async_queue.h"
4
+ #include "nim_node_helper.h"
5
+ // #include "DbgHelp.h"
6
+ #include <sstream>
7
+
8
+ namespace nim_node {
9
+ // string TraceStack()
10
+ // {
11
+ // static const int MAX_STACK_FRAMES = 5;
12
+
13
+ // void *pStack[MAX_STACK_FRAMES];
14
+
15
+ // HANDLE process = GetCurrentProcess();
16
+ // SymInitialize(process, NULL, TRUE);
17
+ // WORD frames = CaptureStackBackTrace(0, MAX_STACK_FRAMES, pStack, NULL);
18
+
19
+ // std::ostringstream oss;
20
+ // oss << "stack traceback: " << std::endl;
21
+ // for (WORD i = 0; i < frames; ++i) {
22
+ // DWORD64 address = (DWORD64)(pStack[i]);
23
+
24
+ // DWORD64 displacementSym = 0;
25
+ // char buffer[sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR)];
26
+ // PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;
27
+ // pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
28
+ // pSymbol->MaxNameLen = MAX_SYM_NAME;
29
+
30
+ // DWORD displacementLine = 0;
31
+ // IMAGEHLP_LINE64 line;
32
+ // //SymSetOptions(SYMOPT_LOAD_LINES);
33
+ // line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
34
+
35
+ // if (SymFromAddr(process, address, &displacementSym, pSymbol)
36
+ // && SymGetLineFromAddr64(process, address, &displacementLine,
37
+ // &line)) { oss << "\t" << pSymbol->Name << " at " <<
38
+ // line.FileName << ":" << line.LineNumber << "(0x" << std::hex <<
39
+ // pSymbol->Address << std::dec << ")"
40
+ // << std::endl;
41
+ // }
42
+ // else {
43
+ // oss << "\terror: " << GetLastError() << std::endl;
44
+ // }
45
+ // }
46
+ // return oss.str();
47
+ // }
48
+
49
+ void ClientEventHandler::OnLoginCallback(const BaseCallbackPtr& bcb,
50
+ bool relogin_cb,
51
+ const nim::LoginRes& login_res) {
52
+ node_async_call::async_call([=]() {
53
+ ClientEventHandler::GetInstance()->Node_OnLoginCallback(bcb, relogin_cb,
54
+ login_res);
55
+ });
56
+ }
57
+
58
+ void ClientEventHandler::Node_OnLoginCallback(const BaseCallbackPtr& bcb,
59
+ bool relogin_cb,
60
+ const nim::LoginRes& login_res) {
61
+ // printf("###################%s\r", TraceStack().c_str());
62
+ Isolate* isolate = Isolate::GetCurrent();
63
+ HandleScope scope(isolate);
64
+ const unsigned argc = 1;
65
+ Local<Object> res = Object::New(isolate);
66
+ nim_client_login_res_to_obj(isolate, login_res, res);
67
+ Local<Value> argv[argc] = {res};
68
+ if (bcb != nullptr) {
69
+ bcb->callback_.Get(isolate)->Call(isolate->GetCurrentContext(),
70
+ bcb->data_.Get(isolate), argc, argv);
71
+ } else {
72
+ std::string fun_name =
73
+ relogin_cb ? "OnReloginCallback" : "OnLoginCallback";
74
+ auto it = callbacks_.find(fun_name);
75
+ if (it != callbacks_.end()) {
76
+ it->second->callback_.Get(isolate)->Call(
77
+ isolate->GetCurrentContext(), it->second->data_.Get(isolate),
78
+ argc, argv);
79
+ }
80
+ }
81
+ }
82
+
83
+ void ClientEventHandler::OnFunctionCallback() {
84
+ node_async_call::async_call([]() {
85
+ ClientEventHandler::GetInstance()->Node_OnFunctionCallback();
86
+ });
87
+ }
88
+
89
+ void ClientEventHandler::Node_OnFunctionCallback() {
90
+ Isolate* isolate = Isolate::GetCurrent();
91
+ HandleScope scope(isolate);
92
+ auto it = callbacks_.find("OnFunctionCallback");
93
+ if (it != callbacks_.end()) {
94
+ it->second->callback_.Get(isolate)->Call(isolate->GetCurrentContext(),
95
+ it->second->data_.Get(isolate),
96
+ 0, nullptr);
97
+ }
98
+ }
99
+
100
+ void ClientEventHandler::OnLogoutCallback(const BaseCallbackPtr& bcb,
101
+ nim::NIMResCode rescode) {
102
+ node_async_call::async_call([=]() {
103
+ ClientEventHandler::GetInstance()->Node_OnLogoutCallback(bcb, rescode);
104
+ });
105
+ }
106
+
107
+ void ClientEventHandler::Node_OnLogoutCallback(const BaseCallbackPtr& bcb,
108
+ nim::NIMResCode rescode) {
109
+ Isolate* isolate = Isolate::GetCurrent();
110
+ HandleScope scope(isolate);
111
+ const unsigned argc = 1;
112
+ Local<Value> argv[argc] = {Integer::New(isolate, rescode)};
113
+ bcb->callback_.Get(isolate)->Call(isolate->GetCurrentContext(),
114
+ bcb->data_.Get(isolate), argc, argv);
115
+ }
116
+
117
+ void ClientEventHandler::OnKickoutCallback(const nim::KickoutRes& res) {
118
+ node_async_call::async_call([=]() {
119
+ ClientEventHandler::GetInstance()->Node_OnKickoutCallback(res);
120
+ });
121
+ }
122
+ void ClientEventHandler::OnDisconnectCallback() {
123
+ node_async_call::async_call([]() {
124
+ ClientEventHandler::GetInstance()->Node_OnDisconnectCallback();
125
+ });
126
+ }
127
+ void ClientEventHandler::OnMultispotLoginCallback(
128
+ const nim::MultiSpotLoginRes& res) {
129
+ node_async_call::async_call([=]() {
130
+ ClientEventHandler::GetInstance()->Node_OnMultispotLoginCallback(res);
131
+ });
132
+ }
133
+ void ClientEventHandler::OnKickOtherClientCallback(
134
+ const nim::KickOtherRes& res) {
135
+ node_async_call::async_call([=]() {
136
+ ClientEventHandler::GetInstance()->Node_OnKickOtherClientCallback(res);
137
+ });
138
+ }
139
+ void ClientEventHandler::OnSyncMultiportPushConfigCallback(
140
+ const BaseCallbackPtr& bcb,
141
+ int rescode,
142
+ bool open) {
143
+ node_async_call::async_call([=]() {
144
+ ClientEventHandler::GetInstance()
145
+ ->Node_OnSyncMultiportPushConfigCallback(bcb, rescode, open);
146
+ });
147
+ }
148
+
149
+ void ClientEventHandler::Node_OnKickoutCallback(const nim::KickoutRes& res) {
150
+ Isolate* isolate = Isolate::GetCurrent();
151
+ HandleScope scope(isolate);
152
+ const unsigned argc = 1;
153
+ Local<Object> obj = Object::New(isolate);
154
+ nim_client_kickout_res_to_obj(isolate, res, obj);
155
+ Local<Value> argv[argc] = {obj};
156
+ auto it = callbacks_.find("OnKickoutCallback");
157
+ if (it != callbacks_.end()) {
158
+ it->second->callback_.Get(isolate)->Call(isolate->GetCurrentContext(),
159
+ it->second->data_.Get(isolate),
160
+ argc, argv);
161
+ }
162
+ }
163
+ void ClientEventHandler::Node_OnDisconnectCallback() {
164
+ Isolate* isolate = Isolate::GetCurrent();
165
+ HandleScope scope(isolate);
166
+ auto it = callbacks_.find("OnDisconnectCallback");
167
+ if (it != callbacks_.end()) {
168
+ it->second->callback_.Get(isolate)->Call(isolate->GetCurrentContext(),
169
+ it->second->data_.Get(isolate),
170
+ 0, nullptr);
171
+ }
172
+ }
173
+ void ClientEventHandler::Node_OnMultispotLoginCallback(
174
+ const nim::MultiSpotLoginRes& res) {
175
+ Isolate* isolate = Isolate::GetCurrent();
176
+ HandleScope scope(isolate);
177
+ const unsigned argc = 1;
178
+ Local<Object> obj = Object::New(isolate);
179
+ nim_client_multispot_res_to_obj(isolate, res, obj);
180
+ Local<Value> argv[argc] = {obj};
181
+ auto it = callbacks_.find("OnMultispotLoginCallback");
182
+ if (it != callbacks_.end()) {
183
+ it->second->callback_.Get(isolate)->Call(isolate->GetCurrentContext(),
184
+ it->second->data_.Get(isolate),
185
+ argc, argv);
186
+ }
187
+ }
188
+ void ClientEventHandler::Node_OnKickOtherClientCallback(
189
+ const nim::KickOtherRes& res) {
190
+ Isolate* isolate = Isolate::GetCurrent();
191
+ HandleScope scope(isolate);
192
+ const unsigned argc = 1;
193
+ Local<Object> obj = Object::New(isolate);
194
+ nim_client_kickother_res_to_obj(isolate, res, obj);
195
+ Local<Value> argv[argc] = {obj};
196
+ auto it = callbacks_.find("OnKickOtherClientCallback");
197
+ if (it != callbacks_.end()) {
198
+ it->second->callback_.Get(isolate)->Call(isolate->GetCurrentContext(),
199
+ it->second->data_.Get(isolate),
200
+ argc, argv);
201
+ }
202
+ }
203
+ void ClientEventHandler::Node_OnSyncMultiportPushConfigCallback(
204
+ const BaseCallbackPtr& bcb,
205
+ int rescode,
206
+ bool open) {
207
+ Isolate* isolate = Isolate::GetCurrent();
208
+ HandleScope scope(isolate);
209
+ const unsigned argc = 2;
210
+ Local<Value> argv[argc] = {nim_napi_new_int32(isolate, rescode),
211
+ nim_napi_new_bool(isolate, open)};
212
+ if (bcb == nullptr) {
213
+ auto it = callbacks_.find("OnSyncMultiportPushConfigCallback");
214
+ if (it != callbacks_.end()) {
215
+ it->second->callback_.Get(isolate)->Call(
216
+ isolate->GetCurrentContext(), it->second->data_.Get(isolate), 2,
217
+ argv);
218
+ }
219
+ } else {
220
+ bcb->callback_.Get(isolate)->Call(isolate->GetCurrentContext(),
221
+ bcb->data_.Get(isolate), argc, argv);
222
+ }
223
+ }
224
+
225
+ void ClientEventHandler::OnGetServerCurrentTimeCallback(
226
+ const BaseCallbackPtr& bcb,
227
+ int rescode,
228
+ bool calc_local,
229
+ uint64_t time) {
230
+ node_async_call::async_call([=]() {
231
+ ClientEventHandler::GetInstance()->Node_OnGetServerCurrentTimeCallback(
232
+ bcb, rescode, calc_local, time);
233
+ });
234
+ }
235
+
236
+ void ClientEventHandler::Node_OnGetServerCurrentTimeCallback(
237
+ const BaseCallbackPtr& bcb,
238
+ int rescode,
239
+ bool calc_local,
240
+ uint64_t time) {
241
+ Isolate* isolate = Isolate::GetCurrent();
242
+ HandleScope scope(isolate);
243
+ const unsigned argc = 3;
244
+ Local<Value> argv[argc] = {nim_napi_new_int32(isolate, rescode),
245
+ nim_napi_new_bool(isolate, calc_local),
246
+ nim_napi_new_uint64(isolate, time)};
247
+ bcb->callback_.Get(isolate)->Call(isolate->GetCurrentContext(),
248
+ bcb->data_.Get(isolate), argc, argv);
249
+ }
250
+ void ClientEventHandler::OnReloginRequestTokenCb(const BaseCallbackPtr& bcb,
251
+ std::string* res) {
252
+ std::string temp = *res;
253
+ node_async_call::async_call([=]() {
254
+ ClientEventHandler::GetInstance()->Node_OnReloginRequestTokenCb(bcb,
255
+ temp);
256
+ });
257
+ }
258
+
259
+ void ClientEventHandler::Node_OnReloginRequestTokenCb(
260
+ const BaseCallbackPtr& bcb,
261
+ std::string res) {
262
+ Isolate* isolate = Isolate::GetCurrent();
263
+ HandleScope scope(isolate);
264
+ const unsigned argc = 1;
265
+ Local<Value> argv[argc] = {nim_napi_new_utf8string(isolate, res.c_str())};
266
+ bcb->callback_.Get(isolate)->Call(isolate->GetCurrentContext(),
267
+ bcb->data_.Get(isolate), argc, argv);
268
+ }
269
+ } // namespace nim_node