@ -8,17 +8,43 @@
import Foundation
import OpenIMCore
public class MessageManager : NSObject {
public class MessageManager : BaseServiceManager {
private let KEY_ID : String = " id "
private let channel : FlutterMethodChannel
private let listeners : NSMutableDictionary = NSMutableDictionary ( capacity : 0 )
init ( channel : FlutterMethodChannel ) {
self . channel = channel
}
func addAdvancedMsgListener ( methodCall : FlutterMethodCall , result : FlutterResult ) {
public override func registerHandlers ( ) {
super . registerHandlers ( )
self [ " addAdvancedMsgListener " ] = addAdvancedMsgListener
self [ " removeAdvancedMsgListener " ] = removeAdvancedMsgListener
self [ " sendMessage " ] = sendMessage
self [ " getHistoryMessageList " ] = getHistoryMessageList
self [ " revokeMessage " ] = revokeMessage
self [ " deleteMessageFromLocalStorage " ] = deleteMessageFromLocalStorage
self [ " deleteMessages " ] = deleteMessages
self [ " insertSingleMessageToLocalStorage " ] = insertSingleMessageToLocalStorage
self [ " findMessages " ] = findMessages
self [ " markC2CMessageAsRead " ] = markC2CMessageAsRead
self [ " typingStatusUpdate " ] = typingStatusUpdate
self [ " createTextMessage " ] = createTextMessage
self [ " createTextAtMessage " ] = createTextAtMessage
self [ " createImageMessage " ] = createImageMessage
self [ " createImageMessageFromFullPath " ] = createImageMessageFromFullPath
self [ " createSoundMessage " ] = createSoundMessage
self [ " createSoundMessageFromFullPath " ] = createSoundMessageFromFullPath
self [ " createVideoMessage " ] = createVideoMessage
self [ " createVideoMessageFromFullPath " ] = createVideoMessageFromFullPath
self [ " createFileMessage " ] = createFileMessage
self [ " createMergerMessage " ] = createMergerMessage
self [ " createForwardMessage " ] = createForwardMessage
self [ " createLocationMessage " ] = createLocationMessage
self [ " createCustomMessage " ] = createCustomMessage
self [ " createQuoteMessage " ] = createQuoteMessage
self [ " createCardMessage " ] = createCardMessage
self [ " forceSyncMsg " ] = forceSyncMsg
}
func addAdvancedMsgListener ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let d = methodCall . arguments as ! NSDictionary
let key = d . value ( forKey : KEY_ID ) as ! String
if ! listeners . allKeys . contains ( where : { ( $0 as ! String ) . compare ( key ) = = . orderedSame } ) {
@ -29,9 +55,10 @@ public class MessageManager:NSObject{
Open_im_sdkAddAdvancedMsgListener ( lis )
print ( " =================add msg listener====== \n \( lis ) " ) ;
}
callBack ( result )
}
func removeAdvancedMsgListener ( methodCall : FlutterMethodCall , result : FlutterResult ) {
func removeAdvancedMsgListener ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let k = methodCall . arguments as ! NSDictionary
let s = k . value ( forKey : KEY_ID ) as ! String
if listeners . allKeys . contains ( where : { ( $0 as ! String ) . compare ( s ) = = . orderedSame } ) {
@ -39,6 +66,7 @@ public class MessageManager:NSObject{
listeners . removeObject ( forKey : s )
Open_im_sdkRemoveAdvancedMsgListener ( lis )
}
callBack ( result )
}
func sendMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
@ -46,87 +74,118 @@ public class MessageManager:NSObject{
sendMsgProgressListener . setCall ( methodCall : methodCall )
sendMsgProgressListener . setResult ( result : result )
print ( " ===============sendMessage=============== " )
Open_im_sdkSendMessage ( sendMsgProgressListener , CommonUtil . getSendMessageContent ( methodCall : methodCall ) , CommonUtil . getSendMessageReceiver ( methodCall : methodCall ) , CommonUtil . getSendMessageGroupId ( methodCall : methodCall ) , CommonUtil . getSendMessageOnlineOnly ( methodCall : methodCall ) )
Open_im_sdkSendMessage ( sendMsgProgressListener , methodCall [ jsonString : " message " ] , methodCall [ string : " receiver " ] ,
methodCall [ string : " groupID " ] , methodCall [ bool : " onlineUserOnly " ] )
}
func getHistoryMessageList ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkGetHistoryMessageList ( BaseImpl ( result : result ) , CommonUtil . getSDKJsonParam ( methodCall : methodCall ) )
Open_im_sdkGetHistoryMessageList ( BaseCallback ( result : result ) , methodCall . toJsonString ( ) )
}
func revokeMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkRevokeMessage ( BaseImpl ( result : result ) , CommonUtil . getSDKJsonParam ( methodCall : methodCall ) )
Open_im_sdkRevokeMessage ( BaseCallback ( result : result ) , methodCall . toJsonString ( ) )
}
func deleteMessageFromLocalStorage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkDeleteMessageFromLocalStorage ( BaseImpl ( result : result ) , CommonUtil . getSDKJsonParam ( methodCall : methodCall ) )
Open_im_sdkDeleteMessageFromLocalStorage ( BaseCallback ( result : result ) , methodCall . toJsonString ( ) )
}
// d e p r e c a t e d
func deleteMessages ( methodCall : FlutterMethodCall , result : FlutterResult ) {
}
func insertSingleMessageToLocalStorage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkInsertSingleMessageToLocalStorage ( BaseImpl ( result : result ) , CommonUtil . getSingleMessageContent ( methodCall : methodCall ) , CommonUtil . getSingleMessageUserid ( methodCall : methodCall ) , CommonUtil . getSingleMessageSender ( methodCall : methodCall ) )
Open_im_sdkInsertSingleMessageToLocalStorage ( BaseCallback ( result : result ) , methodCall [ jsonString : " message " ] ,
methodCall [ string : " userID " ] , methodCall [ string : " sender " ] )
}
func findMessages ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkFindMessages ( BaseImpl ( result : result ) , CommonUtil . getFindMessageIds ( methodCall : methodCall ) )
Open_im_sdkFindMessages ( BaseCallback ( result : result ) , methodCall [ jsonString : " messageIDList " ] )
}
func markSingleMessageHa sRead ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkMarkSingleMessageHasRead ( BaseImpl ( result : result ) , CommonUtil . getSingleMessageUserid ( methodCall : methodCall ) )
func markC2CMessageA sRead ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkMarkC2CMessageAsRead ( BaseCallback ( result : result ) , methodCall [ string : " userID " ] , methodCall [ jsonString : " messageIDList " ] )
}
func markGroupMessageHasRead ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkMarkGroupMessageHasRead ( BaseImpl ( result : result ) , CommonUtil . getGroupMessageGroupid ( methodCall : methodCall ) )
func typingStatusUpdate ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkTypingStatusUpdate ( methodCall [ string : " userID " ] , methodCall [ string : " typing " ] )
callBack ( result )
}
func createTextMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateTextMessage ( CommonUtil . getMessageText ( methodCall : methodCall ) )
DispatchQueue . main . async { result ( prama ) }
callBack ( result , Open_im_sdkCreateTextMessage ( methodCall [ string : " text " ] ) )
}
func createTextAtMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateTextAtMessage ( CommonUtil . getMessageText ( methodCall : methodCall ) , CommonUtil . getAtUserList ( methodCall : methodCall ) )
DispatchQueue . main . async { result ( prama ) }
callBack ( result , Open_im_sdkCreateTextAtMessage ( methodCall [ string : " text " ] , methodCall [ jsonString : " atUserList " ] ) )
}
func createImageMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateImageMessage ( CommonUtil . getImagePath ( methodCall : methodCall ) )
DispatchQueue . main . async { result ( prama ) }
callBack ( result , Open_im_sdkCreateImageMessage ( methodCall [ string : " imagePath " ] ) )
}
func createImageMessageFromFullPath ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
callBack ( result , Open_im_sdkCreateImageMessageFromFullPath ( methodCall [ string : " imagePath " ] ) )
}
func createSoundMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateSoundMessage ( CommonUtil . getSoundPath ( methodCall : methodCall ) , CommonUtil . getSoundDuration ( methodCall : methodCall ) )
DispatchQueue . main . async { result ( prama ) }
callBack ( result , Open_im_sdkCreateSoundMessage ( methodCall [ string : " soundPath " ] , methodCall [ int64 : " duration " ] ) )
}
func createSoundMessageFromFullPath ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
callBack ( result , Open_im_sdkCreateSoundMessageFromFullPath ( methodCall [ string : " soundPath " ] , methodCall [ int64 : " duration " ] ) )
}
func createVideoMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateVideoMessage ( CommonUtil . getVideoPath ( methodCall : methodCall ) , CommonUtil . getVideoType ( methodCall : methodCall ) , CommonUtil . getVideoDuration ( methodCall : methodCall ) , CommonUtil . getVideoSnapshotPath ( methodCall : methodCall ) )
DispatchQueue . main . async { result ( prama ) }
let prama = Open_im_sdkCreateVideoMessage ( methodCall [ string : " videoPath " ] , methodCall [ string : " videoType " ] ,
methodCall [ int64 : " duration " ] , methodCall [ string : " snapshotPath " ] )
callBack ( result , prama )
}
func createVideoMessageFromFullPath ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateVideoMessageFromFullPath ( methodCall [ string : " videoPath " ] , methodCall [ string : " videoType " ] ,
methodCall [ int64 : " duration " ] , methodCall [ string : " snapshotPath " ] )
callBack ( result , prama )
}
func createFileMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateFileMessage ( CommonUtil . getFilePath ( methodCall : methodCall ) , CommonUtil . getFileName ( methodCall : methodCall ) )
DispatchQueue . main . async { result ( prama ) }
callBack ( result , Open_im_sdkCreateFileMessage ( methodCall [ string : " filePath " ] , methodCall [ string : " fileName " ] ) )
}
func createMergerMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateMergerMessage ( CommonUtil . getMergerMessageList ( methodCall : methodCall ) , CommonUtil . getMergerMessageTitle ( methodCall : methodCall ) , CommonUtil . getSummaryList ( methodCall : methodCall ) )
DispatchQueue . main . async { result ( prama ) }
let prama = Open_im_sdkCreateMergerMessage ( methodCall [ jsonString : " messageList " ] , methodCall [ string : " title " ] ,
methodCall [ jsonString : " summaryList " ] )
callBack ( result , prama )
}
func createForwardMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateForwardMessage ( CommonUtil . getForwardMessage ( methodCall : methodCall ) )
DispatchQueue . main . async { result ( prama ) }
callBack ( result , Open_im_sdkCreateForwardMessage ( methodCall [ jsonString : " message " ] ) )
}
func createLocationMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateLocationMessage ( methodCall [ string : " description " ] ,
methodCall [ double : " longitude " ] , methodCall [ double : " latitude " ] )
callBack ( result , prama )
}
func createCustomMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateCustomMessage ( methodCall [ string : " data " ] ,
methodCall [ string : " extension " ] , methodCall [ string : " description " ] )
callBack ( result , prama )
}
func getTotalUnreadMsgCount ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkGetTotalUnreadMsgCount ( BaseImpl ( result : result ) )
func createQuoteMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateQuoteMessage ( methodCall [ string : " quoteText " ] , methodCall [ jsonString : " quoteMessage " ] )
callBack ( result , prama )
}
func createCardMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
callBack ( result , Open_im_sdkCreateCardMessage ( methodCall [ jsonString : " cardMessage " ] ) )
}
func forceSyncMsg ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkForceSyncMsg ( )
callBack ( result )
}
public class SendMsgProgressListener : NSObject , Open_im_sdkSendMsgCallBackProtocol {
@ -154,8 +213,11 @@ public class SendMsgProgressListener:NSObject, Open_im_sdkSendMsgCallBackProtoco
}
public func onProgress ( _ progress : Int ) {
guard let call = call else {
return
}
print ( " =================onProgress============ \n progress: \( progress ) " ) ;
values . setValue ( CommonUtil . getSendMessageClientMsgID ( methodCall : self . call ! ) , forKey : " clientMsgID " )
values . setValue ( call [ string : " clientMsgID " ] , forKey : " clientMsgID " )
values . setValue ( progress , forKey : " progress " )
CommonUtil . emitEvent ( channel : channel , method : " msgSendProgressListener " , type : " onProgress " , errCode : nil , errMsg : nil , data : values )
}
@ -190,7 +252,5 @@ public class AdvancedMsgListener: NSObject, Open_im_sdkOnAdvancedMsgListenerProt
values . setValue ( message , forKey : " message " )
CommonUtil . emitEvent ( channel : channel , method : " advancedMsgListener " , type : " onRecvNewMessage " , errCode : nil , errMsg : nil , data : values )
}
}
}