Skip to content

Commit 1714581

Browse files
authored
Use c-core's EE in the implementation (#17)
* Implemented C-Core EE integration in Chat logic
1 parent 0cbff68 commit 1714581

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+1897
-804
lines changed

.clang-format

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
AccessModifierOffset: 0
2+
AlignAfterOpenBracket: BlockIndent
3+
AlignConsecutiveMacros: false
4+
AlignConsecutiveAssignments: false
5+
AlignConsecutiveDeclarations: false
6+
AlignEscapedNewlines: DontAlign
7+
AlignOperands: false
8+
AlignTrailingComments: false
9+
AllowAllArgumentsOnNextLine: false
10+
AllowAllConstructorInitializersOnNextLine: false
11+
AllowAllParametersOfDeclarationOnNextLine: false
12+
AllowShortBlocksOnASingleLine: false
13+
AllowShortCaseLabelsOnASingleLine: false
14+
AllowShortFunctionsOnASingleLine: Empty
15+
AllowShortIfStatementsOnASingleLine: Never
16+
AllowShortLambdasOnASingleLine: All
17+
AllowShortLoopsOnASingleLine: false
18+
AlwaysBreakAfterReturnType: None
19+
AlwaysBreakBeforeMultilineStrings: true
20+
AlwaysBreakTemplateDeclarations: Yes
21+
BinPackArguments: false
22+
BinPackParameters: false
23+
BreakBeforeBinaryOperators: NonAssignment
24+
BreakBeforeBraces: Attach
25+
BreakBeforeTernaryOperators: true
26+
BreakConstructorInitializers: AfterColon
27+
BreakInheritanceList: AfterColon
28+
BreakStringLiterals: false
29+
ColumnLimit: 100
30+
CompactNamespaces: false
31+
ConstructorInitializerAllOnOneLineOrOnePerLine: true
32+
ConstructorInitializerIndentWidth: 4
33+
ContinuationIndentWidth: 4
34+
Cpp11BracedListStyle: true
35+
DerivePointerAlignment: false
36+
FixNamespaceComments: true
37+
IncludeBlocks: Regroup
38+
IncludeCategories:
39+
- Regex: '^<ext/.*\.h>'
40+
Priority: 2
41+
SortPriority: 0
42+
CaseSensitive: false
43+
- Regex: '^<.*\.h>'
44+
Priority: 1
45+
SortPriority: 0
46+
CaseSensitive: false
47+
- Regex: '^<.*'
48+
Priority: 2
49+
SortPriority: 0
50+
CaseSensitive: false
51+
- Regex: '.*'
52+
Priority: 3
53+
SortPriority: 0
54+
CaseSensitive: false
55+
IncludeIsMainRegex: '([-_](test|unittest))?$'
56+
IndentAccessModifiers: true
57+
IndentCaseLabels: true
58+
IndentPPDirectives: BeforeHash
59+
IndentWidth: 4
60+
IndentWrappedFunctionNames: true
61+
KeepEmptyLinesAtTheStartOfBlocks: false
62+
MaxEmptyLinesToKeep: 1
63+
NamespaceIndentation: All
64+
PointerAlignment: Left
65+
ReflowComments: false
66+
SortIncludes: true
67+
SortUsingDeclarations: true
68+
SpaceAfterCStyleCast: false
69+
SpaceAfterLogicalNot: false
70+
SpaceAfterTemplateKeyword: false
71+
SpaceBeforeAssignmentOperators: true
72+
SpaceBeforeCpp11BracedList: true
73+
SpaceBeforeCtorInitializerColon: true
74+
SpaceBeforeInheritanceColon: false
75+
SpaceBeforeParens: ControlStatements
76+
SpaceBeforeRangeBasedForLoopColon: true
77+
SpaceInEmptyParentheses: false
78+
SpacesBeforeTrailingComments: 2
79+
SpacesInAngles: false
80+
SpacesInCStyleCastParentheses: false
81+
SpacesInContainerLiterals: false
82+
SpacesInParentheses: false
83+
SpacesInSquareBrackets: false
84+
Standard: Cpp11
85+
TabWidth: 4
86+
UseTab: Never

CMakeLists.txt

+29-7
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ include(FetchContent)
4949

5050
set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
5151
set(USE_GRANT_TOKEN_API ON)
52+
set(USE_SYNC_API ON)
53+
set(USE_CALLBACK_API ON)
54+
set(USE_SET_DNS_SERVERS ON)
55+
set(USE_IPV6 ON)
56+
set(USE_SUBSCRIBE_EVENT_ENGINE ON)
5257

5358
if(WIN32 OR WIN64 OR MSVC)
5459
set(CUSTOM_BOOL_TYPE _Bool)
@@ -57,21 +62,21 @@ endif()
5762
FetchContent_Declare(
5863
pubnub
5964
GIT_REPOSITORY https://github.com/pubnub/c-core.git
60-
GIT_TAG master
65+
GIT_TAG feat/ee-listener-void
6166
GIT_SHALLOW TRUE
6267
GIT_PROGRESS ON
6368
SYSTEM
6469
)
6570

6671
FetchContent_MakeAvailable(pubnub)
6772

68-
6973
# TODO: this flag is okay until we release the Cpp-Chat as an independent library
7074
if(${ENABLE_C_ABI})
7175
target_compile_options(pubnub PUBLIC -DPUBNUB_SDK_VERSION_SUFFIX=\"/CA-Unity/0.3.1\")
7276
else()
7377
target_compile_options(pubnub PUBLIC -DPUBNUB_SDK_VERSION_SUFFIX=\"/CA-Unreal/0.2.5\")
7478
endif()
79+
target_compile_options(pubnub PUBLIC -DPUBNUB_NTF_RUNTIME_SELECTION -DPUBNUB_USE_SUBSCRIBE_EVENT_ENGINE=1 -DPUBNUB_USE_SUBSCRIBE_V2=1 -DPUBNUB_CALLBACK_API=1 -DPUBNUB_SYNC_API=1 -DPUBNUB_SET_DNS_SERVERS=1 -DPUBNUB_USE_IPV6=1)
7580

7681
FetchContent_Declare(
7782
json
@@ -147,7 +152,8 @@ set(APP_SOURCES
147152
${CMAKE_CURRENT_SOURCE_DIR}/src/application/dao/user_dao.cpp
148153
${CMAKE_CURRENT_SOURCE_DIR}/src/application/dao/message_dao.cpp
149154
${CMAKE_CURRENT_SOURCE_DIR}/src/application/dao/membership_dao.cpp
150-
${CMAKE_CURRENT_SOURCE_DIR}/src/application/dao/message_draft_dao.cpp)
155+
${CMAKE_CURRENT_SOURCE_DIR}/src/application/dao/message_draft_dao.cpp
156+
${CMAKE_CURRENT_SOURCE_DIR}/src/application/subscription.cpp)
151157

152158
set(SOURCES
153159
${CMAKE_CURRENT_SOURCE_DIR}/src/presentation/chat.cpp
@@ -159,6 +165,7 @@ set(SOURCES
159165
${CMAKE_CURRENT_SOURCE_DIR}/src/presentation/thread_channel.cpp
160166
${CMAKE_CURRENT_SOURCE_DIR}/src/presentation/thread_message.cpp
161167
${CMAKE_CURRENT_SOURCE_DIR}/src/presentation/access_manager.cpp
168+
${CMAKE_CURRENT_SOURCE_DIR}/src/presentation/callback_handle.cpp
162169
${CMAKE_CURRENT_SOURCE_DIR}/src/chat_helpers.cpp
163170
${CMAKE_CURRENT_SOURCE_DIR}/src/string.cpp
164171
)
@@ -177,7 +184,9 @@ if(${ENABLE_C_ABI})
177184
${CMAKE_CURRENT_SOURCE_DIR}/c_abi/src/c_membership.cpp
178185
${CMAKE_CURRENT_SOURCE_DIR}/c_abi/src/c_serialization.cpp
179186
${CMAKE_CURRENT_SOURCE_DIR}/c_abi/src/c_thread_channel.cpp
180-
${CMAKE_CURRENT_SOURCE_DIR}/c_abi/src/c_thread_message.cpp)
187+
${CMAKE_CURRENT_SOURCE_DIR}/c_abi/src/c_thread_message.cpp
188+
${CMAKE_CURRENT_SOURCE_DIR}/c_abi/src/c_callback_handle.cpp
189+
${CMAKE_CURRENT_SOURCE_DIR}/c_abi/src/c_response.cpp)
181190
endif()
182191

183192
set(SOURCES
@@ -186,26 +195,39 @@ set(SOURCES
186195
${DOMAIN_SOURCES}
187196
${APP_SOURCES})
188197

198+
189199
add_library(pubnub-chat SHARED ${SOURCES})
190200

191-
target_link_libraries(pubnub-chat PRIVATE pubnub)
201+
target_compile_options(pubnub-chat PRIVATE -DPUBNUB_NTF_RUNTIME_SELECTION -DPUBNUB_USE_SUBSCRIBE_EVENT_ENGINE=1 -DPUBNUB_USE_SUBSCRIBE_V2=1 -DPUBNUB_CALLBACK_API=1 -DPUBNUB_SYNC_API=1 -DPUBNUB_SET_DNS_SERVERS=1 -DPUBNUB_USE_IPV6=1)
202+
203+
target_link_libraries(pubnub-chat PRIVATE -lpthread pubnub)
192204

193205
# TODO: kept for debugging purposes - should be deleted before release
194206
add_executable(pubnub-chat-example example/main.cpp)
195-
target_link_libraries(pubnub-chat-example PUBLIC pubnub-chat)
207+
target_compile_options(pubnub-chat-example PRIVATE -DPUBNUB_NTF_RUNTIME_SELECTION -DPUBNUB_USE_SUBSCRIBE_EVENT_ENGINE=1 -DPUBNUB_USE_SUBSCRIBE_V2=1 -DPUBNUB_CALLBACK_API=1 -DPUBNUB_SYNC_API=1 -DPUBNUB_SET_DNS_SERVERS=1 -DPUBNUB_USE_IPV6=1)
208+
target_link_libraries(pubnub-chat-example PUBLIC -lpthread pubnub-chat)
196209

197210
if(${COMPILE_EXAMPLES})
198211
function(example name)
199212
add_executable(pubnub_${name} example/${name}.cpp)
213+
target_compile_options(pubnub_${name} PRIVATE -DPUBNUB_NTF_RUNTIME_SELECTION -DPUBNUB_USE_SUBSCRIBE_EVENT_ENGINE=1 -DPUBNUB_USE_SUBSCRIBE_V2=1 -DPUBNUB_CALLBACK_API=1 -DPUBNUB_SYNC_API=1 -DPUBNUB_SET_DNS_SERVERS=1 -DPUBNUB_USE_IPV6=1)
200214
target_link_libraries(pubnub_${name} PRIVATE pubnub-chat)
201215
endfunction()
202216

203-
example(message_draft)
217+
if(NOT ${ENABLE_C_ABI})
218+
# It uses different mechanism systems for callbacks
219+
# in C++ and C, so it's not possible to run this example
220+
example(message_draft)
221+
endif()
222+
example(hello_world)
204223
example(forward_message)
205224
example(report_user)
206225
example(thread_channel)
207226
example(message_reactions)
208227
example(delete_message)
228+
example(typing)
229+
example(entity_update)
230+
example(read_receipts)
209231
example(restrictions)
210232
endif()
211233

c_abi/include/c_callback_handle.hpp

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#ifndef PN_CHAT_C_CALLBACK_HANDLE_HPP
2+
#define PN_CHAT_C_CALLBACK_HANDLE_HPP
3+
4+
#include "c_errors.hpp"
5+
#include "callback_handle.hpp"
6+
7+
PN_CHAT_EXTERN PN_CHAT_EXPORT void pn_callback_handle_dispose(Pubnub::CallbackHandle* handle);
8+
9+
PN_CHAT_EXTERN PN_CHAT_EXPORT void pn_callback_handle_close(Pubnub::CallbackHandle* handle);
10+
11+
#endif // PN_CHAT_C_CALLBACK_HANDLE_HPP

c_abi/include/c_channel.hpp

+15-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef PN_CHAT_C_CHANNEL_H
22
#define PN_CHAT_C_CHANNEL_H
33

4+
#include "callback_handle.hpp"
45
#include "chat.hpp"
56
#include "message_draft.hpp"
67
#include "channel.hpp"
@@ -29,13 +30,13 @@ PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::Channel* pn_channel_update_dirty(
2930
char* channel_status,
3031
char* channel_type);
3132

32-
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_channel_connect(Pubnub::Channel* channel, char* result_messages);
33+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_channel_connect(Pubnub::Channel* channel);
3334

34-
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_channel_disconnect(Pubnub::Channel* channel, char* result_messages);
35+
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_channel_disconnect(Pubnub::Channel* channel);
3536

36-
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_channel_join(Pubnub::Channel* channel, const char* additional_params, char* result_messages);
37+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_channel_join(Pubnub::Channel* channel, const char* additional_params);
3738

38-
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_channel_leave(Pubnub::Channel* channel, char* result_messages);
39+
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_channel_leave(Pubnub::Channel* channel);
3940

4041
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_channel_delete_channel(Pubnub::Channel* channel);
4142

@@ -145,5 +146,15 @@ PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::MessageDraft* pn_channel_create_message_dr
145146
int user_limit,
146147
int channel_limit);
147148

149+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_channel_stream_updates(Pubnub::Channel* channel);
150+
151+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_channel_get_typing(Pubnub::Channel* channel);
152+
153+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_channel_stream_presence(Pubnub::Channel* channel);
154+
155+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_channel_stream_read_receipts(Pubnub::Channel* channel);
156+
157+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_channel_stream_message_reports(Pubnub::Channel* channel);
158+
148159
#endif // PN_CHAT_C_CHANNEL_H
149160

c_abi/include/c_chat.hpp

+2-8
Original file line numberDiff line numberDiff line change
@@ -139,11 +139,6 @@ PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_chat_delete_user(
139139
Pubnub::Chat* chat,
140140
const char* user_id);
141141

142-
// Hacky way to get the messages
143-
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_chat_get_updates(
144-
Pubnub::Chat* chat,
145-
char* messages_json);
146-
147142
PN_CHAT_EXTERN PN_CHAT_EXPORT void pn_clear_string(char* str);
148143

149144
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCTribool pn_chat_is_present(
@@ -165,11 +160,10 @@ PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_chat_get_channels(
165160
const char* prev,
166161
char* result);
167162

168-
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_chat_listen_for_events(
163+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_chat_listen_for_events(
169164
Pubnub::Chat* chat,
170165
const char* channel_id,
171-
Pubnub::pubnub_chat_event_type event_type,
172-
char* messages_json);
166+
Pubnub::pubnub_chat_event_type event_type);
173167

174168
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pin_message_to_channel(Pubnub::Chat* chat, Pubnub::Message* message, Pubnub::Channel* channel);
175169
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult unpin_message_from_channel(Pubnub::Chat* chat, Pubnub::Channel* channel);

c_abi/include/c_membership.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef PN_CHAT_C_MEMBERSHIP_H
22
#define PN_CHAT_C_MEMBERSHIP_H
33

4+
#include "callback_handle.hpp"
45
#include "chat.hpp"
56
#include "membership.hpp"
67
#include "user.hpp"
@@ -45,4 +46,6 @@ PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::Membership* pn_membership_update_with_base
4546
Pubnub::Membership* membership,
4647
Pubnub::Membership* base_membership);
4748

49+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_membership_stream_updates(Pubnub::Membership* membership);
50+
4851
#endif // PN_CHAT_C_MEMBERSHIP_H

c_abi/include/c_message.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef PN_CHAT_C_MESSAGE_H
22
#define PN_CHAT_C_MESSAGE_H
33

4+
#include "callback_handle.hpp"
45
#include "message.hpp"
56
#include "chat.hpp"
67
#include "helpers/export.hpp"
@@ -65,4 +66,6 @@ PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::Message* pn_message_quoted_message(Pubnub:
6566
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_message_text_links(Pubnub::Message* message, char* result);
6667

6768
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::Message* pn_message_restore(Pubnub::Message* message);
69+
70+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_message_stream_updates(Pubnub::Message* message);
6871
#endif // PN_CHAT_C_MESSAGE_H

c_abi/include/c_response.hpp

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#ifndef PN_CHAT_C_RESPONSE_HPP
2+
#define PN_CHAT_C_RESPONSE_HPP
3+
4+
#include "c_errors.hpp"
5+
#include "c_utils.hpp"
6+
#include "domain/quotes.hpp"
7+
#include "pubnub_chat/chat.hpp"
8+
9+
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_c_consume_response_buffer(Pubnub::Chat* chat, char* result);
10+
11+
PnCResult pn_c_append_to_response_buffer(const ChatService* chat, const char* data);
12+
13+
template <typename T>
14+
PnCResult pn_c_append_pointer_to_response_buffer(const ChatService* chat, Pubnub::String id, T* pointer) {
15+
auto id_string = Quotes::add(id);
16+
auto ptr_string = Quotes::add(to_ptr_string(pointer));
17+
auto data = "{" + id_string + ":" + ptr_string + "}";
18+
return pn_c_append_to_response_buffer(chat, data.c_str());
19+
}
20+
21+
#endif

c_abi/include/c_thread_message.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef PN_CHAT_C_THREAD_MESSAGE_H
22
#define PN_CHAT_C_THREAD_MESSAGE_H
33

4+
#include "callback_handle.hpp"
45
#include "chat.hpp"
56
#include "thread_channel.hpp"
67
#include "thread_message.hpp"
@@ -75,5 +76,7 @@ PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::Channel* pn_thread_message_pin_to_parent_c
7576

7677
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_thread_message_parent_channel_id(Pubnub::ThreadMessage* thread_message, char* result);
7778

79+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_thread_message_stream_updates(Pubnub::ThreadMessage* message);
80+
7881

7982
#endif // PN_CHAT_C_THREAD_MESSAGE_H

c_abi/include/c_user.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef PN_CHAT_C_USER_HPP
22
#define PN_CHAT_C_USER_HPP
33

4+
#include "callback_handle.hpp"
45
#include "channel.hpp"
56
#include "chat.hpp"
67
#include "user.hpp"
@@ -84,5 +85,7 @@ PN_CHAT_EXTERN PN_CHAT_EXPORT PnCTribool pn_user_active(Pubnub::User* user);
8485

8586
PN_CHAT_EXTERN PN_CHAT_EXPORT PnCResult pn_user_last_active_timestamp(Pubnub::User* user, char* result);
8687

88+
PN_CHAT_EXTERN PN_CHAT_EXPORT Pubnub::CallbackHandle* pn_user_stream_updates(Pubnub::User* user);
89+
8790

8891
#endif // PN_CHAT_C_USER_HPP

c_abi/include/c_utils.hpp

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#ifndef PN_CHAT_C_UTILS_HPP
2+
#define PN_CHAT_C_UTILS_HPP
3+
4+
#include <sstream>
5+
#include "string.hpp"
6+
7+
template <typename T>
8+
Pubnub::String to_ptr_string(T* ptr) {
9+
Pubnub::String result;
10+
result.reserve(18); //ptr str length
11+
12+
#ifdef _WIN32
13+
result += "0x";
14+
#endif
15+
16+
std::ostringstream ss;
17+
ss << static_cast<void*>(ptr);
18+
19+
result += ss.str();
20+
21+
return result;
22+
}
23+
24+
#endif

c_abi/src/c_callback_handle.cpp

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#include "c_callback_handle.hpp"
2+
3+
void pn_callback_handle_dispose(Pubnub::CallbackHandle* handle) {
4+
if (handle == nullptr) {
5+
return;
6+
}
7+
delete handle;
8+
}
9+
10+
void pn_callback_handle_close(Pubnub::CallbackHandle* handle) {
11+
handle->close();
12+
}
13+

0 commit comments

Comments
 (0)