LocalSaver.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. using UnityEngine;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Xml;
  7. using LitJson;
  8. public class LocalSaver
  9. {
  10. public const string KEY_ID = "ida";
  11. public const string KEY_NO_BINDING = "nb";
  12. public const string KEY_CHAT_IDS = "ci";
  13. public const string KEY_CHAT = "ch";
  14. public const string KEY_CHAT_TEMP_ID = "ct";
  15. public LocalSaver ()
  16. {
  17. }
  18. private static LocalSaver instance;
  19. public static LocalSaver GetInstance()
  20. {
  21. if(instance == null)
  22. instance = new LocalSaver();
  23. return instance;
  24. }
  25. public void DeleteAll()
  26. {
  27. PlayerPrefsManager.DeleteAll();
  28. }
  29. public int LoadId()
  30. {
  31. if (PlayerPrefsManager.HasKey (KEY_ID))
  32. return PlayerPrefsManager.GetInt (KEY_ID);
  33. return 0;
  34. }
  35. public void SaveId(int id)
  36. {
  37. PlayerPrefsManager.Set (KEY_ID, id);
  38. }
  39. public int noAutoBinding
  40. {
  41. set
  42. {
  43. PlayerPrefsManager.Set (KEY_NO_BINDING + Session.myUserId, value);
  44. }
  45. get
  46. {
  47. if (PlayerPrefsManager.HasKey (KEY_NO_BINDING + Session.myUserId))
  48. return PlayerPrefsManager.GetInt (KEY_NO_BINDING + Session.myUserId);
  49. return 0;
  50. }
  51. }
  52. private string GetChatIdsKey(int userId)
  53. {
  54. return KEY_CHAT_IDS + "_" + userId;
  55. }
  56. private string GetChatKey(int id, int userId)
  57. {
  58. return KEY_CHAT + "_" + userId + "_" + id;
  59. }
  60. public int NewTempChatId(int userId)
  61. {
  62. string key = KEY_CHAT_TEMP_ID + "_" + userId;
  63. int tempId = PlayerPrefsManager.GetInt (key) + 1;
  64. PlayerPrefsManager.Set (key, tempId);
  65. return -tempId;
  66. }
  67. public void AddChat(ChatMsg chatMsg, int userId)
  68. {
  69. string keyId = GetChatKey (chatMsg.id, userId);
  70. PlayerPrefsManager.Set (keyId, chatMsg.GetJson().ToJson());
  71. AddChatId (chatMsg.id, userId);
  72. }
  73. private void AddChatId(int id, int userId)
  74. {
  75. string key = GetChatIdsKey (userId);
  76. string chatIds = PlayerPrefsManager.GetString (key);
  77. if (StringUtil.Empty (chatIds)) {
  78. chatIds = id.ToString ();
  79. } else {
  80. chatIds += "|" + id.ToString ();
  81. }
  82. PlayerPrefsManager.Set (key, chatIds);
  83. if(!HasChatId(id))
  84. chatIdDict.Add (id, false);
  85. }
  86. public void RemoveChat(int id, int userId)
  87. {
  88. string key = GetChatIdsKey (userId);
  89. string keyChat = GetChatKey (id, userId);
  90. string chatIds = PlayerPrefsManager.GetString (key);
  91. int index = chatIds.IndexOf (id.ToString());
  92. if(index >= 0)
  93. {
  94. if (chatIds.Length > id.ToString ().Length) {
  95. if (index + id.ToString ().Length == chatIds.Length) {
  96. chatIds = chatIds.Replace ("|" + id.ToString (), "");
  97. } else {
  98. chatIds = chatIds.Replace (id.ToString () + "|", "");
  99. }
  100. } else {
  101. chatIds = "";
  102. }
  103. PlayerPrefsManager.Set (key, chatIds);
  104. PlayerPrefsManager.DeleteKey (keyChat);
  105. chatIdDict.Remove (id);
  106. }
  107. }
  108. public void ReplaceChat(int origin, ChatMsg replaceMsg, int userId)
  109. {
  110. string originChatKey = KEY_CHAT + "_" + userId + "_" + origin;
  111. string replaceChatKey = KEY_CHAT + "_" + userId + "_" + replaceMsg.id;
  112. string key = KEY_CHAT_IDS + "_" + userId.ToString ();
  113. string oldChatIds = PlayerPrefsManager.GetString (key);
  114. string newChatIds = oldChatIds.Replace (origin.ToString(), replaceMsg.id.ToString());
  115. if (!newChatIds.Equals (oldChatIds)) {
  116. PlayerPrefsManager.DeleteKey (originChatKey);
  117. PlayerPrefsManager.Set (key, newChatIds);
  118. PlayerPrefsManager.Set (replaceChatKey, replaceMsg.GetJson().ToJson());
  119. chatIdDict.Remove (origin);
  120. if(!HasChatId(replaceMsg.id))
  121. chatIdDict.Add (replaceMsg.id, false);
  122. }
  123. }
  124. public JsonData LoadChat(int userId)
  125. {
  126. chatIdDict.Clear ();
  127. JsonData list = JsonMapper.ToObject ("[]");
  128. string key = GetChatIdsKey (userId);
  129. if (!PlayerPrefsManager.HasKey (key))
  130. return list;
  131. string idStr = PlayerPrefsManager.GetString (key);
  132. int[] idArr = StringUtil.SplitToInt (idStr, '|');
  133. for(int i=0; i<idArr.Length; i++)
  134. {
  135. int id = idArr [i];
  136. string keyChat = GetChatKey (id, userId);
  137. if(PlayerPrefsManager.HasKey(keyChat))
  138. {
  139. string chatStr = PlayerPrefsManager.GetString (keyChat);
  140. try
  141. {
  142. JsonData json = JsonMapper.ToObject(chatStr);
  143. list.Add (json);
  144. }
  145. catch(System.Exception e)
  146. {
  147. Debuger.LogException (e);
  148. }
  149. }
  150. if(!HasChatId(id))
  151. chatIdDict.Add (id, false);
  152. }
  153. return list;
  154. }
  155. private Dictionary<int, bool> chatIdDict = new Dictionary<int, bool>();
  156. public bool HasChatId(int id)
  157. {
  158. return chatIdDict.ContainsKey (id);
  159. }
  160. }