dev_gem
cpdl 2 months ago
parent d6c0efdd3e
commit b38fb66830
  1. 5
      .gitignore
  2. 2
      c/src/test.c
  3. 12
      go/constant.go
  4. 164
      go/export.go
  5. 2
      go/go.mod
  6. 4
      scripts/build_test.bat
  7. 66
      scripts/test.c
  8. 2
      shared/windows/build_lib.bat

5
.gitignore vendored

@ -31,4 +31,7 @@
*.out
*.app
*.vscode
*.vscode
.idea/
shared/windows/libopenimsdk.def
shared/windows/libopenimsdk.h

@ -3,7 +3,7 @@
#include <stdlib.h>
#include <unistd.h>
#include "../include/libopenimsdk.h"
#include "libopenimsdk.h"
typedef struct
{

@ -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
)

@ -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() {
}

@ -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

@ -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

@ -0,0 +1,66 @@
// gcc -o test.exe -lc_wrapper.dll test.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#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;
}

@ -0,0 +1,2 @@
gendef .\libopenimsdk.dll -a
dlltool --def libopenimsdk.def --output-lib libopenimsdk.lib
Loading…
Cancel
Save