Commit 1c9f195a authored by SherryChaos's avatar SherryChaos

online deck update

parent edcda087
...@@ -281,7 +281,7 @@ namespace MDPro3.Duel.YGOSharp ...@@ -281,7 +281,7 @@ namespace MDPro3.Duel.YGOSharp
File.SetLastWriteTimeUtc(path, saveTime); File.SetLastWriteTimeUtc(path, saveTime);
if (MyCard.account != null && upload) if (MyCard.account != null && upload)
_ = OnlineDeck.SyncDeck(deckId, deckName, this, true); _ = OnlineDeck.SyncDeck(deckId, deckName, this, saveTime, true);
} }
catch catch
{ {
......
using MDPro3.Duel.YGOSharp; using MDPro3.Duel.YGOSharp;
using MDPro3.Utility;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using UnityEngine; using UnityEngine;
using UnityEngine.Networking; using UnityEngine.Networking;
using MDPro3.Utility;
namespace MDPro3.Net namespace MDPro3.Net
{ {
...@@ -131,7 +129,7 @@ namespace MDPro3.Net ...@@ -131,7 +129,7 @@ namespace MDPro3.Net
if (request.result == UnityWebRequest.Result.Success) if (request.result == UnityWebRequest.Result.Success)
{ {
//UnityEngine.Debug.Log(request.downloadHandler.text); //Debug.Log(request.downloadHandler.text);
decks = JsonUtility.FromJson<ResponseMultiSimpleData>(request.downloadHandler.text).data; decks = JsonUtility.FromJson<ResponseMultiSimpleData>(request.downloadHandler.text).data;
return decks; return decks;
} }
...@@ -226,7 +224,8 @@ namespace MDPro3.Net ...@@ -226,7 +224,8 @@ namespace MDPro3.Net
deckCase = decks[i].Case, deckCase = decks[i].Case,
deckProtector = decks[i].Protector, deckProtector = decks[i].Protector,
isDelete = false, isDelete = false,
deckYdk = decks[i].GetYDK() deckYdk = decks[i].GetYDK(),
timeStamp = ((DateTimeOffset)DateTime.UtcNow).ToUnixTimeMilliseconds()
}; };
decks[i].deckId = ids[i]; decks[i].deckId = ids[i];
...@@ -262,7 +261,7 @@ namespace MDPro3.Net ...@@ -262,7 +261,7 @@ namespace MDPro3.Net
} }
} }
public static async Task<bool> SyncDeck(string deckId, string deckName, Deck deck, bool showHint = true) public static async Task<bool> SyncDeck(string deckId, string deckName, Deck deck, DateTime time, bool showHint = true)
{ {
//Debug.Log("Sync Deck: " + deckName); //Debug.Log("Sync Deck: " + deckName);
deck.deckId = deckId; deck.deckId = deckId;
...@@ -280,7 +279,7 @@ namespace MDPro3.Net ...@@ -280,7 +279,7 @@ namespace MDPro3.Net
{ {
userId = MyCard.account.user.id, userId = MyCard.account.user.id,
deckContributor = MyCard.account.user.username, deckContributor = MyCard.account.user.username,
deck = new PostDeck(deck, deckId, deckName, ydk) deck = new PostDeck(deck, deckId, deckName, ydk, time)
}; };
var json = JsonUtility.ToJson(body); var json = JsonUtility.ToJson(body);
...@@ -331,9 +330,11 @@ namespace MDPro3.Net ...@@ -331,9 +330,11 @@ namespace MDPro3.Net
body.decks = new PostDeck[toDelete.Count]; body.decks = new PostDeck[toDelete.Count];
for (int i = 0; i < toDelete.Count; i++) for (int i = 0; i < toDelete.Count; i++)
{ {
body.decks[i] = new PostDeck(); body.decks[i] = new PostDeck
body.decks[i].deckId = toDelete[i]; {
body.decks[i].isDelete = true; deckId = toDelete[i],
isDelete = true
};
} }
var json = JsonUtility.ToJson(body); var json = JsonUtility.ToJson(body);
...@@ -476,7 +477,7 @@ namespace MDPro3.Net ...@@ -476,7 +477,7 @@ namespace MDPro3.Net
public DateTime GetUpdateUtcTime() public DateTime GetUpdateUtcTime()
{ {
var dataTimeOffset = DateTimeOffset.FromUnixTimeSeconds(deckUpdateDate); var dataTimeOffset = DateTimeOffset.FromUnixTimeSeconds(deckUpdateDate / 1000);
return dataTimeOffset.UtcDateTime; return dataTimeOffset.UtcDateTime;
} }
} }
...@@ -569,12 +570,14 @@ namespace MDPro3.Net ...@@ -569,12 +570,14 @@ namespace MDPro3.Net
public int deckProtector; public int deckProtector;
public string deckYdk; public string deckYdk;
public bool isDelete; public bool isDelete;
public long timeStamp;
public PostDeck() public PostDeck()
{ {
timeStamp = ((DateTimeOffset)DateTime.UtcNow).ToUnixTimeMilliseconds();
} }
public PostDeck(Deck deck, string deckId, string deckName, string ydk) public PostDeck(Deck deck, string deckId, string deckName, string ydk, DateTime time)
{ {
this.deckId = deckId; this.deckId = deckId;
this.deckName = deckName; this.deckName = deckName;
...@@ -588,7 +591,9 @@ namespace MDPro3.Net ...@@ -588,7 +591,9 @@ namespace MDPro3.Net
deckProtector = deck.Protector; deckProtector = deck.Protector;
deckYdk = ydk; deckYdk = ydk;
isDelete = false; isDelete = false;
timeStamp = ((DateTimeOffset)time.ToUniversalTime()).ToUnixTimeMilliseconds();
} }
} }
[Serializable] [Serializable]
......
...@@ -269,7 +269,7 @@ namespace MDPro3.Servant ...@@ -269,7 +269,7 @@ namespace MDPro3.Servant
var decksNeedUpload = new Dictionary<string, Deck>();//没在服务器找到对应的deckId的本地卡组 var decksNeedUpload = new Dictionary<string, Deck>();//没在服务器找到对应的deckId的本地卡组
var decksNeedUpdateToServer = new Dictionary<string, Deck>();//找到deckId但本地时间大于服务器时间五秒以上的卡组 var decksNeedUpdateToServer = new Dictionary<string, Deck>();//找到deckId但本地时间大于服务器时间五秒以上的卡组
var decksNeedUpdateFromServer = new Dictionary<string, Deck>();//找到deckId但本地时间小于服务器时间五秒以上的卡组 var decksNeedUpdateFromServer = new Dictionary<string, Deck>();//找到deckId但本地时间小于服务器时间五秒以上的卡组
var localFoundedIds = new List<string>(); var localFoundIds = new List<string>();
for (int i = 0; i < decks.Count; i++) for (int i = 0; i < decks.Count; i++)
{ {
...@@ -294,14 +294,14 @@ namespace MDPro3.Servant ...@@ -294,14 +294,14 @@ namespace MDPro3.Servant
} }
else else
{ {
localFoundedIds.Add(od.deckId); localFoundIds.Add(od.deckId);
var fileInfo = new FileInfo(deckFiles[i]); var fileInfo = new FileInfo(deckFiles[i]);
var serverTime = od.GetUpdateUtcTime(); var serverTime = od.GetUpdateUtcTime();
var diff = serverTime - fileInfo.LastWriteTimeUtc; var diff = serverTime - fileInfo.LastWriteTimeUtc;
//Debug.Log($"{od.deckName}: serverTime: {serverTime} localTime: {fileInfo.LastWriteTimeUtc}"); //Debug.Log($"{od.deckName}: serverTime: {serverTime} localTime: {fileInfo.LastWriteTimeUtc} diff: {diff.TotalSeconds}");
if (diff.TotalSeconds > 5f || diff.TotalSeconds < -5f) if (diff.TotalSeconds > 1f || diff.TotalSeconds < -1f)
{ {
if (fileInfo.LastWriteTime > serverTime) if (fileInfo.LastWriteTime > serverTime)
decksNeedUpdateToServer.Add(deckName, decks[i]); decksNeedUpdateToServer.Add(deckName, decks[i]);
...@@ -320,11 +320,11 @@ namespace MDPro3.Servant ...@@ -320,11 +320,11 @@ namespace MDPro3.Servant
foreach (var deck in decksNeedUpdateToServer) foreach (var deck in decksNeedUpdateToServer)
{ {
Debug.LogFormat("卡组[{0}]需要更新上传。", deck.Key); Debug.LogFormat("卡组[{0}]需要更新上传。", deck.Key);
var time = DateTime.UtcNow;
var task = OnlineDeck.SyncDeck(deck.Value.deckId, deck.Key, deck.Value, false); var task = OnlineDeck.SyncDeck(deck.Value.deckId, deck.Key, deck.Value, time, false);
while (!task.IsCompleted) while (!task.IsCompleted)
yield return null; yield return null;
deck.Value.Save(deck.Key, DateTime.UtcNow, false); deck.Value.Save(deck.Key, time, false);
} }
//更新已经有Id的本地较旧卡组 //更新已经有Id的本地较旧卡组
foreach (var deck in decksNeedUpdateFromServer) foreach (var deck in decksNeedUpdateFromServer)
...@@ -340,6 +340,23 @@ namespace MDPro3.Servant ...@@ -340,6 +340,23 @@ namespace MDPro3.Servant
File.SetLastWriteTimeUtc(newPath, od.GetUpdateUtcTime()); File.SetLastWriteTimeUtc(newPath, od.GetUpdateUtcTime());
} }
//下载本地ID不存在的服务器卡组
//OnlineDeck.UploadDecks() 会刷新OnlineDeck.decks,因此本功能需要在[上传没有Id的本地卡组]之前执行
List<OnlineDeck.OnlineDeckData> odtd = new List<OnlineDeck.OnlineDeckData>();
foreach (var od in OnlineDeck.decks)
if (!od.isDelete)
if (!localFoundIds.Contains(od.deckId))
odtd.Add(od);
foreach (var deck in odtd)
{
Debug.LogFormat("卡组[{0}]需要下载。{1}", deck.deckName, deck.isDelete);
var d = new Deck(deck.deckYdk, string.Empty, string.Empty);
d.userId = MyCard.account.user.id.ToString();
d.deckId = deck.deckId;
d.Save(deck.deckName, deck.GetUpdateUtcTime());
}
//上传没有Id的本地卡组 //上传没有Id的本地卡组
if (decksNeedUpload.Count > 0) if (decksNeedUpload.Count > 0)
{ {
...@@ -358,21 +375,6 @@ namespace MDPro3.Servant ...@@ -358,21 +375,6 @@ namespace MDPro3.Servant
yield return null; yield return null;
} }
//下载本地ID不存在的服务器卡组
List<OnlineDeck.OnlineDeckData> odtd = new List<OnlineDeck.OnlineDeckData>();
foreach (var od in OnlineDeck.decks)
if (!od.isDelete)
if (!localFoundedIds.Contains(od.deckId))
odtd.Add(od);
foreach (var deck in odtd)
{
Debug.LogFormat("卡组[{0}]需要下载。{1}", deck.deckName, deck.isDelete);
var d = new Deck(deck.deckYdk, string.Empty, string.Empty);
d.userId = MyCard.account.user.id.ToString();
d.deckId = deck.deckId;
d.Save(deck.deckName, deck.GetUpdateUtcTime());
}
#if UNITY_EDITOR #if UNITY_EDITOR
MessageManager.Cast("Deck Sync Finished."); MessageManager.Cast("Deck Sync Finished.");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment