@ -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
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 : FlutterResult ) {
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,151 +74,183 @@ 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 createSoundMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateSoundMessage ( CommonUtil . getSoundPath ( methodCall : methodCall ) , CommonUtil . getSoundDuration ( methodCall : methodCall ) )
DispatchQueue . main . async { result ( prama ) }
func createImageMessageFromFullPath ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
callBack ( result , Open_im_sdkCreateImageMessageFromFullPath ( methodCall [ string : " imagePath " ] ) )
}
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 ) }
func createSoundMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
callBack ( result , Open_im_sdkCreateSoundMessage ( methodCall [ string : " soundPath " ] , methodCall [ int64 : " duration " ] ) )
}
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 ) }
func createSoundMessageFromFullPath ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
callBack ( result , Open_im_sdkCreateSoundMessageFromFullPath ( methodCall [ string : " soundPath " ] , methodCall [ int64 : " duration " ] ) )
}
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 ) }
func createVideoMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateVideoMessage ( methodCall [ string : " videoPath " ] , methodCall [ string : " videoType " ] ,
methodCall [ int64 : " duration " ] , methodCall [ string : " snapshotPath " ] )
callBack ( result , prama )
}
func createForwardMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateForwardMessage ( CommonUtil . getForwardMessage ( methodCall : methodCall ) )
DispatchQueue . main . async { 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 getTotalUnreadMsgCount ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkGetTotalUnreadMsgCount ( BaseImpl ( result : result ) )
}
func forceSyncMsg ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkForceSyncMsg ( )
}
public class SendMsgProgressListener : NSObject , Open_im_sdkSendMsgCallBackProtocol {
private let channel : FlutterMethodChannel
private var result : FlutterResult ?
private var call : FlutterMethodCall ?
private let values : NSMutableDictionary = NSMutableDictionary ( capacity : 0 )
init ( channel : FlutterMethodChannel ) {
self . channel = channel
func createFileMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
callBack ( result , Open_im_sdkCreateFileMessage ( methodCall [ string : " filePath " ] , methodCall [ string : " fileName " ] ) )
}
func setResult ( result : @ escaping FlutterResult ) {
self . result = result
func createMergerMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateMergerMessage ( methodCall [ jsonString : " messageList " ] , methodCall [ string : " title " ] ,
methodCall [ jsonString : " summaryList " ] )
callBack ( result , prama )
}
func setCall ( methodCall : FlutterMethodCall ) {
self . call = methodCall
func createForwardMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
callBack ( result , Open_im_sdkCreateForwardMessage ( methodCall [ jsonString : " message " ] ) )
}
public func onError ( _ errCode : Int , errMsg : String ? ) {
print ( " =================onError============ \n errcode: \( errCode ) ,errMsg: \( errMsg ! ) " ) ;
DispatchQueue . main . async { self . result ! ( FlutterError ( code : " \( errCode ) " , message : errMsg , details : nil ) ) }
func createLocationMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateLocationMessage ( methodCall [ string : " description " ] ,
methodCall [ double : " longitude " ] , methodCall [ double : " latitude " ] )
callBack ( result , prama )
}
public func onProgress ( _ progress : Int ) {
print ( " =================onProgress============ \n progress: \( progress ) " ) ;
values . setValue ( CommonUtil . getSendMessageClientMsgID ( methodCall : self . call ! ) , forKey : " clientMsgID " )
values . setValue ( progress , forKey : " progress " )
CommonUtil . emitEvent ( channel : channel , method : " msgSendProgressListener " , type : " onProgress " , errCode : nil , errMsg : nil , data : values )
func createCustomMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateCustomMessage ( methodCall [ string : " data " ] ,
methodCall [ string : " extension " ] , methodCall [ string : " description " ] )
callBack ( result , prama )
}
public func onSuccess ( _ data : String ? ) {
print ( " =================onSuccess============ \n success: \( data ! ) " ) ;
DispatchQueue . main . async { self . result ! ( data ) }
func createQuoteMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
let prama = Open_im_sdkCreateQuoteMessage ( methodCall [ string : " quoteText " ] , methodCall [ jsonString : " quoteMessage " ] )
callBack ( result , prama )
}
}
public class AdvancedMsgListener : NSObject , Open_im_sdkOnAdvancedMsgListenerProtocol {
private let channel : FlutterMethodChannel
private let values : NSMutableDictionary = NSMutableDictionary ( capacity : 0 )
init ( channel : FlutterMethodChannel , id : String ) {
self . channel = channel
values . setValue ( id , forKey : " id " )
func createCardMessage ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
callBack ( result , Open_im_sdkCreateCardMessage ( methodCall [ jsonString : " cardMessage " ] ) )
}
public func onRecvC2CReadReceipt ( _ msgReceiptList : String ? ) {
values . setValue ( msgReceiptList , forKey : " message " )
CommonUtil . emitEvent ( channel : channel , method : " advancedMsgListener " , type : " onRecvC2CReadReceipt " , errCode : nil , errMsg : nil , data : values )
func forceSyncMsg ( methodCall : FlutterMethodCall , result : @ escaping FlutterResult ) {
Open_im_sdkForceSyncMsg ( )
callBack ( result )
}
public func onRecvMessageRevoked ( _ msgId : String ? ) {
values . setValue ( msgId , forKey : " message " )
CommonUtil . emitEvent ( channel : channel , method : " advancedMsgListener " , type : " onRecvMessageRevoked " , errCode : nil , errMsg : nil , data : values )
public class SendMsgProgressListener : NSObject , Open_im_sdkSendMsgCallBackProtocol {
private let channel : FlutterMethodChannel
private var result : FlutterResult ?
private var call : FlutterMethodCall ?
private let values : NSMutableDictionary = NSMutableDictionary ( capacity : 0 )
init ( channel : FlutterMethodChannel ) {
self . channel = channel
}
func setResult ( result : @ escaping FlutterResult ) {
self . result = result
}
func setCall ( methodCall : FlutterMethodCall ) {
self . call = methodCall
}
public func onError ( _ errCode : Int , errMsg : String ? ) {
print ( " =================onError============ \n errcode: \( errCode ) ,errMsg: \( errMsg ! ) " ) ;
DispatchQueue . main . async { self . result ! ( FlutterError ( code : " \( errCode ) " , message : errMsg , details : nil ) ) }
}
public func onProgress ( _ progress : Int ) {
guard let call = call else {
return
}
print ( " =================onProgress============ \n progress: \( progress ) " ) ;
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 )
}
public func onSuccess ( _ data : String ? ) {
print ( " =================onSuccess============ \n success: \( data ! ) " ) ;
DispatchQueue . main . async { self . result ! ( data ) }
}
}
public func onRecvNewMessage ( _ message : String ? ) {
values . setValue ( message , forKey : " message " )
CommonUtil . emitEvent ( channel : channel , method : " advancedMsgListener " , type : " onRecvNewMessage " , errCode : nil , errMsg : nil , data : values )
public class AdvancedMsgListener : NSObject , Open_im_sdkOnAdvancedMsgListenerProtocol {
private let channel : FlutterMethodChannel
private let values : NSMutableDictionary = NSMutableDictionary ( capacity : 0 )
init ( channel : FlutterMethodChannel , id : String ) {
self . channel = channel
values . setValue ( id , forKey : " id " )
}
public func onRecvC2CReadReceipt ( _ msgReceiptList : String ? ) {
values . setValue ( msgReceiptList , forKey : " message " )
CommonUtil . emitEvent ( channel : channel , method : " advancedMsgListener " , type : " onRecvC2CReadReceipt " , errCode : nil , errMsg : nil , data : values )
}
public func onRecvMessageRevoked ( _ msgId : String ? ) {
values . setValue ( msgId , forKey : " message " )
CommonUtil . emitEvent ( channel : channel , method : " advancedMsgListener " , type : " onRecvMessageRevoked " , errCode : nil , errMsg : nil , data : values )
}
public func onRecvNewMessage ( _ message : String ? ) {
values . setValue ( message , forKey : " message " )
CommonUtil . emitEvent ( channel : channel , method : " advancedMsgListener " , type : " onRecvNewMessage " , errCode : nil , errMsg : nil , data : values )
}
}
}
}