using UnityEngine; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Xml; using LitJson; public class LocalSaver { public const string KEY_ID = "ida"; public const string KEY_NO_BINDING = "nb"; public const string KEY_CHAT_IDS = "ci"; public const string KEY_CHAT = "ch"; public const string KEY_CHAT_TEMP_ID = "ct"; public LocalSaver () { } private static LocalSaver instance; public static LocalSaver GetInstance() { if(instance == null) instance = new LocalSaver(); return instance; } public void DeleteAll() { PlayerPrefsManager.DeleteAll(); } public int LoadId() { if (PlayerPrefsManager.HasKey (KEY_ID)) return PlayerPrefsManager.GetInt (KEY_ID); return 0; } public void SaveId(int id) { PlayerPrefsManager.Set (KEY_ID, id); } public int noAutoBinding { set { PlayerPrefsManager.Set (KEY_NO_BINDING + Session.myUserId, value); } get { if (PlayerPrefsManager.HasKey (KEY_NO_BINDING + Session.myUserId)) return PlayerPrefsManager.GetInt (KEY_NO_BINDING + Session.myUserId); return 0; } } private string GetChatIdsKey(int userId) { return KEY_CHAT_IDS + "_" + userId; } private string GetChatKey(int id, int userId) { return KEY_CHAT + "_" + userId + "_" + id; } public int NewTempChatId(int userId) { string key = KEY_CHAT_TEMP_ID + "_" + userId; int tempId = PlayerPrefsManager.GetInt (key) + 1; PlayerPrefsManager.Set (key, tempId); return -tempId; } public void AddChat(ChatMsg chatMsg, int userId) { string keyId = GetChatKey (chatMsg.id, userId); PlayerPrefsManager.Set (keyId, chatMsg.GetJson().ToJson()); AddChatId (chatMsg.id, userId); } private void AddChatId(int id, int userId) { string key = GetChatIdsKey (userId); string chatIds = PlayerPrefsManager.GetString (key); if (StringUtil.Empty (chatIds)) { chatIds = id.ToString (); } else { chatIds += "|" + id.ToString (); } PlayerPrefsManager.Set (key, chatIds); if(!HasChatId(id)) chatIdDict.Add (id, false); } public void RemoveChat(int id, int userId) { string key = GetChatIdsKey (userId); string keyChat = GetChatKey (id, userId); string chatIds = PlayerPrefsManager.GetString (key); int index = chatIds.IndexOf (id.ToString()); if(index >= 0) { if (chatIds.Length > id.ToString ().Length) { if (index + id.ToString ().Length == chatIds.Length) { chatIds = chatIds.Replace ("|" + id.ToString (), ""); } else { chatIds = chatIds.Replace (id.ToString () + "|", ""); } } else { chatIds = ""; } PlayerPrefsManager.Set (key, chatIds); PlayerPrefsManager.DeleteKey (keyChat); chatIdDict.Remove (id); } } public void ReplaceChat(int origin, ChatMsg replaceMsg, int userId) { string originChatKey = KEY_CHAT + "_" + userId + "_" + origin; string replaceChatKey = KEY_CHAT + "_" + userId + "_" + replaceMsg.id; string key = KEY_CHAT_IDS + "_" + userId.ToString (); string oldChatIds = PlayerPrefsManager.GetString (key); string newChatIds = oldChatIds.Replace (origin.ToString(), replaceMsg.id.ToString()); if (!newChatIds.Equals (oldChatIds)) { PlayerPrefsManager.DeleteKey (originChatKey); PlayerPrefsManager.Set (key, newChatIds); PlayerPrefsManager.Set (replaceChatKey, replaceMsg.GetJson().ToJson()); chatIdDict.Remove (origin); if(!HasChatId(replaceMsg.id)) chatIdDict.Add (replaceMsg.id, false); } } public JsonData LoadChat(int userId) { chatIdDict.Clear (); JsonData list = JsonMapper.ToObject ("[]"); string key = GetChatIdsKey (userId); if (!PlayerPrefsManager.HasKey (key)) return list; string idStr = PlayerPrefsManager.GetString (key); int[] idArr = StringUtil.SplitToInt (idStr, '|'); for(int i=0; i chatIdDict = new Dictionary(); public bool HasChatId(int id) { return chatIdDict.ContainsKey (id); } }