Browse Source

增加好友功能

LiuQilin 7 years ago
parent
commit
70aea133d2

+ 0 - 2
Assets/AtlasUtility/Script/Test.cs

@@ -46,7 +46,6 @@ namespace AtlasUtility
             //Debug.LogWarning("previous " + index);
             if (index < 0)
             {
-                VirtualScrollRectPlus.PreviousPageLock = true;
                 return null;
             }
             else
@@ -79,7 +78,6 @@ namespace AtlasUtility
             //Debug.LogWarning("next " + index);
             if (index >= MaxAmount)
             {
-                VirtualScrollRectPlus.NextPageLock = true;
                 return null;
             }
             else

BIN
Assets/Clipboard Image (2).png


+ 68 - 0
Assets/Clipboard Image (2).png.meta

@@ -0,0 +1,68 @@
+fileFormatVersion: 2
+guid: 1be5dc3d739ce824db68408da88f5a11
+timeCreated: 1511501925
+licenseType: Pro
+TextureImporter:
+  fileIDToRecycleName: {}
+  serializedVersion: 4
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 0
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: 1
+  maxTextureSize: 2048
+  textureSettings:
+    filterMode: -1
+    aniso: -1
+    mipBias: -1
+    wrapMode: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spritePixelsToUnits: 100
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+  spritePackingTag: 
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 0
Assets/Resource/Prefab/Object/DebugMode.prefab

@@ -131,6 +131,7 @@ MonoBehaviour:
   - {fileID: 1449331818472170, guid: d30fd90e19065bd4c93efcb54dc8261d, type: 2}
   - {fileID: 1729611064873092, guid: 2419a390c1816dd4298ae3170193f310, type: 2}
   - {fileID: 1626347861987158, guid: 7b82777cdb999ce468b189ea45f9d28d, type: 2}
+  - {fileID: 1413586954378082, guid: aee5f0274f4a5ce4c9ac82c88b9dc4cc, type: 2}
   AtlasList:
   - {fileID: 21300004, guid: b31bbacb2e0ff3d459f4878983a39b50, type: 3}
   - {fileID: 21300006, guid: b31bbacb2e0ff3d459f4878983a39b50, type: 3}

+ 41 - 32
Assets/Resource/Prefab/PrefabUI/Canvas.prefab

@@ -7587,7 +7587,7 @@ GameObject:
   - component: {fileID: 114312941865700024}
   - component: {fileID: 222566942698303926}
   - component: {fileID: 114382815244420980}
-  - component: {fileID: 114866938660241258}
+  - component: {fileID: 114475758369098218}
   m_Layer: 5
   m_Name: AH_ScrollRect
   m_TagString: Untagged
@@ -29603,6 +29603,46 @@ MonoBehaviour:
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
+--- !u!114 &114475758369098218
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1488130531046558}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 770e019109ba2f54cb52c7bd83f162aa, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Content: {fileID: 224589558856542952}
+  m_Horizontal: 0
+  m_Vertical: 1
+  m_MovementType: 1
+  m_Elasticity: 0.1
+  m_Inertia: 0
+  m_DecelerationRate: 0.135
+  m_ScrollSensitivity: 1
+  m_Viewport: {fileID: 0}
+  m_HorizontalScrollbar: {fileID: 0}
+  m_VerticalScrollbar: {fileID: 0}
+  m_HorizontalScrollbarVisibility: 0
+  m_VerticalScrollbarVisibility: 0
+  m_HorizontalScrollbarSpacing: 0
+  m_VerticalScrollbarSpacing: 0
+  m_OnValueChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0,
+      Culture=neutral, PublicKeyToken=null
+  FirstIndex: 0
+  LastIndex: 0
+  Inited: 0
+  LayoutGroup: {fileID: 0}
+  MaxRollAmount: 0
+  MaxChildAmount: 0
+  NextPageLock: 0
+  PreviousPageLock: 0
+  Children: []
 --- !u!114 &114476405182791364
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -42002,37 +42042,6 @@ MonoBehaviour:
       m_Calls: []
     m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
       Culture=neutral, PublicKeyToken=null
---- !u!114 &114866938660241258
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 1488130531046558}
-  m_Enabled: 1
-  m_EditorHideFlags: 0
-  m_Script: {fileID: 11500000, guid: 235c753c59692334b8eb0ebdbfe0822b, type: 3}
-  m_Name: 
-  m_EditorClassIdentifier: 
-  m_Content: {fileID: 224589558856542952}
-  m_Horizontal: 0
-  m_Vertical: 1
-  m_MovementType: 1
-  m_Elasticity: 0.1
-  m_Inertia: 0
-  m_DecelerationRate: 0.135
-  m_ScrollSensitivity: 1
-  m_Viewport: {fileID: 0}
-  m_HorizontalScrollbar: {fileID: 0}
-  m_VerticalScrollbar: {fileID: 0}
-  m_HorizontalScrollbarVisibility: 0
-  m_VerticalScrollbarVisibility: 0
-  m_HorizontalScrollbarSpacing: 0
-  m_VerticalScrollbarSpacing: 0
-  m_OnValueChanged:
-    m_PersistentCalls:
-      m_Calls: []
-    m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0,
-      Culture=neutral, PublicKeyToken=null
 --- !u!114 &114867534561502184
 MonoBehaviour:
   m_ObjectHideFlags: 1

+ 1 - 1
Assets/Resource/Prefab/PrefabUI/MessageItem.prefab.meta

@@ -4,5 +4,5 @@ timeCreated: 1511250560
 licenseType: Pro
 NativeFormatImporter:
   userData: 
-  assetBundleName: 
+  assetBundleName: ui
   assetBundleVariant: 

+ 4 - 0
Assets/Resource/XML/lan/ChineseSimplified.xml

@@ -247,6 +247,9 @@
     <AH_Loading desc=""><![CDATA[加载中]]></AH_Loading>
     <AH_LoadSucceed desc=""><![CDATA[加载成功]]></AH_LoadSucceed>
     <AH_LoadFailed desc=""><![CDATA[加载失败]]></AH_LoadFailed>
+    <AH_PrivateMessageEmpty desc=""><![CDATA[发送内容不能为空]]></AH_PrivateMessageEmpty>
+    <AH_SendPrivateMessageFailed desc=""><![CDATA[发送失败]]></AH_SendPrivateMessageFailed>
+    <AH_Current desc=""><![CDATA[刚刚]]></AH_Current>
   </UI>
   <FriendItem>
     <MinutesAgo desc=""><![CDATA[[&value&]分钟前]]></MinutesAgo>
@@ -270,6 +273,7 @@
   <CommentItem>
     <AddFriend desc=""><![CDATA[加为好友]]></AddFriend>
     <SendMessage desc=""><![CDATA[私信]]></SendMessage>
+    <Me desc=""><![CDATA[[我]]]></Me>
   </CommentItem>
   <PlazaroomMemberItem>
     <AddFriend desc=""><![CDATA[加为好友]]></AddFriend>

+ 4 - 0
Assets/Resource/XML/lan/ChineseTraditional.xml

@@ -247,6 +247,9 @@
     <AH_Loading desc=""><![CDATA[]]></AH_Loading>
     <AH_LoadSucceed desc=""><![CDATA[]]></AH_LoadSucceed>
     <AH_LoadFailed desc=""><![CDATA[]]></AH_LoadFailed>
+    <AH_PrivateMessageEmpty desc=""><![CDATA[]]></AH_PrivateMessageEmpty>
+    <AH_SendPrivateMessageFailed desc=""><![CDATA[]]></AH_SendPrivateMessageFailed>
+    <AH_Current desc=""><![CDATA[]]></AH_Current>
   </UI>
   <FriendItem>
     <MinutesAgo desc=""><![CDATA[]]></MinutesAgo>
@@ -270,6 +273,7 @@
   <CommentItem>
     <AddFriend desc=""><![CDATA[]]></AddFriend>
     <SendMessage desc=""><![CDATA[]]></SendMessage>
+    <Me desc=""><![CDATA[]]></Me>
   </CommentItem>
   <PlazaroomMemberItem>
     <AddFriend desc=""><![CDATA[]]></AddFriend>

+ 4 - 0
Assets/Resource/XML/lan/English.xml

@@ -247,6 +247,9 @@ Program 水怪
     <AH_Loading desc=""><![CDATA[]]></AH_Loading>
     <AH_LoadSucceed desc=""><![CDATA[]]></AH_LoadSucceed>
     <AH_LoadFailed desc=""><![CDATA[]]></AH_LoadFailed>
+    <AH_PrivateMessageEmpty desc=""><![CDATA[]]></AH_PrivateMessageEmpty>
+    <AH_SendPrivateMessageFailed desc=""><![CDATA[]]></AH_SendPrivateMessageFailed>
+    <AH_Current desc=""><![CDATA[]]></AH_Current>
   </UI>
   <FriendItem>
     <MinutesAgo desc=""><![CDATA[]]></MinutesAgo>
@@ -270,6 +273,7 @@ Program 水怪
   <CommentItem>
     <AddFriend desc=""><![CDATA[]]></AddFriend>
     <SendMessage desc=""><![CDATA[]]></SendMessage>
+    <Me desc=""><![CDATA[]]></Me>
   </CommentItem>
   <PlazaroomMemberItem>
     <AddFriend desc=""><![CDATA[]]></AddFriend>

BIN
Assets/Resource/Xlsx/language_config.xlsx


+ 4 - 0
Assets/Script/Label/LanguageLabel.cs

@@ -245,6 +245,9 @@ public class LanguageLabel
 	public static string UI__AH_Loading = "UI__AH_Loading";
 	public static string UI__AH_LoadSucceed = "UI__AH_LoadSucceed";
 	public static string UI__AH_LoadFailed = "UI__AH_LoadFailed";
+	public static string UI__AH_PrivateMessageEmpty = "UI__AH_PrivateMessageEmpty";
+	public static string UI__AH_SendPrivateMessageFailed = "UI__AH_SendPrivateMessageFailed";
+	public static string UI__AH_Current = "UI__AH_Current";
 	
 	public static string FriendItem = "FriendItem";
 	public static string FriendItem__MinutesAgo = "FriendItem__MinutesAgo";
@@ -268,6 +271,7 @@ public class LanguageLabel
 	public static string CommentItem = "CommentItem";
 	public static string CommentItem__AddFriend = "CommentItem__AddFriend";
 	public static string CommentItem__SendMessage = "CommentItem__SendMessage";
+	public static string CommentItem__Me = "CommentItem__Me";
 	
 	public static string PlazaroomMemberItem = "PlazaroomMemberItem";
 	public static string PlazaroomMemberItem__AddFriend = "PlazaroomMemberItem__AddFriend";

+ 109 - 107
Assets/Script/Manage/HttpManager.cs

@@ -160,93 +160,42 @@ public class HttpManager : Regist
     public static string AcceptApplicantURL = NewBaseURL + "/buddy/agree";
     public static string GetRecommendBuddyListURL = NewBaseURL + "/buddy/recommend";
     public static string SearchBuddyURL = NewBaseURL + "/buddy/like";
+    public static string GetPrivateMessageURL = NewBaseURL + "/comment/find";
     public static string ReportMailAddress = "bug@dashgame.com";
 
     #endregion
 
     public void Awake()
     {
-        //AddComment("1709110834264628935 ", "1710065808151506837", "你好", CommentType.Garden);
-
-        //URLRequestData requestData = new URLRequestData();
-        //requestData.Add("u", "1710065808151506837");
-        //requestData.Add("n", "甜美的铃铛");
-        //URLRequest.CreateStrURLRequest(true, SearchBuddyURL, requestData, data => Debug.Log("搜索好友返回结果 " + data), URLRequest.Method.POST);
-
-        //URLRequestData requestData = new URLRequestData();
-        //requestData.Add("u", 1710065808151506837);
-        //URLRequest.CreateStrURLRequest(true, GetApplicantListURL, requestData, data => Debug.Log("获取申请列表返回结果 " + data), URLRequest.Method.POST);
-
-        //URLRequestData requestData = new URLRequestData();
-        //requestData.Add("u", 1710065808151506837);
-        //URLRequest.CreateStrURLRequest(true, GetBuddyListURL, requestData, data => Debug.Log("查看好友列表返回结果 " + data), URLRequest.Method.POST);
+        //URLRequestData urlData = new URLRequestData();
+        //urlData.Add("u", "1709207727231988804");
+        //urlData.Add("p", "0");
+        //urlData.Add("t", CommentType.Garden.GetHashString());
+
+        //URLRequest.CreateURLRequest
+        //(
+        //    true,
+        //    GetCommentURL,
+        //    urlData,
+        //    data =>
+        //    {
+        //        Debug.Log(data.ToJson());
+        //    },
+        //    URLRequest.Method.POST
+        //);
+
+        //SendPrivateMessage("1709207727231988804", "你好", "1709110839194378775");
+        //GetPrivateMessage("1709110839194378775", "1", data => {}, () => {}, "1709207727231988804");
 
         //URLRequestData requestData = new URLRequestData();
         //requestData.Add("b", 1710065808151506837);
         //requestData.Add("u", 1709110837794360346);
         //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData = new URLRequestData();
-        //requestData.Add("b", 1710065808151506837);
-        //requestData.Add("u", 1709110742885333235);
-        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData = new URLRequestData();
-        //requestData.Add("b", 1710065808151506837);
-        //requestData.Add("u", 1709110751808885702);
-        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData = new URLRequestData();
-        //requestData.Add("b", 1710065808151506837);
-        //requestData.Add("u", 1709110821992596239);
-        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData = new URLRequestData();
-        //requestData.Add("b", 1710065808151506837);
-        //requestData.Add("u", 1709110822575416146);
-        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData = new URLRequestData();
-        //requestData.Add("b", 1710065808151506837);
-        //requestData.Add("u", 1709110823081672996);
-        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData = new URLRequestData();
-        //requestData.Add("b", 1710065808151506837);
-        //requestData.Add("u", 1709110833705246366);
-        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData = new URLRequestData();
-        //requestData.Add("b", 1710065808151506837);
-        //requestData.Add("u", 1709110834264628935);
-        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData = new URLRequestData();
-        //requestData.Add("b", 1710065808151506837);
-        //requestData.Add("u", 1709110834736509581);
-        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData.Add("b", 1709207727231988804);
-        //requestData.Add("u", 1709110839194378775);
-        //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData = new URLRequestData();
-        //requestData.Add("u", 1710065808151506837);
-        //requestData.Add("b", 1710065808151506837);
-        //URLRequest.CreateStrURLRequest(true, AcceptApplicantURL, requestData, data => Debug.Log("同意加为好友返回结果 " + data), URLRequest.Method.POST);
-
-        //requestData = new URLRequestData();
-        //requestData.Add("u", 1710065808151506837);
-        //requestData.Add("b", 1710065808151506837);
-        //URLRequest.CreateStrURLRequest(true, DeleteBuddyURL, requestData, data => Debug.Log("删除/拒绝好友返回结果 " + data), URLRequest.Method.POST);
-
-        //URLRequestData requestData = new URLRequestData();
-        //requestData.Add("u", 1709207727231988804);
-        //URLRequest.CreateStrURLRequest(true, GetRecommendBuddyListURL, requestData, data => Debug.Log("获取推荐好友列表返回结果 " + data), URLRequest.Method.POST);
     }
 
     public void Update()
     {
+        //Debug.Log(SerialNumber);
         if (!Manager.Inited && !Inited)
         {
             ReconnectTimeTimer += Time.deltaTime;
@@ -1293,50 +1242,80 @@ public class HttpManager : Regist
         );
     }
 
-    public static void GetPrivateMessage(string targetSerialNumber, string page, CommentType type, Action<JsonData> callback, string selfSerialNumber = null)
+    public static void GetPrivateMessage(string targetSerialNumber, string page, Action<string, string, List<PrivateMessageData>> succeedCallback, Action failedCallback,  string selfSerialNumber = null)
     {
-        if (selfSerialNumber == null)
-        {
-            selfSerialNumber = SerialNumber;
-        }
-
-        URLRequestData urlData = new URLRequestData();
-        urlData.Add("u", selfSerialNumber);
-        urlData.Add("p", page);
-        urlData.Add("t", type.GetHashCode());
-
-        URLRequest.CreateURLRequest
+        DelayCall.Call
         (
-            true,
-            GetCommentURL,
-            urlData,
-            data =>
+            1f,
+            () =>
             {
-                Debug.Log(data.ToJson());
-                callback(data);
-            },
-            URLRequest.Method.POST
+                List<PrivateMessageData> accountDatas = new List<PrivateMessageData>();
+                for (int i = 0; i < 20; i++)
+                {
+                    string serialNumber = Random.Range(0f, 1f) < 0.5f ? "1709110839194378775" : SerialNumber;
+                    string nickname = "篮球";
+                    string content = "篮球的留言" + int.Parse(page)*20 + i;
+                    accountDatas.Add(new PrivateMessageData(serialNumber, nickname, content, CurrentDateTime));
+                }
+                succeedCallback.Invoke("1709110839194378775", page, accountDatas);
+            }
         );
+
+        //if (selfSerialNumber == null)
+        //{
+        //    selfSerialNumber = SerialNumber;
+        //}
+
+        //URLRequestData urlData = new URLRequestData();
+        //urlData.Add("u", selfSerialNumber);
+        //urlData.Add("u", TargetURL);
+        //urlData.Add("t", CommentType.PrivateMessage.GetHashString());
+        //urlData.Add("p", page);
+
+        //URLRequest.CreateURLRequest
+        //(
+        //    true,
+        //    GetPrivateMessageURL,
+        //    urlData,
+        //    jData =>
+        //    {
+        //        if (jData.Inst_Object.ContainsKey("l"))
+        //        {
+        //            jData = jData["l"];
+        //            List<PrivateMessageData> privateMessageDatas = new List<PrivateMessageData>();
+        //            for (int i = 0; i < jData.Count; i++)
+        //            {
+        //                string content = (string)jData[i]["c"];
+        //                string nickname = (string)jData[i]["n"];
+        //                string dateString = (string)jData[i]["t"];
+        //                string serialNumber = (string)jData[i]["c"];
+        //                DateTime date = DateTime.Parse(dateString);
+        //                privateMessageDatas.Add(new PrivateMessageData(serialNumber, nickname, content, date));
+        //            }
+        //            succeedCallback.Invoke(targetSerialNumber, page, privateMessageDatas);
+        //        }
+        //        else
+        //        {
+        //            failedCallback.Invoke();
+        //        }
+        //    },
+        //    URLRequest.Method.POST
+        //);
     }
 
-    public static void SendPrivateMessage(string sendID, string receiveID, string content, CommentType type)
+    public static void SendPrivateMessage(string targetSerialNumber, string content, Action<string, string> succeedCallback, Action failedCallback, string selfSerialNumber = null)
     {
-        if (string.IsNullOrEmpty(sendID) || string.IsNullOrEmpty(receiveID))
-        {
-            return;
-        }
-
-        if (sendID.ToLower() == PlayerConfigLabel.DefaultID.ToLower() || receiveID.ToLower() == PlayerConfigLabel.DefaultID.ToLower())
+        if (selfSerialNumber == null)
         {
-            return;
+            selfSerialNumber = SerialNumber;
         }
 
         URLRequestData urlData = new URLRequestData();
 
-        urlData.Add("c", sendID);
-        urlData.Add("u", receiveID);
+        urlData.Add("c", selfSerialNumber);
+        urlData.Add("u", targetSerialNumber);
         urlData.Add("i", content);
-        urlData.Add("t", type.GetHashCode());
+        urlData.Add("t", CommentType.PrivateMessage.GetHashString());
 
         URLRequest.CreateStrURLRequest
         (
@@ -1345,14 +1324,13 @@ public class HttpManager : Regist
             urlData,
             data =>
             {
-                if (data == "{\"error\":0}")
+                if (data.Trim() == ResultCode.NoError)
                 {
-                    Bubble.Show(Language.GetStr(LanguageLabel.UI__Q_CommentDone));
-                    SocialManager.UpdateCommentPage(false);
+                    succeedCallback.Invoke(targetSerialNumber, content);
                 }
                 else
                 {
-                    Bubble.Show(Language.GetStr(LanguageLabel.UI__Q_CommentFail));
+                    failedCallback.Invoke();
                 }
             },
             URLRequest.Method.POST
@@ -1503,4 +1481,28 @@ public class HttpManager : Regist
 
         return sb.ToString();
     }
+
+
+    public static string GetTimespanAndTransfer(DateTime dateTime)
+    {
+        TimeSpan timeSpan = CurrentDateTime.Subtract(dateTime);
+        if (timeSpan.TotalMinutes < 60)
+        {
+            string content = Language.GetStr(LanguageLabel.ApplicantItem__MinutesAgo);
+            content = content.Replace(TransferLabel.Value, timeSpan.TotalMinutes.ToString("0"));
+            return content;
+        }
+        else if (timeSpan.TotalHours < 24)
+        {
+            string content = Language.GetStr(LanguageLabel.ApplicantItem__HoursAgo);
+            content = content.Replace(TransferLabel.Value, timeSpan.TotalMinutes.ToString("0"));
+            return content;
+        }
+        else
+        {
+            string content = Language.GetStr(LanguageLabel.ApplicantItem__DaysAgo);
+            content = content.Replace(TransferLabel.Value, timeSpan.TotalMinutes.ToString("0"));
+            return content;
+        }
+    }
 }

+ 1 - 0
Assets/Script/Manage/ResourceManager.cs

@@ -52,6 +52,7 @@ public enum ObjType
     MailItem,
     ApplicantItem,
     GardenInfoItem,
+    PrivateMessageItem,
     PlazaroomMemberItem,
     PlazaroomInfoItem,
     FriendItem,

+ 1 - 19
Assets/Script/Social/ApplicantItem.cs

@@ -80,25 +80,7 @@ public class ApplicantItem : VirtualScrollRectItem
     {
         AccountData = accountData;
         NicknameTitle.text = accountData.Nickname;
-        TimeSpan timeSpan = HttpManager.CurrentDateTime.Subtract(accountData.LastLoginDate);
-        if (timeSpan.TotalMinutes < 60)
-        {
-            string content = Language.GetStr(LanguageLabel.ApplicantItem__MinutesAgo);
-            content = content.Replace(TransferLabel.Value, timeSpan.TotalMinutes.ToString("0"));
-            ContentTitle.text = content;
-        }
-        else if (timeSpan.TotalHours < 24)
-        {
-            string content = Language.GetStr(LanguageLabel.ApplicantItem__HoursAgo);
-            content = content.Replace(TransferLabel.Value, timeSpan.TotalMinutes.ToString("0"));
-            ContentTitle.text = content;
-        }
-        else
-        {
-            string content = Language.GetStr(LanguageLabel.ApplicantItem__DaysAgo);
-            content = content.Replace(TransferLabel.Value, timeSpan.TotalMinutes.ToString("0"));
-            ContentTitle.text = content;
-        }
+        ContentTitle.text = HttpManager.GetTimespanAndTransfer(accountData.LastLoginDate);
     }
 
 

+ 27 - 3
Assets/Script/Social/FriendPanel.cs

@@ -51,6 +51,9 @@ public class FriendPanel : Regist
     public static List<FriendItem> FriendItems = new List<FriendItem>();
     public static List<AccountData> FriendAccountDatas = new List<AccountData>();
 
+    private static float RefreshPrivateMessageTime = 15f;
+    private static float RefreshPrivateMessageTimer;
+
     public static bool HaveNewApplicant;
     public static bool HaveNewPrivateMessage
     {
@@ -142,6 +145,13 @@ public class FriendPanel : Regist
             RefreshFriendTimer = 0;
             RefreshFriendList();
         }
+
+        RefreshPrivateMessageTimer += Time.deltaTime;
+        if (RefreshPrivateMessageTimer >= RefreshPrivateMessageTime)
+        {
+            RefreshPrivateMessageTimer = 0;
+            //RefreshPrivateMessage();
+        }
     }
 
 
@@ -220,6 +230,7 @@ public class FriendPanel : Regist
         {
             OnFriendListRefresh.Invoke(accountDatas);
         }
+        RefreshPrivateMessage();
     }
 
 
@@ -252,10 +263,10 @@ public class FriendPanel : Regist
 
     private static void RefreshApplicantCallback(List<AccountData> accountDatas)
     {
-        foreach (var applicantItem in ApplicantItems)
+        for (int i = 0; i < ApplicantItems.Count; i++)
         {
-            SaveApplicantItem(applicantItem);
-        }   
+            SaveApplicantItem(ApplicantItems[i--]);
+        }
         for (int i = 0; i < accountDatas.Count; i++)
         {
             AddApplicantItem(accountDatas[i]);
@@ -309,6 +320,19 @@ public class FriendPanel : Regist
     }
 
 
+    private static void RefreshPrivateMessage()
+    {
+        foreach (var friendAccountData in FriendAccountDatas)
+        {
+            if (!MessagePanel.PrivateMessageDataDictionary.ContainsKey(friendAccountData.SerialNumber))
+            {
+                MessagePanel.PrivateMessageDataDictionary.Add(friendAccountData.SerialNumber, new PrivateMessageDataStash());
+            }
+            HttpManager.GetPrivateMessage(friendAccountData.SerialNumber, "0", MessagePanel.RefreshPrivateMessageSucceedCallback, MessagePanel.RefreshPrivateMessageFailedCallback);
+        }
+    }
+
+
     public static void OpenRootFriendPanel()
     {
         AudioManager.PlayClip(ResourceLabel.BtnClip);

+ 170 - 3
Assets/Script/Social/MessagePanel.cs

@@ -5,6 +5,41 @@ using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
+public class PrivateMessageDataStash
+{
+    private static int MaxPageAmount = 20;
+
+    public int CurrentPage;
+    public List<PrivateMessageData> PrivateMessageDatas = new List<PrivateMessageData>();
+
+    public void Add(int page, List<PrivateMessageData> datas)
+    {
+        if (page < CurrentPage)
+        {
+            return;
+        }
+        
+        CurrentPage = page;
+        if (PrivateMessageDatas.Count <= page*MaxPageAmount)
+        {
+            PrivateMessageDatas.AddRange(datas);
+        }
+        else 
+        {
+            for (int i = page * MaxPageAmount; i < PrivateMessageDatas.Count; i++)
+            {
+                PrivateMessageDatas.RemoveAt(i--);
+            }
+            PrivateMessageDatas.AddRange(datas);
+        }
+    }
+
+    public int GetNextPageIndex()
+    {
+        return PrivateMessageDatas.Count/ MaxPageAmount;
+    }
+}
+
 public class MessagePanel : Regist
 {
     #region Config
@@ -25,9 +60,16 @@ public class MessagePanel : Regist
     public static Transform Grid;
     public static Transform MessagePanelMask;
     public static InputField InputField;
-    public static ScrollRectPlus ScrollRect;
+    public static VirtualScrollRectPlus ScrollRect;
+
+    private static int MaxRollAmount = 4;
+    private static int MaxChildAmount = 10;
+    private static bool DownloadingPrivateMessageFlag;
 
+    public static bool IsPanelOpen;
     public static AccountData AccountData;
+    public static List<PrivateMessageItem> PrivateMessageItems = new List<PrivateMessageItem>();
+    public static Dictionary<string, PrivateMessageDataStash> PrivateMessageDataDictionary = new Dictionary<string, PrivateMessageDataStash>();
 
     #endregion
 
@@ -47,7 +89,8 @@ public class MessagePanel : Regist
         Grid = ResourceManager.Get(ObjectLabel.AH_Grid);
         MessagePanelMask = ResourceManager.Get(ObjectLabel.AH_MessagePanelMask);
         InputField = ResourceManager.Get<InputField>(ObjectLabel.AH_InputField);
-        ScrollRect = ResourceManager.Get<ScrollRectPlus>(ObjectLabel.AH_ScrollRect);
+        ScrollRect = ResourceManager.Get<VirtualScrollRectPlus>(ObjectLabel.AH_ScrollRect);
+        ScrollRect.Init(MaxRollAmount, MaxChildAmount, GetNextItem, GetPreviousItem, OnSaveItem);
 
         LoadingTitle.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
         TweenRoot tweenRoot = MessagePanelMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
@@ -65,27 +108,151 @@ public class MessagePanel : Regist
         SendMessageButton.onClick.AddListener(SendMessage);
     }
 
+
     public static void OpenPanel(AccountData accountData)
     {
+        IsPanelOpen = true;
+        DownloadingPrivateMessageFlag = false;
         AccountData = accountData;
         MessagePanelMask.TweenForCG();
+        RefreshScrollRect();
     }
 
     public static void ClosePanel()
     {
         AudioManager.PlayClip(ResourceLabel.CloseClip);
+        IsPanelOpen = false;
         MessagePanelMask.TweenBacCG();
     }
 
+
+    private void OnSaveItem(int dataIndex, VirtualScrollRectItem item)
+    {
+        ResourceManager.Save(item);
+        PrivateMessageItems.Remove((PrivateMessageItem) item);
+    }
+
+    private VirtualScrollRectItem GetNextItem(int dataIndex)
+    {
+        PrivateMessageDataStash dataStash = PrivateMessageDataDictionary[AccountData.SerialNumber];
+        if (dataStash.PrivateMessageDatas.Count > dataIndex)
+        {
+            PrivateMessageData data = dataStash.PrivateMessageDatas[dataIndex];
+            PrivateMessageItem item = GetItem(data);
+            PrivateMessageItems.Add(item);
+            return item;
+        }
+        else
+        {
+            if (!DownloadingPrivateMessageFlag)
+            {
+                DownloadingPrivateMessageFlag = true;
+                LoadingTitle.text = Language.GetStr(LanguageLabel.UI__AH_Loading);
+                LoadingTitle.TweenForCG();
+                HttpManager.GetPrivateMessage(AccountData.SerialNumber, dataStash.GetNextPageIndex().ToString(), DownloadPrivateMessageSucceedCallback, DownloadPrivateMessageFailedCallback);
+            }
+            return null;
+        }
+    }
+
+    private VirtualScrollRectItem GetPreviousItem(int dataIndex)
+    {
+        if (dataIndex < 0)
+        {
+            return null;
+        }
+
+        PrivateMessageDataStash dataStash = PrivateMessageDataDictionary[AccountData.SerialNumber];
+        PrivateMessageData data = dataStash.PrivateMessageDatas[dataIndex];
+        PrivateMessageItem item = GetItem(data);
+        PrivateMessageItems.Insert(0, item);
+        return item;
+    }
+
+    public static PrivateMessageItem GetItem(PrivateMessageData data)
+    {
+        PrivateMessageItem item = ResourceManager.Get(PrivateMessageItemLabel.MessageItem, Folder.UI, false, ScrollRect.content, false, ObjType.PrivateMessageItem, typeof(PrivateMessageItem)).GetComponent<PrivateMessageItem>();
+        item.Init();
+        item.Reset(data);
+        return item;
+    }
+
+
+    public static void RefreshPrivateMessageFailedCallback()
+    {
+        
+    }
+
+    public static void RefreshPrivateMessageSucceedCallback(string targetSerialNumber, string page, List<PrivateMessageData> datas)
+    {
+        PrivateMessageDataStash dataStash = PrivateMessageDataDictionary[targetSerialNumber];
+        dataStash.Add(int.Parse(page), datas);
+
+        if (IsPanelOpen && targetSerialNumber == AccountData.SerialNumber)
+        {
+            RefreshScrollRect();
+        }
+    }
+
+    public static void RefreshScrollRect()
+    {
+        ScrollRect.SaveAllChild();
+        ScrollRect.NextPage();
+        ScrollRect.NextPage();
+    }
+
+
+    public static void DownloadPrivateMessageFailedCallback()
+    {
+        DownloadingPrivateMessageFlag = false;
+        LoadingTitle.text = Language.GetStr(LanguageLabel.UI__AH_LoadFailed);
+        DelayCall.Call(1f, () => LoadingTitle.TweenBacCG());
+    }
+
+    public static void DownloadPrivateMessageSucceedCallback(string targetSerialNumber, string page, List<PrivateMessageData> datas)
+    {
+        DownloadingPrivateMessageFlag = false;
+        LoadingTitle.text = Language.GetStr(LanguageLabel.UI__AH_LoadSucceed);
+        DelayCall.Call(1f, () => LoadingTitle.TweenBacCG());
+        PrivateMessageDataStash dataStash = PrivateMessageDataDictionary[targetSerialNumber];
+        dataStash.Add(int.Parse(page), datas);
+    }
+
+
     private static void SendMessage()
     {
+        if (string.IsNullOrEmpty(InputField.text))
+        {
+            Bubble.Show(null, Language.GetStr(LanguageLabel.UI__AH_PrivateMessageEmpty));
+            return;
+        }
+
         AudioManager.PlayClip(ResourceLabel.BtnClip);
         InputField.text = "";
+        HttpManager.SendPrivateMessage(AccountData.SerialNumber, InputField.text, SendMessageSucceedCallback, SendMessageFailedCallback);
         SendMessageButton.interactable = false;
     }
 
-    private static void SendMessageCallback()
+    private static void SendMessageFailedCallback()
+    {
+        SendMessageButton.interactable = true;
+        Bubble.Show(null, Language.GetStr(LanguageLabel.UI__AH_SendPrivateMessageFailed));
+    }
+
+    private static void SendMessageSucceedCallback(string targetSerialNumber, string content)
     {
         SendMessageButton.interactable = true;
+        if (IsPanelOpen && targetSerialNumber == AccountData.SerialNumber)
+        {
+            foreach (var key in ScrollRect.ChildrenDataIndexDictionary.Keys)
+            {
+                ScrollRect.ChildrenDataIndexDictionary[key] = ScrollRect.ChildrenDataIndexDictionary[key] + 1;
+            }
+            PrivateMessageData data = new PrivateMessageData(HttpManager.SerialNumber, NickNameManager.NickName, content, HttpManager.CurrentDateTime);
+            PrivateMessageItem item = GetItem(data);
+            ScrollRect.InsertChildToFirst(0, item, true, -1);
+
+            HttpManager.GetPrivateMessage(targetSerialNumber, "0", RefreshPrivateMessageSucceedCallback, RefreshPrivateMessageFailedCallback);
+        }
     }
 }

+ 54 - 4
Assets/Script/Social/PrivateMessageItem.cs

@@ -1,12 +1,24 @@
-using System.Collections;
+using System;
+using System.Collections;
 using System.Collections.Generic;
 
 using UnityEngine;
+using UnityEngine.UI;
 
 public class PrivateMessageData
 {
+    public string SerialNumber;
     public string Nickname;
     public string Content;
+    public DateTime Date;
+
+    public PrivateMessageData(string serialNumber, string nickname, string content, DateTime date)
+    {
+        SerialNumber = serialNumber;
+        Nickname = nickname;
+        Content = content;
+        Date = date;
+    }
 }
 
 public class PrivateMessageItemLabel
@@ -21,10 +33,48 @@ public class PrivateMessageItemLabel
 public class PrivateMessageItem : VirtualScrollRectItem
 {
     #region Config
-    
-    
-    
+
+    public Text NicknameTitle;
+    public Text ContentTitle;
+    public Text TimeTitle;
+
+    public PrivateMessageData PrivateMessageData;
+
     #endregion
 
+    public override bool Init()
+    {
+        if (base.Init())
+        {
+            return true;
+        }
+
+        Dictionary<string, Transform> childDictionary = new Dictionary<string, Transform>();
+        Auxiliary.CompileDic(transform, childDictionary);
+
+        NicknameTitle = childDictionary[PrivateMessageItemLabel.Nickname].GetComponent<Text>();
+        ContentTitle = childDictionary[PrivateMessageItemLabel.Content].GetComponent<Text>();
+        TimeTitle = childDictionary[PrivateMessageItemLabel.Time].GetComponent<Text>();
+
+        return false;
+    }
+
+
+    public void Reset(PrivateMessageData privateMessageData)
+    {
+        PrivateMessageData = privateMessageData;
+        ContentTitle.text = privateMessageData.Content;
+        TimeTitle.text = HttpManager.GetTimespanAndTransfer(privateMessageData.Date);
 
+        if (privateMessageData.SerialNumber == HttpManager.SerialNumber)
+        {
+            NicknameTitle.text = Language.GetStr(LanguageLabel.CommentItem__Me);
+            NicknameTitle.color = Lib.PrivateMessageSelfGreen;
+        }
+        else
+        {
+            NicknameTitle.text = privateMessageData.Nickname;
+            NicknameTitle.color = Lib.PrivateMessageOtherBlack;
+        }
+    }
 }

+ 51 - 36
Assets/Script/Social/VirtualScrollRectPlus.cs

@@ -8,7 +8,7 @@ using UnityEngine.UI;
 
 public class VirtualScrollRectPlus : ScrollRect
 {
-    #region Config //上锁 解锁 对象池 需要外部实现
+    #region Config //对象池需要外部实现
 
     public Action OnVerticalLessEqual0;
     public Action OnVerticalGreaterEqual1;
@@ -26,8 +26,6 @@ public class VirtualScrollRectPlus : ScrollRect
 
     public int MaxRollAmount;
     public int MaxChildAmount;
-    public bool NextPageLock;
-    public bool PreviousPageLock;
     public List<VirtualScrollRectItem> Children = new List<VirtualScrollRectItem>();
     public Dictionary<VirtualScrollRectItem, int> ChildrenDataIndexDictionary = new Dictionary<VirtualScrollRectItem, int>();
 
@@ -46,22 +44,16 @@ public class VirtualScrollRectPlus : ScrollRect
         {
             if (horizontalNormalizedPosition <= 0)
             {
-                if (!PreviousPageLock)
-                {
-                    Vector2 widthAndHeight = PreviousPage();
-                    Roll(new Vector2(-widthAndHeight.x, 0));
-                }
+                Vector2 widthAndHeight = PreviousPage();
+                Roll(new Vector2(-widthAndHeight.x, 0));
 
                 OnHorizontalGreaterEqual1.SafeInvoke();
             }
 
             if (horizontalNormalizedPosition >= 1)
             {
-                if (!NextPageLock)
-                {
-                    Vector2 widthAndHeight = NextPage();
-                    Roll(new Vector2(widthAndHeight.x, 0));
-                }
+                Vector2 widthAndHeight = NextPage();
+                Roll(new Vector2(widthAndHeight.x, 0));
 
                 OnHorizontalLessEqual0.SafeInvoke();
             }
@@ -70,22 +62,17 @@ public class VirtualScrollRectPlus : ScrollRect
         {
             if (verticalNormalizedPosition >= 1)
             {
-                if (!PreviousPageLock)
-                {
-                    Vector2 widthAndHeight = PreviousPage();
-                    Roll(new Vector2(0, widthAndHeight.y));
-                }
+                Vector2 widthAndHeight = PreviousPage();
+                Roll(new Vector2(0, widthAndHeight.y));
 
                 OnVerticalGreaterEqual1.SafeInvoke();
             }
 
             if (verticalNormalizedPosition <= 0)
             {
-                if (!NextPageLock)
-                {
-                    Vector2 widthAndHeight = NextPage();
-                    Roll(new Vector2(0, -widthAndHeight.y));
-                }
+
+                Vector2 widthAndHeight = NextPage();
+                Roll(new Vector2(0, -widthAndHeight.y));
 
                 OnVerticalLessEqual0.SafeInvoke();
             }
@@ -104,6 +91,14 @@ public class VirtualScrollRectPlus : ScrollRect
         OnSaveItem = onSaveItem;
     }
 
+    public void SaveAllChild()
+    {
+        while (Children.Count > 0)
+        {
+            SaveFirstChild();
+        }
+    }
+
     public void SaveChild(VirtualScrollRectItem item)
     {
         int dataIndex = ChildrenDataIndexDictionary[item];
@@ -133,23 +128,45 @@ public class VirtualScrollRectPlus : ScrollRect
         SaveChild(Children.Back(0));
     }
 
-    public void InsertChild(int siblingIndex, int dataIndex, VirtualScrollRectItem item)
+    public VirtualScrollRectItem InsertChild(int siblingIndex, int dataIndex, VirtualScrollRectItem item, bool saveItem = false, int savaSiblingIndex = 0)
     {
+        VirtualScrollRectItem savedItem = null;
+        if (saveItem && Children.Count >= MaxChildAmount)
+        {
+            if (savaSiblingIndex == -1)
+            {
+                savedItem = Children.Back(0);
+            }
+            else
+            {
+                savedItem = Children[savaSiblingIndex];
+            }
+
+            if (siblingIndex == Children.Count)
+            {
+                siblingIndex--;
+            }
+
+            SaveChild(savedItem);
+        }
+
         Children.Insert(siblingIndex, item);
         ChildrenDataIndexDictionary.Add(item, dataIndex);
         item.transform.SetSiblingIndex(siblingIndex);
         FirstIndex = ChildrenDataIndexDictionary[Children[0]];
         LastIndex = ChildrenDataIndexDictionary[Children.Back(0)];
+
+        return savedItem;
     }
 
-    public void InsertChildToFirst(int dataIndex, VirtualScrollRectItem item)
+    public VirtualScrollRectItem InsertChildToFirst(int dataIndex, VirtualScrollRectItem item, bool saveItem = false, int savaSiblingIndex = 0)
     {
-        InsertChild(0, dataIndex, item);
+        return InsertChild(0, dataIndex, item, saveItem, savaSiblingIndex);
     }
 
-    public void InsertChildToLast(int dataIndex, VirtualScrollRectItem item)
+    public VirtualScrollRectItem InsertChildToLast(int dataIndex, VirtualScrollRectItem item, bool saveItem = false, int savaSiblingIndex = 0)
     {
-        InsertChild(Children.Count, dataIndex, item);
+        return InsertChild(Children.Count, dataIndex, item, saveItem, savaSiblingIndex);
     }
 
 
@@ -167,12 +184,11 @@ public class VirtualScrollRectPlus : ScrollRect
             }
             else
             {
-                if (Children.Count >= MaxChildAmount)
+                VirtualScrollRectItem savedItem = InsertChildToLast(dataIndex, item, true, 0);
+                if (savedItem != null)
                 {
-                    SaveFirstChild();
-                    rolledItems.Add(item);
+                    rolledItems.Add(savedItem);
                 }
-                InsertChildToLast(dataIndex, item);
             }
         }
 
@@ -194,12 +210,11 @@ public class VirtualScrollRectPlus : ScrollRect
             }
             else
             {
-                if (Children.Count >= MaxChildAmount)
+                VirtualScrollRectItem savedItem = InsertChildToFirst(FirstIndex-1, item, true, -1);
+                if (savedItem != null)
                 {
-                    SaveLastChild();
-                    rolledItems.Add(item);
+                    rolledItems.Add(savedItem);
                 }
-                InsertChildToFirst(FirstIndex-1, item);
             }
         }
 

+ 1 - 1
Assets/Script/Tool/LabelUtility/SerializeObject.prefab

@@ -51,7 +51,7 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: e4a9dafa00b004e4e94c57cd88b01101, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  Script: {fileID: 11500000, guid: 1615e3353e063d443bf237fb8aade024, type: 3}
+  Script: {fileID: 11500000, guid: 3420c8d0e7f483a46942a0adcfbee477, type: 3}
   Languages:
   - {fileID: 4900000, guid: 6bf784d003b5c104e94531afb827212a, type: 3}
   Prefabs:

+ 3 - 0
Assets/Script/Tool/Lib.cs

@@ -27,6 +27,9 @@ public class Lib
     public static Color PraiseTextWhite = new Color(1, 1, 1, 1);
     public static Color PraiseTextBlue = new Color(94/255f, 114/255f, 216/255f, 1);
 
+    public static Color PrivateMessageSelfGreen = new Color(122/255f, 188/255f, 89/255f, 1);
+    public static Color PrivateMessageOtherBlack = new Color(0/255f, 0/255f, 0/255f, 180/255f);
+
     public static Sprite PackSprite
     {
         get { return ResourceManager.LoadSprite(ResourceLabel.Pack, Folder.UI); }