From b38fb668305f7504f8dc8ce777beaf258ba54c26 Mon Sep 17 00:00:00 2001 From: cpdl Date: Tue, 6 May 2025 17:22:46 +0800 Subject: [PATCH] no message --- .gitignore | 5 +- c/src/test.c | 2 +- go/constant.go | 12 +++ go/export.go | 164 +++++++++++++++++++++++++++++++++-- go/go.mod | 2 +- scripts/build_test.bat | 4 +- scripts/test.c | 66 ++++++++++++++ shared/windows/build_lib.bat | 2 + 8 files changed, 246 insertions(+), 11 deletions(-) create mode 100644 scripts/test.c create mode 100644 shared/windows/build_lib.bat diff --git a/.gitignore b/.gitignore index 4e0f79b..6eda776 100644 --- a/.gitignore +++ b/.gitignore @@ -31,4 +31,7 @@ *.out *.app -*.vscode \ No newline at end of file +*.vscode +.idea/ +shared/windows/libopenimsdk.def +shared/windows/libopenimsdk.h diff --git a/c/src/test.c b/c/src/test.c index fa7aa0d..fb05b83 100644 --- a/c/src/test.c +++ b/c/src/test.c @@ -3,7 +3,7 @@ #include #include -#include "../include/libopenimsdk.h" +#include "libopenimsdk.h" typedef struct { diff --git a/go/constant.go b/go/constant.go index ae3f77e..7afe1a2 100644 --- a/go/constant.go +++ b/go/constant.go @@ -75,8 +75,20 @@ const ( COMPLETE CONVERSATION_USER_INPUT_STATUS_CHANGED RECV_ONLINE_ONLY_MESSAGE + NEW_RECV_MESSAGE_EDIT USER_TOKEN_INVALID ON_PROGRESS + JOINED_CHANNEL_ADDED + JOINED_CHANNEL_DELETED + CHANNEL_MEMBER_ADDED + CHANNEL_MEMBER_DELETED + CHANNEL_APPLICATION_ADDED + CHANNEL_APPLICATION_DELETED + CHANNEL_INFO_CHANGED + CHANNEL_DISMISSED + CHANNEL_MEMBER_INFO_CHANGED + CHANNEL_APPLICATION_ACCEPTED + CHANNEL_APPLICATION_REJECTED ) diff --git a/go/export.go b/go/export.go index f02236d..4ce8441 100644 --- a/go/export.go +++ b/go/export.go @@ -174,6 +174,10 @@ func (a AdvancedMsgCallback) OnRecvOnlineOnlyMessage(message string) { C.Call_CB_I_S(a.cCallback, RECV_ONLINE_ONLY_MESSAGE, C.CString(message)) } +func (a AdvancedMsgCallback) OnNewRecvMessageEdited(message string) { + C.Call_CB_I_S(a.cCallback, NEW_RECV_MESSAGE_EDIT, C.CString(message)) +} + type BatchMessageCallback struct { cCallback C.CB_I_S } @@ -286,6 +290,58 @@ func (g GroupCallback) OnGroupApplicationRejected(groupApplication string) { C.Call_CB_I_S(g.cCallback, GROUP_APPLICATION_REJECTED, C.CString(groupApplication)) } +type ChannelCallback struct { + cCallback C.CB_I_S +} + +func NewChannelCallback(cCallback C.CB_I_S) *ChannelCallback { + return &ChannelCallback{cCallback: cCallback} +} + +func (g ChannelCallback) OnJoinedChannelAdded(channelInfo string) { + C.Call_CB_I_S(g.cCallback, JOINED_CHANNEL_ADDED, C.CString(channelInfo)) +} + +func (g ChannelCallback) OnJoinedChannelDeleted(channelInfo string) { + C.Call_CB_I_S(g.cCallback, JOINED_CHANNEL_DELETED, C.CString(channelInfo)) +} + +func (g ChannelCallback) OnChannelMemberAdded(channelMemberInfo string) { + C.Call_CB_I_S(g.cCallback, CHANNEL_MEMBER_ADDED, C.CString(channelMemberInfo)) +} + +func (g ChannelCallback) OnChannelMemberDeleted(channelMemberInfo string) { + C.Call_CB_I_S(g.cCallback, CHANNEL_MEMBER_DELETED, C.CString(channelMemberInfo)) +} + +func (g ChannelCallback) OnChannelApplicationAdded(channelApplication string) { + C.Call_CB_I_S(g.cCallback, CHANNEL_APPLICATION_ADDED, C.CString(channelApplication)) +} + +func (g ChannelCallback) OnChannelApplicationDeleted(channelApplication string) { + C.Call_CB_I_S(g.cCallback, CHANNEL_APPLICATION_DELETED, C.CString(channelApplication)) +} + +func (g ChannelCallback) OnChannelInfoChanged(channelInfo string) { + C.Call_CB_I_S(g.cCallback, CHANNEL_INFO_CHANGED, C.CString(channelInfo)) +} + +func (g ChannelCallback) OnChannelDismissed(channelInfo string) { + C.Call_CB_I_S(g.cCallback, CHANNEL_DISMISSED, C.CString(channelInfo)) +} + +func (g ChannelCallback) OnChannelMemberInfoChanged(channelMemberInfo string) { + C.Call_CB_I_S(g.cCallback, CHANNEL_MEMBER_INFO_CHANGED, C.CString(channelMemberInfo)) +} + +func (g ChannelCallback) OnChannelApplicationAccepted(channelApplication string) { + C.Call_CB_I_S(g.cCallback, CHANNEL_APPLICATION_ACCEPTED, C.CString(channelApplication)) +} + +func (g ChannelCallback) OnChannelApplicationRejected(channelApplication string) { + C.Call_CB_I_S(g.cCallback, CHANNEL_APPLICATION_REJECTED, C.CString(channelApplication)) +} + type CustomBusinessCallback struct { cCallback C.CB_I_S } @@ -440,6 +496,11 @@ func set_group_listener(cCallback C.CB_I_S) { open_im_sdk.SetGroupListener(NewGroupCallback(cCallback)) } +//export set_channel_listener +func set_channel_listener(cCallback C.CB_I_S) { + open_im_sdk.SetChannelListener(NewChannelCallback(cCallback)) +} + //export set_conversation_listener func set_conversation_listener(cCallback C.CB_I_S) { open_im_sdk.SetConversationListener(NewConversationCallback(cCallback)) @@ -673,6 +734,12 @@ func create_forward_message(operationID, m *C.char) *C.char { return C.CString(open_im_sdk.CreateForwardMessage(C.GoString(operationID), C.GoString(m))) } +//export fetch_surrounding_messages +func fetch_surrounding_messages(cCallback C.CB_S_I_S_S, operationID *C.char, message *C.char, before C.int, after C.int) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.FetchSurroundingMessages(baseCallback, C.GoString(operationID), C.GoString(message), int(before), int(after)) +} + //export get_all_conversation_list func get_all_conversation_list(cCallback C.CB_S_I_S_S, operationID *C.char) { baseCallback := NewBaseCallback(cCallback, operationID) @@ -732,17 +799,17 @@ func get_conversation_id_by_session_type(operationID *C.char, sourceID *C.char, } //export send_message -func send_message(cCallback C.CB_S_I_S_S_I, operationID, message, recvID, groupID, offlinePushInfo *C.char, isOnlineOnly C.int) { +func send_message(cCallback C.CB_S_I_S_S_I, operationID, message, recvID, groupID, channelID, offlinePushInfo *C.char, isOnlineOnly C.int) { sendMsgCallback := NewSendMessageCallback(cCallback, operationID) open_im_sdk.SendMessage(sendMsgCallback, C.GoString(operationID), C.GoString(message), C.GoString(recvID), - C.GoString(groupID), C.GoString(offlinePushInfo), parseBool(int(isOnlineOnly))) + C.GoString(groupID), C.GoString(channelID), C.GoString(offlinePushInfo), parseBool(int(isOnlineOnly))) } //export send_message_not_oss -func send_message_not_oss(cCallback C.CB_S_I_S_S_I, operationID, message, recvID, groupID, offlinePushInfo *C.char, isOnlineOnly C.int) { +func send_message_not_oss(cCallback C.CB_S_I_S_S_I, operationID, message, recvID, groupID, channelID, offlinePushInfo *C.char, isOnlineOnly C.int) { sendMsgCallback := NewSendMessageCallback(cCallback, operationID) open_im_sdk.SendMessageNotOss(sendMsgCallback, C.GoString(operationID), C.GoString(message), C.GoString(recvID), - C.GoString(groupID), C.GoString(offlinePushInfo), parseBool(int(isOnlineOnly))) + C.GoString(groupID), C.GoString(channelID), C.GoString(offlinePushInfo), parseBool(int(isOnlineOnly))) } //export find_message_list @@ -769,6 +836,12 @@ func revoke_message(cCallback C.CB_S_I_S_S, operationID *C.char, conversationID open_im_sdk.RevokeMessage(baseCallback, C.GoString(operationID), C.GoString(conversationID), C.GoString(clientMsgID)) } +//export edit_message +func edit_message(cCallback C.CB_S_I_S_S, operationID *C.char, conversationID *C.char, clientMsgID *C.char, message *C.char) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.EditMessage(baseCallback, C.GoString(operationID), C.GoString(conversationID), C.GoString(clientMsgID), C.GoString(message)) +} + //export typing_status_update func typing_status_update(cCallback C.CB_S_I_S_S, operationID *C.char, recvID *C.char, msgTip *C.char) { baseCallback := NewBaseCallback(cCallback, operationID) @@ -781,6 +854,12 @@ func mark_conversation_message_as_read(cCallback C.CB_S_I_S_S, operationID *C.ch open_im_sdk.MarkConversationMessageAsRead(baseCallback, C.GoString(operationID), C.GoString(conversationID)) } +//export mark_messages_as_read_by_msg_id +func mark_messages_as_read_by_msg_id(cCallback C.CB_S_I_S_S, operationID *C.char, conversationID *C.char, clientMsgIDs *C.char) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.MarkMessagesAsReadByMsgID(baseCallback, C.GoString(operationID), C.GoString(conversationID), C.GoString(clientMsgIDs)) +} + //export delete_message_from_local_storage func delete_message_from_local_storage(cCallback C.CB_S_I_S_S, operationID *C.char, conversationID *C.char, clientMsgID *C.char) { baseCallback := NewBaseCallback(cCallback, operationID) @@ -799,6 +878,18 @@ func hide_all_conversations(cCallback C.CB_S_I_S_S, operationID *C.char) { open_im_sdk.HideAllConversations(baseCallback, C.GoString(operationID)) } +//export search_conversation +func search_conversation(cCallback C.CB_S_I_S_S, operationID *C.char, searchParam *C.char) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.SearchConversation(baseCallback, C.GoString(operationID), C.GoString(searchParam)) +} + +//export search_conversations +func search_conversations(cCallback C.CB_S_I_S_S, operationID *C.char, searchParam *C.char) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.SearchConversation(baseCallback, C.GoString(operationID), C.GoString(searchParam)) +} + //export delete_all_msg_from_local_and_svr func delete_all_msg_from_local_and_svr(cCallback C.CB_S_I_S_S, operationID *C.char) { baseCallback := NewBaseCallback(cCallback, operationID) @@ -830,9 +921,9 @@ func insert_single_message_to_local_storage(cCallback C.CB_S_I_S_S, operationID } //export insert_group_message_to_local_storage -func insert_group_message_to_local_storage(cCallback C.CB_S_I_S_S, operationID *C.char, message *C.char, groupID *C.char, sendID *C.char) { +func insert_group_message_to_local_storage(cCallback C.CB_S_I_S_S, operationID *C.char, message *C.char, groupID *C.char, channelID *C.char, sendID *C.char) { baseCallback := NewBaseCallback(cCallback, operationID) - open_im_sdk.InsertGroupMessageToLocalStorage(baseCallback, C.GoString(operationID), C.GoString(message), C.GoString(groupID), C.GoString(sendID)) + open_im_sdk.InsertGroupMessageToLocalStorage(baseCallback, C.GoString(operationID), C.GoString(message), C.GoString(groupID), C.GoString(channelID), C.GoString(sendID)) } //export search_local_messages @@ -1254,6 +1345,67 @@ func logs(cCallback C.CB_S_I_S_S, operationID *C.char, logLevel C.int, file *C.c open_im_sdk.Logs(baseCallback, C.GoString(operationID), int(logLevel), C.GoString(file), int(line), C.GoString(msgs), C.GoString(err), C.GoString(keyAndValue)) } +// =====================================================channel=============================================== + +// JoinChannel joins a channel +// +//export join_channel +func join_channel(cCallback C.CB_S_I_S_S, operationID, cChannelID, cReqMsg *C.char, cJoinSource C.int, ex *C.char) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.JoinChannel(baseCallback, C.GoString(operationID), C.GoString(cChannelID), C.GoString(cReqMsg), + int32(cJoinSource), C.GoString(ex)) +} + +// QuitChannel quits a channel +// +//export quit_channel +func quit_channel(cCallback C.CB_S_I_S_S, operationID, cChannelID *C.char) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.QuitChannel(baseCallback, C.GoString(operationID), C.GoString(cChannelID)) +} + +// GetSpecifiedChannelsInfo retrieves the information of specified channels +// +//export get_specified_channels_info +func get_specified_channels_info(cCallback C.CB_S_I_S_S, operationID, cChannelIDList *C.char) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.GetSpecifiedChannelsInfo(baseCallback, C.GoString(operationID), C.GoString(cChannelIDList)) +} + +// GetChannelMemberList retrieves the list of channel members +// +//export get_channel_member_list +func get_channel_member_list(cCallback C.CB_S_I_S_S, operationID, cChannelID *C.char, cFilter, cOffset, cCount C.int) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.GetChannelMemberList(baseCallback, C.GoString(operationID), C.GoString(cChannelID), int32(cFilter), + int32(cOffset), int32(cCount)) +} + +// GetSpecifiedChannelMembersInfo retrieves the information of specified channel members +// +//export get_specified_channel_members_info +func get_specified_channel_members_info(cCallback C.CB_S_I_S_S, operationID, cChannelID, cUserIDList *C.char) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.GetSpecifiedChannelMembersInfo(baseCallback, C.GoString(operationID), C.GoString(cChannelID), + C.GoString(cUserIDList)) +} + +// IsJoinChannel checks if the user has joined a channel +// +//export is_join_channel +func is_join_channel(cCallback C.CB_S_I_S_S, operationID, cChannelID *C.char) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.IsJoinChannel(baseCallback, C.GoString(operationID), C.GoString(cChannelID)) +} + +// GetUsersInChannel retrieves the users in a channel +// +//export get_users_in_channel +func get_users_in_channel(cCallback C.CB_S_I_S_S, operationID, cChannelID, userIDList *C.char) { + baseCallback := NewBaseCallback(cCallback, operationID) + open_im_sdk.GetUsersInChannel(baseCallback, C.GoString(operationID), C.GoString(cChannelID), C.GoString(userIDList)) +} + func main() { } diff --git a/go/go.mod b/go/go.mod index f696b61..6664cc4 100644 --- a/go/go.mod +++ b/go/go.mod @@ -57,7 +57,7 @@ require ( nhooyr.io/websocket v1.8.17 // indirect ) -replace github.com/openimsdk/openim-sdk-core/v3 => ../../open-im-sdk-core +replace github.com/openimsdk/openim-sdk-core/v3 => ../../openim-sdk-core replace github.com/openimsdk/protocol => ../../open-im-protocol diff --git a/scripts/build_test.bat b/scripts/build_test.bat index c006194..3ef5ef1 100644 --- a/scripts/build_test.bat +++ b/scripts/build_test.bat @@ -1,3 +1,3 @@ -gcc -o test.exe -L. openimsdk.dll test.c +::gcc -o test.exe -L. openimsdk.dll test.c -::gcc -o test.exe -L ../../shared/windows -l libopenimsdk test.c +gcc -o test.exe -L ../../shared/windows -l libopenimsdk test.c diff --git a/scripts/test.c b/scripts/test.c new file mode 100644 index 0000000..1a280fd --- /dev/null +++ b/scripts/test.c @@ -0,0 +1,66 @@ +// gcc -o test.exe -lc_wrapper.dll test.c +#include +#include +#include + +#include "../shared/windows/libopenimsdk.h" + +typedef struct +{ + GoUint32 platformID; + char apiAddr[256]; + char wsAddr[256]; + char dataDir[256]; + GoUint32 logLevel; + GoUint8 isLogStandardOutput; + char logFilePath[256]; + GoUint8 isExternalExtensions; +} IMConfigC; + +void c_conn_callback(int event, char *data) +{ + printf("C c_conn_callback receive from Go callbck code: %d,data: %s\n", event,data); + +} +void c_conversation_callback(int event, char *data) +{ + printf("C c_conversation_callback receive from Go callbck code: %d,data: %s\n", event, data); +} +void c_message_callback(int event, char *data) +{ + printf("C c_message_callback receive from Go callbck code: %d,data: %s\n", event, data); +} +void c_base_callback(char * operationID ,int errCode,char * errMsg,char *data) +{ + printf("C c_base_callback operationID: %s receive from Go callbck code: %d, errMsg: %s, data: %s\n", operationID, errCode, errMsg, data); +} +int main(int argc, char **argv) +{ + char operationID[] = "12345"; +// char uid[] = "6959062403"; + char uid[] = "openIM123"; + // char token[] = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySUQiOiI2OTU5MDYyNDAzIiwiUGxhdGZvcm1JRCI6MywiZXhwIjoxNzAwNzIwOTg0LCJuYmYiOjE2OTI5NDQ2ODQsImlhdCI6MTY5Mjk0NDk4NH0.8otKTFrOCs8_ueV10rNOD-rzHrCT_EN0obKS9q79bIc"; + char token[] = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVc2VySUQiOiJvcGVuSU0xMjMiLCJQbGF0Zm9ybUlEIjo2LCJleHAiOjE3MDkxMjQ2NzYsIm5iZiI6MTcwMTM0ODM3NiwiaWF0IjoxNzAxMzQ4Njc2fQ.EqlV5TlpiElYhUOHCEcSrZOWi9ldrUMR1L4q0blvxs0"; + + char *jsonString = "{\"platformID\": 2, \"apiAddr\": \"http://14.29.168.56:10002\", \"wsAddr\":\"ws://14.29.168.56:10001\",\"dataDir\": \"./\", \"logLevel\": 5, \"isLogStandardOutput\": true, \"logFilePath\": \"./\", \"isExternalExtensions\": true}"; + + GoUint8 init_result; + init_result = init_sdk(c_conn_callback,operationID, jsonString); + printf("init_result: %u\n", init_result); + set_conversation_listener(c_conversation_callback); + set_advanced_msg_listener(c_message_callback); + login(c_base_callback, operationID, uid, token); + sleep(10); + // char text[] = "hello"; + char* loginUserID=get_login_user(); + + printf("return :%s\n",loginUserID); + char operationID1[] = "12345,create"; + char *message = create_text_message(operationID1, "hello"); + printf("return :%s\n",message); + char operationID2[] = "12345,get_all_conversation_list"; + get_all_conversation_list(c_base_callback, operationID2); + + sleep(1000000); + return 0; +} \ No newline at end of file diff --git a/shared/windows/build_lib.bat b/shared/windows/build_lib.bat new file mode 100644 index 0000000..a66beea --- /dev/null +++ b/shared/windows/build_lib.bat @@ -0,0 +1,2 @@ +gendef .\libopenimsdk.dll -a +dlltool --def libopenimsdk.def --output-lib libopenimsdk.lib