/// <summary> /// 导出本地消息记录到云端 /// </summary> /// <param name="export_info">导出需要的参数参考NIMLogsBackupExportInfo定义</param> /// <param name="encrypt_key_">加密秘钥</param> /// <returns>false 当前有导入/导出操作正在进行中</returns> public static bool ExportBackupToRemote(NIMLogsBackupExportInfo export_info, string encrypt_key_) { bool ret = false; if (export_info != null) { export_info_remain = export_info; export_info_c.ToRemotePackageCallback_ = ExportBackupToRemotePackageCallback; export_info_c.ToRemoteEncryptCallback_ = ExportBackupToRemoteEncryptCallback; export_info_c.encrypt_key_ = Utf8StringMarshaler.GetInstance("").MarshalManagedToNative(encrypt_key_); export_info_c.ProgressCallback_ = ExportLogsBackupProgressCallback; export_info_c.CompleteCallback_ = ExportLogsBackupCompleteCallback; export_info_c.ToRemoteLogFiter_ = ExportBackupToRemoteLogFiterCallback; export_info_c.PathRelease_ = NewPathRelease; //NIMLogsBackupExportInfo_Callback export_info_cb = new NIMLogsBackupExportInfo_Callback(); int nSizeOfParam = Marshal.SizeOf(export_info); IntPtr param_ptr = Marshal.AllocHGlobal(nSizeOfParam); try { Marshal.StructureToPtr(export_info, param_ptr, false); export_info_c.user_data_ = param_ptr; } catch { } //public _ExportBackupToRemoteEncryptCallback_C ToRemoteEncryptCallback_; long param_value = param_ptr.ToInt64(); Debug.WriteLine("param_value user_data:" + param_value.ToString()); Debug.WriteLine("encrypt_key_ user_data:" + export_info_c.encrypt_key_.ToInt64().ToString()); ret = MsglogNativeMethods.nim_export_backup_to_remote(ref export_info_c); } return(ret); }
private static void ExportLogsBackupProgressCallback(LogsBackupRemoteOperate operate, float progress, IntPtr user_data) { NIMLogsBackupExportInfo export_info = (NIMLogsBackupExportInfo)Marshal.PtrToStructure(user_data, typeof(NIMLogsBackupExportInfo)); if (export_info != null && export_info.ProgressCallback_ != null) { export_info.ProgressCallback_(operate, progress); } }
private static bool ExportBackupToRemoteLogFiterCallback(string msg, IntPtr user_data) { bool ret = false; NIMLogsBackupExportInfo export_info = (NIMLogsBackupExportInfo)Marshal.PtrToStructure(user_data, typeof(NIMLogsBackupExportInfo)); if (export_info != null && export_info.ToRemoteLogFiter_ != null) { ret = export_info.ToRemoteLogFiter_(msg); } return(ret); }
private static IntPtr ExportBackupToRemoteEncryptCallback(string file_path, string encrypt_key, IntPtr user_data) { IntPtr path = IntPtr.Zero; NIMLogsBackupExportInfo export_info = (NIMLogsBackupExportInfo)Marshal.PtrToStructure(user_data, typeof(NIMLogsBackupExportInfo)); if (export_info != null && export_info.ToRemoteEncryptCallback_ != null) { string temp_path = export_info.ToRemoteEncryptCallback_(file_path, encrypt_key); path = Utf8StringMarshaler.GetInstance("").MarshalManagedToNative(temp_path); } return(path); }
private static void ExportLogsBackupCompleteCallback(LogsBackupRemoteOperate operate, LogsBackupRemoteState state, IntPtr user_data) { NIMLogsBackupExportInfo export_info = (NIMLogsBackupExportInfo)Marshal.PtrToStructure(user_data, typeof(NIMLogsBackupExportInfo)); if (export_info != null && export_info.CompleteCallback_ != null) { export_info.CompleteCallback_(operate, state); } //注意,这里应释放user_data Marshal.FreeHGlobal(user_data); }