数据类
[Serializable]
public class ChatData
{
public int id;
public List<PostMessage> messages = new List<PostMessage>();
}
工具类
文件读写
public static string ReadAllOrCreate(string path, string nameFile)
{
string pathFile = path + "/" + nameFile;
if (File.Exists(pathFile))
{
return File.ReadAllText(pathFile);
}
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
File.CreateText(pathFile).Dispose();
return null;
}
public static void WriteAllText(string path, string contents)
{
File.WriteAllText(path, contents, Encoding.UTF8);
}
Json 转换
public static T FromJson<T>(string json)
{
T t = JsonConvert.DeserializeObject<T>(json);
if (t != null && typeof(ISerializationCallbackReceiver).IsAssignableFrom(t.GetType()))
{
((ISerializationCallbackReceiver)((object)t)).OnAfterDeserialize();
}
return t;
}
public static string ToJson(object obj)
{
if (obj != null && typeof(ISerializationCallbackReceiver).IsAssignableFrom(obj.GetType()))
{
((ISerializationCallbackReceiver)obj).OnBeforeSerialize();
}
return JsonConvert.SerializeObject(obj);
}
管理类
*读取现存数据
str = UtilFile.ReadAllOrCreate(Application.streamingAssetsPath, "XXXX.json");
if (string.IsNullOrEmpty(str))
{
datas = new List<ChatData>();
}
else
{
datas = UtilJson.FromJson<List<ChatData>>(str);
}
*所有操作开始前先读取现存数据
创建新对话
dataCurrent = new ChatData() { id = idCurrent };
继续一个对话
for (int i = 0; i < datas.Count; i++)
{
ChatData data = datas[i];
if (data.id.Equals(idCurrent))
{
dataCurrent = data;
return;
}
}
保存对话
if(!datas.Contains(dataCurrent))
{
datas.Add(dataCurrent);
}
UtilFile.WriteAllText(Application.streamingAssetsPath + "/XXXX.json", UtilJson.ToJson(datas));
修改消息发送方法
List<PostMessage> postMessages = new List<PostMessage>(dataCurrent.messages);
postMessages.Add(new PostMessage("user", message));
PostData postData = new PostData
{
model = model,
messages = postMessages
};
StartCoroutine(PostDataByJson(postData, CallBack));
void CallBack(bool successful, string respondedMessage)
{
if (successful)
{
dataCurrent.messages.Add(new PostMessage("user", message));
dataCurrent.messages.Add(new PostMessage("assistant", respondedMessage));
}
callBack?.Invoke(successful, respondedMessage);
}