diff --git a/c_wrapper/constant.go b/c_wrapper/constant.go index e3fe025..cdb4e68 100644 --- a/c_wrapper/constant.go +++ b/c_wrapper/constant.go @@ -19,3 +19,74 @@ const ( KICKED_OFFLINE USER_TOKEN_EXPIRED ) +const ( + JOINED_GROUP_ADDED = iota + JOINED_GROUP_DELETED + GROUP_MEMBER_ADDED + GROUP_MEMBER_DELETED + GROUP_APPLICATION_ADDED + GROUP_APPLICATION_DELETED + GROUP_INFO_CHANGED + GROUP_DISMISSED + GROUP_MEMBER_INFO_CHANGED + GROUP_APPLICATION_ACCEPTED + GROUP_APPLICATION_REJECTED +) +const ( + FRIEND_APPLICATION_ADDED = iota + FRIEND_APPLICATION_DELETED + FRIEND_APPLICATION_ACCEPTED + FRIEND_APPLICATION_REJECTED + FRIEND_ADDED + FRIEND_DELETED + FRIEND_INFO_CHANGED + BLACK_ADDED + BLACK_DELETED +) + +const ( + SYNC_SERVER_START = iota + SYNC_SERVER_FINISH + SYNC_SERVER_PROGRESS + SYNC_SERVER_FAILED + NEW_CONVERSATION + CONVERSATION_CHANGED + TOTAL_UNREAD_MESSAGE_COUNT_CHANGED +) + +const ( + RECV_NEW_MESSAGE = iota + RECV_C2C_READ_RECEIPT + RECV_GROUP_READ_RECEIPT + NEW_RECV_MESSAGE_REVOKED + RECV_MESSAGE_EXTENSIONS_CHANGED + RECV_MESSAGE_EXTENSIONS_DELETED + RECV_MESSAGE_EXTENSIONS_ADDED + RECV_OFFLINE_NEW_MESSAGE + MSG_DELETED +) +const ( + RECV_NEW_MESSAGES = iota + RECV_OFFLINE_NEW_MESSAGES +) +const ( + SELF_INFO_UPDATED = iota + USER_STATUS_CHANGED +) +const ( + RECV_CUSTOM_BUSINESS_MESSAGE = iota +) +const ( + MESSAGE_KV_INFO_CHANGED = iota +) + +const ( + UPLOAD_FILE_CALLBACK_OPEN = iota + UPLOAD_FILE_CALLBACK_PART_SIZE + UPLOAD_FILE_CALLBACK_HASH_PART_PROGRESS + UPLOAD_FILE_CALLBACK_HASH_PART_COMPLETE + UPLOAD_FILE_CALLBACK_UPLOAD_ID + UPLOAD_FILE_CALLBACK_UPLOAD_PART_COMPLETE + UPLOAD_FILE_CALLBACK_UPLOAD_COMPLETE + UPLOAD_FILE_CALLBACK_COMPLETE +) diff --git a/c_wrapper/export.go b/c_wrapper/export.go index 34ef672..0f88193 100644 --- a/c_wrapper/export.go +++ b/c_wrapper/export.go @@ -19,6 +19,9 @@ type Base struct { ErrCode int32 `json:"errCode"` ErrMsg string `json:"errMsg"` } + +// =====================================================listener=============================================== + type ConnCallback struct { cCallback C.CB_I_S } @@ -49,6 +52,246 @@ func (c ConnCallback) OnUserTokenExpired() { C.Call_CB_I_S(c.cCallback, USER_TOKEN_EXPIRED, NO_DATA) } +type ConversationCallback struct { + cCallback C.CB_I_S +} + +func NewConversationCallback(cCallback C.CB_I_S) *ConversationCallback { + return &ConversationCallback{cCallback: cCallback} +} + +func (c ConversationCallback) OnSyncServerStart() { + C.Call_CB_I_S(c.cCallback, SYNC_SERVER_START, NO_DATA) +} + +func (c ConversationCallback) OnSyncServerFinish() { + C.Call_CB_I_S(c.cCallback, SYNC_SERVER_FINISH, NO_DATA) +} + +func (c ConversationCallback) OnSyncServerFailed() { + C.Call_CB_I_S(c.cCallback, SYNC_SERVER_FAILED, NO_DATA) +} + +func (c ConversationCallback) OnNewConversation(conversationList string) { + C.Call_CB_I_S(c.cCallback, NEW_CONVERSATION, C.CString(conversationList)) +} + +func (c ConversationCallback) OnConversationChanged(conversationList string) { + C.Call_CB_I_S(c.cCallback, CONVERSATION_CHANGED, C.CString(conversationList)) +} + +func (c ConversationCallback) OnTotalUnreadMessageCountChanged(totalUnreadCount int32) { + C.Call_CB_I_S(c.cCallback, TOTAL_UNREAD_MESSAGE_COUNT_CHANGED, C.CString(Int32ToString(totalUnreadCount))) +} + +type AdvancedMsgCallback struct { + cCallback C.CB_I_S +} + +func (a AdvancedMsgCallback) OnRecvNewMessage(message string) { + C.Call_CB_I_S(a.cCallback, RECV_NEW_MESSAGE, C.CString(message)) +} + +func (a AdvancedMsgCallback) OnRecvC2CReadReceipt(msgReceiptList string) { + C.Call_CB_I_S(a.cCallback, RECV_C2C_READ_RECEIPT, C.CString(msgReceiptList)) +} + +func (a AdvancedMsgCallback) OnRecvGroupReadReceipt(groupMsgReceiptList string) { + C.Call_CB_I_S(a.cCallback, RECV_GROUP_READ_RECEIPT, C.CString(groupMsgReceiptList)) +} + +func (a AdvancedMsgCallback) OnNewRecvMessageRevoked(messageRevoked string) { + C.Call_CB_I_S(a.cCallback, NEW_RECV_MESSAGE_REVOKED, C.CString(messageRevoked)) +} + +func (a AdvancedMsgCallback) OnRecvMessageExtensionsChanged(msgID string, reactionExtensionList string) { + m := make(map[string]string) + m["msgID"] = msgID + m["reactionExtensionList"] = reactionExtensionList + C.Call_CB_I_S(a.cCallback, RECV_MESSAGE_EXTENSIONS_CHANGED, C.CString(StructToJsonString(m))) +} + +func (a AdvancedMsgCallback) OnRecvMessageExtensionsDeleted(msgID string, reactionExtensionKeyList string) { + m := make(map[string]string) + m["msgID"] = msgID + m["reactionExtensionKeyList"] = reactionExtensionKeyList + C.Call_CB_I_S(a.cCallback, RECV_MESSAGE_EXTENSIONS_DELETED, C.CString(StructToJsonString(m))) +} + +func (a AdvancedMsgCallback) OnRecvMessageExtensionsAdded(msgID string, reactionExtensionList string) { + m := make(map[string]string) + m["msgID"] = msgID + m["reactionExtensionList"] = reactionExtensionList + C.Call_CB_I_S(a.cCallback, RECV_MESSAGE_EXTENSIONS_ADDED, C.CString(StructToJsonString(m))) +} + +func (a AdvancedMsgCallback) OnRecvOfflineNewMessage(message string) { + C.Call_CB_I_S(a.cCallback, RECV_OFFLINE_NEW_MESSAGE, C.CString(message)) +} + +func (a AdvancedMsgCallback) OnMsgDeleted(message string) { + C.Call_CB_I_S(a.cCallback, MSG_DELETED, C.CString(message)) +} + +func NewAdvancedMsgCallback(cCallback C.CB_I_S) *AdvancedMsgCallback { + return &AdvancedMsgCallback{cCallback: cCallback} +} + +type BatchMessageCallback struct { + cCallback C.CB_I_S +} + +func (b BatchMessageCallback) OnRecvNewMessages(messageList string) { + //TODO implement me + panic("implement me") +} + +func (b BatchMessageCallback) OnRecvOfflineNewMessages(messageList string) { + //TODO implement me + panic("implement me") +} + +func NewBatchMessageCallback(cCallback C.CB_I_S) *BatchMessageCallback { + return &BatchMessageCallback{cCallback: cCallback} +} + +type FriendCallback struct { + cCallback C.CB_I_S +} + +func (f FriendCallback) OnFriendApplicationAdded(friendApplication string) { + //TODO implement me + panic("implement me") +} + +func (f FriendCallback) OnFriendApplicationDeleted(friendApplication string) { + //TODO implement me + panic("implement me") +} + +func (f FriendCallback) OnFriendApplicationAccepted(friendApplication string) { + //TODO implement me + panic("implement me") +} + +func (f FriendCallback) OnFriendApplicationRejected(friendApplication string) { + //TODO implement me + panic("implement me") +} + +func (f FriendCallback) OnFriendAdded(friendInfo string) { + //TODO implement me + panic("implement me") +} + +func (f FriendCallback) OnFriendDeleted(friendInfo string) { + //TODO implement me + panic("implement me") +} + +func (f FriendCallback) OnFriendInfoChanged(friendInfo string) { + //TODO implement me + panic("implement me") +} + +func (f FriendCallback) OnBlackAdded(blackInfo string) { + //TODO implement me + panic("implement me") +} + +func (f FriendCallback) OnBlackDeleted(blackInfo string) { + //TODO implement me + panic("implement me") +} + +func NewFriendCallback(cCallback C.CB_I_S) *FriendCallback { + return &FriendCallback{cCallback: cCallback} +} + +type GroupCallback struct { + cCallback C.CB_I_S +} + +func NewGroupCallback(cCallback C.CB_I_S) *GroupCallback { + return &GroupCallback{cCallback: cCallback} +} + +func (g GroupCallback) OnJoinedGroupAdded(groupInfo string) { + C.Call_CB_I_S(g.cCallback, JOINED_GROUP_ADDED, C.CString(groupInfo)) + +} + +func (g GroupCallback) OnJoinedGroupDeleted(groupInfo string) { + C.Call_CB_I_S(g.cCallback, JOINED_GROUP_DELETED, C.CString(groupInfo)) +} + +func (g GroupCallback) OnGroupMemberAdded(groupMemberInfo string) { + C.Call_CB_I_S(g.cCallback, GROUP_MEMBER_ADDED, C.CString(groupMemberInfo)) +} + +func (g GroupCallback) OnGroupMemberDeleted(groupMemberInfo string) { + C.Call_CB_I_S(g.cCallback, GROUP_MEMBER_DELETED, C.CString(groupMemberInfo)) +} + +func (g GroupCallback) OnGroupApplicationAdded(groupApplication string) { + C.Call_CB_I_S(g.cCallback, GROUP_APPLICATION_ADDED, C.CString(groupApplication)) +} + +func (g GroupCallback) OnGroupApplicationDeleted(groupApplication string) { + C.Call_CB_I_S(g.cCallback, GROUP_APPLICATION_DELETED, C.CString(groupApplication)) +} + +func (g GroupCallback) OnGroupInfoChanged(groupInfo string) { + C.Call_CB_I_S(g.cCallback, GROUP_INFO_CHANGED, C.CString(groupInfo)) +} + +func (g GroupCallback) OnGroupDismissed(groupInfo string) { + C.Call_CB_I_S(g.cCallback, GROUP_DISMISSED, C.CString(groupInfo)) +} + +func (g GroupCallback) OnGroupMemberInfoChanged(groupMemberInfo string) { + C.Call_CB_I_S(g.cCallback, GROUP_MEMBER_INFO_CHANGED, C.CString(groupMemberInfo)) +} + +func (g GroupCallback) OnGroupApplicationAccepted(groupApplication string) { + C.Call_CB_I_S(g.cCallback, GROUP_APPLICATION_ACCEPTED, C.CString(groupApplication)) +} + +func (g GroupCallback) OnGroupApplicationRejected(groupApplication string) { + C.Call_CB_I_S(g.cCallback, GROUP_APPLICATION_REJECTED, C.CString(groupApplication)) +} + +type CustomBusinessCallback struct { + cCallback C.CB_I_S +} + +func (c CustomBusinessCallback) OnRecvCustomBusinessMessage(businessMessage string) { + //TODO implement me + panic("implement me") +} + +func NewCustomBusinessCallback(cCallback C.CB_I_S) *CustomBusinessCallback { + return &CustomBusinessCallback{cCallback: cCallback} +} + +type UserCallback struct { + cCallback C.CB_I_S +} + +func (u UserCallback) OnSelfInfoUpdated(userInfo string) { + //TODO implement me + panic("implement me") +} + +func (u UserCallback) OnUserStatusChanged(statusMap string) { + //TODO implement me + panic("implement me") +} + +func NewUserCallback(cCallback C.CB_I_S) *UserCallback { + return &UserCallback{cCallback: cCallback} +} + type SendMessageCallback struct { cCallback C.CB_S_I_S_S_I operationID *C.char @@ -87,6 +330,50 @@ func (b BaseCallback) OnSuccess(data string) { C.Call_CB_S_I_S_S(b.cCallback, b.operationID, NO_ERR, NO_ERR_MSG, C.CString(data)) } +// =====================================================global_callback=============================================== + +//export set_group_listener +func set_group_listener(cCallback C.CB_I_S) { + open_im_sdk.SetGroupListener(NewGroupCallback(cCallback)) +} + +//export set_conversation_listener +func set_conversation_listener(cCallback C.CB_I_S) { + open_im_sdk.SetConversationListener(NewConversationCallback(cCallback)) +} + +//export set_advanced_msg_listener +func set_advanced_msg_listener(cCallback C.CB_I_S) { + open_im_sdk.SetAdvancedMsgListener(NewAdvancedMsgCallback(cCallback)) +} + +//export set_batch_msg_listener +func set_batch_msg_listener(cCallback C.CB_I_S) { + open_im_sdk.SetBatchMsgListener(NewBatchMessageCallback(cCallback)) +} + +//export set_user_listener +func set_user_listener(cCallback C.CB_I_S) { + open_im_sdk.SetUserListener(NewUserCallback(cCallback)) +} + +//export set_friend_listener +func set_friend_listener(cCallback C.CB_I_S) { + open_im_sdk.SetFriendListener(NewFriendCallback(cCallback)) +} + +//export set_custom_business_listener +func set_custom_business_listener(cCallback C.CB_I_S) { + open_im_sdk.SetCustomBusinessListener(NewCustomBusinessCallback(cCallback)) +} + +////export set_messsage_kv_listener +//func set_messsage_kv_listener(cCallback C.CB_I_S) { +// open_im_sdk.SetMessageKvInfoListener(NewMessageKVCallback(cCallback)) +//} + +// =====================================================conversation_msg=============================================== + //export init_sdk func init_sdk( cCallback C.CB_I_S, diff --git a/c_wrapper/tools.go b/c_wrapper/tools.go index 3b52f12..2e729ca 100644 --- a/c_wrapper/tools.go +++ b/c_wrapper/tools.go @@ -8,6 +8,7 @@ import "C" import ( "encoding/json" + "strconv" "unsafe" ) @@ -29,3 +30,6 @@ func FreeCString(strList ...*C.char) { C.free(unsafe.Pointer(str)) } } +func Int32ToString(intValue int32) string { + return strconv.Itoa(int(intValue)) +}