From 7b60238359b94125d591678eff105ae2bf47843f Mon Sep 17 00:00:00 2001
From: gxc <guoxuecheng@guoxuechengdeMacBook-Pro.local>
Date: 星期五, 15 十一月 2019 13:16:21 +0800
Subject: [PATCH] 2019.11.15
---
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs | 314 +++++++++++++++++++++++++++++++---------------------
1 files changed, 187 insertions(+), 127 deletions(-)
diff --git a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs
index ef0bb03..7ea6cfd 100755
--- a/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs
+++ b/ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs
@@ -39,6 +39,11 @@
m_Current = value;
}
}
+ /// <summary>
+ /// 鍒嗕韩鐨勮澶囨枃浠�(key:璁惧涓婚敭,value:璁惧鏂囦欢)
+ /// </summary>
+ private Dictionary<string, string> dicShardDeviceFile = new Dictionary<string, string>();
+
#endregion
#region 鈻� 鑾峰彇鍒嗕韩鏂囦欢_______________________
@@ -220,118 +225,10 @@
/// </summary>
public void ClearShardDirectory()
{
+ this.dicShardDeviceFile.Clear();
//鍒涘缓鏂囦欢澶�
string strDir = System.IO.Path.Combine(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory);
Global.CreateEmptyDirectory(strDir, true);
- }
-
- #endregion
-
- #region 鈻� 鑾峰彇鎴愬憳鍏变韩鍒楄〃___________________
-
- /// <summary>
- /// 浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃
- /// </summary>
- /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹殑缂撳瓨(璋冪敤杩欎釜鍑芥暟浼氬埛鏂拌繖涓彉閲忕殑淇℃伅)</param>
- public void GetMemberShardContentListFromLocal(MemberShardInfoData memberShardInfo)
- {
- memberShardInfo.dicShardRoom = new Dictionary<string, Common.Room>();
-
- var listDeviceFile = new HashSet<string>();
- var listSceneFile = new HashSet<string>();
-
- var listFile = this.GetLocalAllShardFile();
- //鍏堝垵濮嬪寲鎴块棿
- foreach (string fileName in listFile)
- {
- if (fileName.StartsWith("Room_") == true)
- {
- //鎴块棿鏂囦欢
- var byteData = this.GetShardFileContent(fileName);
- if (byteData != null)
- {
- string valueData = System.Text.Encoding.UTF8.GetString(byteData);
- var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
- memberShardInfo.dicShardRoom[fileName] = roomTemp;
- }
- }
- else if (fileName == DirNameResourse.ShardFloorFile)
- {
- //妤煎眰鏂囦欢
- var byteData = this.GetShardFileContent(fileName);
- if (byteData != null)
- {
- string valueData = System.Text.Encoding.UTF8.GetString(byteData);
- memberShardInfo.dicShardFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(valueData);
- }
- }
- else if (fileName.StartsWith("Device_") == true)
- {
- //璁惧鏂囦欢
- listDeviceFile.Add(fileName);
- }
- else if (fileName.StartsWith("Scene_") == true)
- {
- //鍦烘櫙鏂囦欢
- listSceneFile.Add(fileName);
- }
- }
-
- //璁剧疆鎴块棿閲岄潰璁惧鐨刄I瀵硅薄(鍥犱负杩欎釜涓滆タ鏄弽搴忓垪鍖栧嚭鏉ョ殑,璁惧UI瀵硅薄鏄笉搴忓垪鍖栧璞�)
- foreach (var tempRoom in memberShardInfo.dicShardRoom.Values)
- {
- //杩樺師璁惧瀵硅薄
- tempRoom.DeviceUIList.Clear();
- foreach (string uiPath in tempRoom.DeviceUIFilePathList)
- {
- string deviceFile = uiPath.Replace("DeviceUI_", string.Empty);
- //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌鎴块棿
- listDeviceFile.Remove(deviceFile);
- if (this.IsFileExists(deviceFile) == false)
- {
- continue;
- }
- tempRoom.DeviceUIList.Add(Common.LocalDevice.Current.GetDeviceUI(uiPath));
- }
- //杩樺師鍦烘櫙瀵硅薄
- tempRoom.SceneUIList.Clear();
- foreach (string uiPath in tempRoom.SceneUIFilePathList)
- {
- //杩欎釜鍦烘櫙鏂囦欢鍖归厤寰楀埌鎴块棿
- listSceneFile.Remove(uiPath);
- var byteData = this.GetShardFileContent(uiPath);
- if (byteData == null)
- {
- continue;
- }
- string valueData = System.Text.Encoding.UTF8.GetString(byteData);
- var tempUi = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData);
- tempRoom.SceneUIList.Add(tempUi);
- }
- }
- //濡傛灉瀛樺湪鍖归厤涓嶄笂鐨勬枃浠�
- if (listDeviceFile.Count != 0 || listSceneFile.Count != 0)
- {
- //鍒涘缓涓�涓复鏃舵埧闂存潵瀛樺偍
- var roomTemp = new Room();
- roomTemp.Id = "Other";
- roomTemp.FloorId = "Other";
- memberShardInfo.dicShardRoom[roomTemp.FileName] = roomTemp;
- roomTemp.Name = Language.StringByID(R.MyInternationalizationString.uSharedRoom);
- //杩樺師璁惧瀵硅薄
- foreach (string deviceFile in listDeviceFile)
- {
- roomTemp.DeviceUIList.Add(Common.LocalDevice.Current.GetDeviceUI(deviceFile));
- }
- //杩樺師鍦烘櫙瀵硅薄
- foreach (string uiPath in listSceneFile)
- {
- var byteData = this.GetShardFileContent(uiPath);
- string valueData = System.Text.Encoding.UTF8.GetString(byteData);
- var tempUi = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData);
- roomTemp.SceneUIList.Add(tempUi);
- }
- }
}
#endregion
@@ -406,8 +303,10 @@
//鐢熸垚鏂囦欢
foreach (string fileName in listDbFile)
{
- var data = this.GetShardFileContent(fileName);
- Global.WriteFileByBytesByHomeId(fileName, data);
+ var oldPath = UserCenterLogic.CombinePath(DirNameResourse.LocalMemoryDirectory, DirNameResourse.DownLoadShardDirectory, fileName);
+ var newPath = System.IO.Path.Combine(Config.Instance.FullPath, fileName);
+ System.IO.File.Copy(oldPath, newPath, true);
+
if (fileName.StartsWith("Room_") == true)
{
//鎴块棿鏂囦欢鐗规畩澶勭悊
@@ -473,13 +372,25 @@
var listLocalFile = Global.FileListByHomeId();
foreach (string fileName in listLocalFile)
{
+ if (fileName == DirNameResourse.ShardFloorFile)
+ {
+ //妤煎眰鏂囦欢
+ var varData = Global.ReadFileByHomeId(fileName);
+ var dicFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(Encoding.UTF8.GetString(varData));
+ Common.Config.Instance.Home.FloorDics = dicFloor;
+ Common.Config.Instance.Home.Save(false);
+
+ Global.DeleteFilebyHomeId(fileName);
+ }
+
if (listShardFile.Contains(fileName) == true)
{
//鏈湴鐨勮繖涓枃浠惰繕鍒嗕韩鐫�,娌℃湁闂
continue;
}
+
//妫�娴嬫湰鍦拌澶囨枃浠�,鏄惁瀛樺湪宸茬粡鍙栨秷浜嗗叡浜簡鐨�
- if (fileName.StartsWith(Common.LocalDevice.deviceFirstName) == true)
+ if (fileName.StartsWith("Device_") == true)
{
//鍒犻櫎鎺夎繖涓澶囨枃浠�
Global.DeleteFilebyHomeId(fileName);
@@ -581,6 +492,8 @@
{
if (memberShardInfo.Refresh == false)
{
+ //浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃
+ this.GetMemberShardContentListFromLocal(memberShardInfo);
return true;
}
memberShardInfo.Refresh = false;
@@ -636,11 +549,156 @@
ProgressBar.Close();
return false;
}
+
+ //浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃
+ this.GetMemberShardContentListFromLocal(memberShardInfo);
+
//鍏抽棴杩涘害鏉�
ProgressBar.Close();
return true;
}
+
+ /// <summary>
+ /// 浠庢湰鍦拌幏鍙栨垚鍛樼殑鍒嗕韩鍒楄〃
+ /// </summary>
+ /// <param name="memberShardInfo">鎴愬憳鐨勫垎浜暟鎹殑缂撳瓨(璋冪敤杩欎釜鍑芥暟浼氬埛鏂拌繖涓彉閲忕殑淇℃伅)</param>
+ private void GetMemberShardContentListFromLocal(MemberShardInfoData memberShardInfo)
+ {
+ memberShardInfo.dicShardRoom = new Dictionary<string, Common.Room>();
+ this.dicShardDeviceFile.Clear();
+
+ var listDeviceFile = new HashSet<string>();
+ var listSceneFile = new HashSet<string>();
+
+ var listFile = this.GetLocalAllShardFile();
+ //鍏堝垵濮嬪寲鎴块棿
+ foreach (string fileName in listFile)
+ {
+ if (fileName.StartsWith("Room_") == true)
+ {
+ //鎴块棿鏂囦欢
+ var byteData = this.GetShardFileContent(fileName);
+ if (byteData != null)
+ {
+ string valueData = System.Text.Encoding.UTF8.GetString(byteData);
+ var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
+ memberShardInfo.dicShardRoom[fileName] = roomTemp;
+ }
+ }
+ else if (fileName == DirNameResourse.ShardFloorFile)
+ {
+ //妤煎眰鏂囦欢
+ var byteData = this.GetShardFileContent(fileName);
+ if (byteData != null)
+ {
+ string valueData = System.Text.Encoding.UTF8.GetString(byteData);
+ memberShardInfo.dicShardFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(valueData);
+ }
+ }
+ else if (fileName.StartsWith("Device_") == true)
+ {
+ string[] Arry = fileName.Split(new string[] { "_" }, StringSplitOptions.RemoveEmptyEntries);
+ string mainKeys = Common.LocalDevice.Current.GetDeviceMainKeys(Arry[2], Convert.ToInt32(Arry[3]));
+ this.dicShardDeviceFile[mainKeys] = fileName;
+
+ //璁惧鏂囦欢
+ listDeviceFile.Add(fileName);
+ }
+ else if (fileName.StartsWith("Scene_") == true)
+ {
+ //鍦烘櫙鏂囦欢
+ listSceneFile.Add(fileName);
+ }
+ }
+
+ //璁剧疆鎴块棿閲岄潰璁惧鐨刄I瀵硅薄(鍥犱负杩欎釜涓滆タ鏄弽搴忓垪鍖栧嚭鏉ョ殑,璁惧UI瀵硅薄鏄笉搴忓垪鍖栧璞�)
+ foreach (var tempRoom in memberShardInfo.dicShardRoom.Values)
+ {
+ //杩樺師璁惧瀵硅薄
+ tempRoom.DeviceUIList.Clear();
+ for (int i = 0; i < tempRoom.DeviceUIFilePathList.Count; i++)
+ {
+ string deviceFile = tempRoom.DeviceUIFilePathList[i];
+ //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌鎴块棿
+ listDeviceFile.Remove(deviceFile);
+ if (this.IsFileExists(deviceFile) == false)
+ {
+ //绉婚櫎鎺夎繖涓笉瀵瑰姴鐨勮矾寰�
+ tempRoom.DeviceUIFilePathList.RemoveAt(i);
+ i--;
+ continue;
+ }
+ tempRoom.DeviceUIList.Add(Common.LocalDevice.Current.GetDeviceUI(deviceFile));
+ }
+ //杩樺師鍦烘櫙瀵硅薄
+ tempRoom.SceneUIList.Clear();
+ for (int i = 0; i < tempRoom.SceneUIFilePathList.Count; i++)
+ {
+ string uiPath = tempRoom.SceneUIFilePathList[i];
+ //杩欎釜鍦烘櫙鏂囦欢鍖归厤寰楀埌鎴块棿
+ listSceneFile.Remove(uiPath);
+ var byteData = this.GetShardFileContent(uiPath);
+ if (byteData == null)
+ {
+ //绉婚櫎鎺夎繖涓笉瀵瑰姴鐨勮矾寰�
+ tempRoom.SceneUIFilePathList.RemoveAt(i);
+ i--;
+ continue;
+ }
+ string valueData = System.Text.Encoding.UTF8.GetString(byteData);
+ var tempUi = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData);
+ tempRoom.SceneUIList.Add(tempUi);
+
+ //鑾峰彇鍦烘櫙閲岄潰鐨勫叏閮ㄧ洰鏍�(2019.11.05杩藉姞鎿嶄綔,鏈夊彲鑳介偅涓澶囨槸鐢卞満鏅祵濂楁潵鐨�,鎵�浠ュ畠鏈夊彲鑳戒笉灞炰簬浠讳綍鎴块棿)
+ foreach (var data in tempUi.AddSceneMemberDataList)
+ {
+ //璁惧
+ if (data.Type == 0)
+ {
+ string mainkey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint);
+ if (dicShardDeviceFile.ContainsKey(mainkey) == true )
+ {
+ //杩欎釜璁惧鏂囦欢鍖归厤寰楀埌
+ listDeviceFile.Remove(dicShardDeviceFile[mainkey]);
+ }
+ }
+ if (data.Type == 1)
+ {
+ var temp = new SceneUI();
+ temp.Id = data.ElseScenesId;
+ //杩欎釜鍦烘櫙鏂囦欢鍖归厤寰楀埌
+ listSceneFile.Remove(temp.FileName);
+ }
+ }
+ }
+ }
+ //濡傛灉瀛樺湪鍖归厤涓嶄笂鐨勬枃浠�
+ if (listDeviceFile.Count != 0 || listSceneFile.Count != 0)
+ {
+ //鍒涘缓涓�涓复鏃舵埧闂存潵瀛樺偍
+ var roomTemp = new Room();
+ roomTemp.Id = "Other";
+ roomTemp.FloorId = "Other";
+ memberShardInfo.dicShardRoom[roomTemp.FileName] = roomTemp;
+ roomTemp.Name = Language.StringByID(R.MyInternationalizationString.uUnallocated);
+ //杩樺師璁惧瀵硅薄
+ foreach (string deviceFile in listDeviceFile)
+ {
+ roomTemp.DeviceUIFilePathList.Add(deviceFile);
+ roomTemp.DeviceUIList.Add(Common.LocalDevice.Current.GetDeviceUI(deviceFile));
+ }
+ //杩樺師鍦烘櫙瀵硅薄
+ foreach (string uiPath in listSceneFile)
+ {
+ var byteData = this.GetShardFileContent(uiPath);
+ string valueData = System.Text.Encoding.UTF8.GetString(byteData);
+ var tempUi = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData);
+ roomTemp.SceneUIList.Add(tempUi);
+ }
+ }
+ }
+
#endregion
@@ -812,8 +870,11 @@
listFile.Add(device.FilePath);
this.AddShardFile(device.FilePath);
+ //鍔犵偣缂撳瓨
+ this.dicShardDeviceFile[LocalDevice.Current.GetDeviceMainKeys(device)] = device.FilePath;
+
//璁惧鐨刄I
- var deviceUi = $"DeviceUI_{device.FilePath}";
+ var deviceUi = device.FilePath;
if (roomTemp.DeviceUIFilePathList.Contains(deviceUi) == false)
{
roomTemp.DeviceUIFilePathList.Add(deviceUi);
@@ -825,6 +886,9 @@
//璁惧
listFile.Add(device.FilePath);
this.AddShardFile(device.FilePath);
+
+ //鍔犵偣缂撳瓨
+ this.dicShardDeviceFile[LocalDevice.Current.GetDeviceMainKeys(device)] = device.FilePath;
}
//鍦烘櫙
@@ -868,7 +932,7 @@
}
/// <summary>
- /// 浠庣綉鍏宠幏鍙栧満鏅殑鐩爣璁惧鍒楄〃
+ /// 鑾峰彇鍦烘櫙鐨勭洰鏍囪澶囧垪琛�(杩欎釜涓嶈兘浠庡垎浜暟鎹腑鑾峰彇)
/// </summary>
/// <param name="scene">鍦烘櫙</param>
/// <param name="listCheck">閲嶅妫�娴嬬敤</param>
@@ -1229,7 +1293,7 @@
string deviceFileName = device.FilePath;
//绉婚櫎璺緞鍒楄〃
- roomTemp.DeviceUIFilePathList.Remove($"DeviceUI_{device.FilePath}");
+ roomTemp.DeviceUIFilePathList.Remove(device.FilePath);
if (listHadShard.Contains(deviceFileName) == true)
{
//鍏朵粬鍦烘櫙鍒嗕韩鏈夎繖涓澶�,鎵�浠ヤ笉鍒犻櫎杩欎釜璁惧鐨勬牴婧愭枃浠�,鍙槸鎶婃埧闂寸殑璁惧鍒楄〃璺緞绉婚櫎
@@ -1410,7 +1474,6 @@
}
//鍏抽棴杩涘害鏉�
ProgressBar.Close();
- ;
for (int i = 0; i < listDeleteFile.Count; i++)
{
string fileName = listDeleteFile[i];
@@ -1564,7 +1627,7 @@
//璁惧
foreach (var deviceUi in roomTemp.DeviceUIFilePathList)
{
- string deviceFile = deviceUi.Replace("DeviceUI_", string.Empty);
+ string deviceFile = deviceUi;
if (listDeleteFile.Contains(deviceFile) == true)
{
//鍥犱负涓�涓洖璺彧鑳藉垎閰嶄竴涓尯鍩�,鎵�浠ュ彲浠ョ洿鎺ュ垽鏂�
@@ -1617,7 +1680,7 @@
}
/// <summary>
- /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勬枃浠跺悕瀛�
+ /// 浠庡満鏅璞¢噷闈㈣幏鍙栧叏閮ㄧ殑缁戝畾鐩爣鐨勬枃浠跺悕瀛�(杩欓噷闈㈢殑涓滆タ蹇呴』浠庡垎浜暟鎹腑鑾峰彇)
/// </summary>
/// <param name="scene">鍦烘櫙</param>
/// <param name="listFile">鏂囦欢鍒楄〃(閲岄潰瀛樼殑鏄澶嘦I鏂囦欢鍜岃澶囨枃浠跺拰鍦烘櫙鏂囦欢)</param>
@@ -1629,10 +1692,10 @@
//璁惧
if (data.Type == 0)
{
- var device = Common.LocalDevice.Current.GetDevice(data.DeviceAddr, data.Epoint);
- if (device != null && listFile.Contains(device.FilePath) == false)
+ string mainkey = LocalDevice.Current.GetDeviceMainKeys(data.DeviceAddr, data.Epoint);
+ if (dicShardDeviceFile.ContainsKey(mainkey) == true && listFile.Contains(dicShardDeviceFile[mainkey]) == false)
{
- listFile.Add(device.FilePath);
+ listFile.Add(dicShardDeviceFile[mainkey]);
}
}
if (data.Type == 1)
@@ -1644,13 +1707,10 @@
{
string valueData = System.Text.Encoding.UTF8.GetString(byteData);
var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.SceneUI>(valueData);
- if (roomTemp != null)
+ dicBindScene[roomTemp.FileName] = roomTemp;
+ if (listFile.Contains(roomTemp.FileName) == false)
{
- dicBindScene[roomTemp.FileName] = roomTemp;
- if (listFile.Contains(roomTemp.FileName) == false)
- {
- listFile.Add(roomTemp.FileName);
- }
+ listFile.Add(roomTemp.FileName);
}
}
}
--
Gitblit v1.8.0