蓝色星空 1 year ago
parent
commit
0ea3c3ee7a
100 changed files with 1205 additions and 337 deletions
  1. 46 0
      Assets/Game/Blue/0.F/BlueRoot.prefab
  2. 11 0
      Assets/Game/Blue/Controller/Item/ShowXunJian_UIItem.cs
  3. 264 0
      Assets/Game/Blue/Controller/LangChaoMinIo.cs
  4. 11 0
      Assets/Game/Blue/Controller/LangChaoMinIo.cs.meta
  5. 1 1
      Assets/Game/Blue/RTC/Info/InspectionInfo.cs
  6. 167 0
      Assets/Game/Blue/Test/TestMinIO.cs
  7. 11 0
      Assets/Game/Blue/Test/TestMinIO.cs.meta
  8. 44 0
      Assets/Game/Blue/Utility/IRawImageForSpriteUtility.cs
  9. 3 0
      Assets/Game/PrefabTemplate/借用_XunjianToogleUI.prefab
  10. 12 0
      Assets/Game/ShowChoose/ShowChoose.prefab
  11. 1 1
      Assets/Game/ShowLogin/LangChaoLogin.cs
  12. 1 0
      Assets/Game/ShowXunJian/ShowXunJian.prefab
  13. 3 0
      Assets/Game/ShowXunJian/StartXunJian.cs
  14. 2 0
      Assets/HttpActionLang.cs
  15. 4 4
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IAudioDeviceManager.cs
  16. 3 3
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IAudioEncodedFrameObserver.cs
  17. 8 8
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IAudioFrameObserver.cs
  18. 2 2
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IAudioSpectrumObserver.cs
  19. 7 7
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaPlayer.cs
  20. 1 1
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaPlayerCustomDataProvider.cs
  21. 1 1
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaPlayerFrameObserver.cs
  22. 8 8
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaPlayerSourceObserver.cs
  23. 1 1
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaRecorder.cs
  24. 2 2
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaRecorderObserver.cs
  25. 2 2
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMetadataObserver.cs
  26. 23 23
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IRtcEngine.cs
  27. 79 79
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IRtcEngineEventHandler.cs
  28. 5 5
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IVideoFrameObserver.cs
  29. 18 18
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/Types/AgoraBase.cs
  30. 5 5
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/Types/AgoraMediaBase.cs
  31. 1 1
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/Types/AgoraMediaPlayerTypesBase.cs
  32. 4 4
      Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/Types/IAgoraRtcEngineBase.cs
  33. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Authentication/Credentials.cs
  34. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Authentication/Digest.cs
  35. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Cookies/Cookie.cs
  36. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Decompression/Deflate.cs
  37. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Decompression/DeflateStream.cs
  38. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Decompression/GZipStream.cs
  39. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Decompression/ZlibCodec.cs
  40. 14 14
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Extensions/Future.cs
  41. 5 5
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Forms/Implementations/HTTPMultiPartForm.cs
  42. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/HTTPConnection.cs
  43. 8 8
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/HTTPManager.cs
  44. 15 15
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/HTTPRequest.cs
  45. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/HTTPResponse.cs
  46. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/HTTPUpdateDelegator.cs
  47. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/PlatformSupport/TcpClient/TcpClient.cs
  48. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/asn1/DerSet.cs
  49. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/asn1/util/Asn1Dump.cs
  50. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/crypto/engines/GOST28147Engine.cs
  51. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/crypto/macs/GOST28147Mac.cs
  52. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/crypto/tls/TlsClientProtocol.cs
  53. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/math/ec/ECFieldElement.cs
  54. 3 3
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/util/zlib/Deflate.cs
  55. 3 3
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/ServerSentEvents/EventSource.cs
  56. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/ServerSentEvents/EventSourceResponse.cs
  57. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalR/Connection.cs
  58. 10 10
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalR/Hubs/Hub.cs
  59. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalR/Transports/PollingTransport.cs
  60. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalR/Transports/PostSendTransportBase.cs
  61. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalR/Transports/WebSocketTransport.cs
  62. 4 4
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalRCore/HubConnection.cs
  63. 3 3
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SocketIO/Events/EventDescriptor.cs
  64. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SocketIO/Events/EventTable.cs
  65. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SocketIO/Packet.cs
  66. 5 5
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SocketIO/Socket.cs
  67. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SocketIO/SocketManager.cs
  68. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/WebSocket/WebSocket.cs
  69. 4 4
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/HTTP/LargeFileDownloadSample.cs
  70. 5 5
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/HTTP/TextureDownloadSample.cs
  71. 22 22
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/Helpers/CodeBlocks.cs
  72. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SampleSelector.cs
  73. 3 3
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SignalR/AuthenticationSample.cs
  74. 2 2
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SignalR/ConnectionAPISample.cs
  75. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SignalR/ConnectionStatusSample.cs
  76. 4 4
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SignalR/DemoHubSample.cs
  77. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SocketIO/SocketIOChatSample.cs
  78. 1 1
      Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SocketIO/SocketIOWePlaySample.cs
  79. 2 2
      Assets/LangChaoRTC/Remote/PopPublic/PopCall.cs
  80. 2 2
      Assets/LangChaoRTC/Studio/Common/Scripts/LoaderController.cs
  81. 1 1
      Assets/LangChaoRTC/TextMesh Pro/Examples & Extras/Scripts/ChatController.cs
  82. 1 1
      Assets/LangChaoRTC/TextMesh Pro/Examples & Extras/Scripts/SimpleScript.cs
  83. 3 3
      Assets/LangChaoRTC/TextMesh Pro/Examples & Extras/Scripts/TMP_ExampleScript_01.cs
  84. 1 1
      Assets/LangChaoRTC/TextMesh Pro/Examples & Extras/Scripts/TeleType.cs
  85. 16 0
      Assets/NuGet.config
  86. 77 0
      Assets/NuGet.config.meta
  87. 8 0
      Assets/NuGet.meta
  88. 9 0
      Assets/NuGet/Editor.meta
  89. BIN
      Assets/NuGet/Editor/NugetForUnity.dll
  90. 33 0
      Assets/NuGet/Editor/NugetForUnity.dll.meta
  91. 21 0
      Assets/NuGet/LICENSE
  92. 8 0
      Assets/NuGet/LICENSE.meta
  93. BIN
      Assets/NuGet/README.pdf
  94. 8 0
      Assets/NuGet/README.pdf.meta
  95. 9 0
      Assets/NuGet/Resources.meta
  96. BIN
      Assets/NuGet/Resources/defaultIcon.png
  97. 88 0
      Assets/NuGet/Resources/defaultIcon.png.meta
  98. 8 0
      Assets/Packages.meta
  99. 8 0
      Assets/Packages/CommunityToolkit.HighPerformance.8.2.1.meta
  100. BIN
      Assets/Packages/CommunityToolkit.HighPerformance.8.2.1/.signature.p7s

+ 46 - 0
Assets/Game/Blue/0.F/BlueRoot.prefab

@@ -1,5 +1,50 @@
 %YAML 1.1
 %TAG !u! tag:unity3d.com,2011:
+--- !u!1 &2366285771419430940
+GameObject:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  serializedVersion: 6
+  m_Component:
+  - component: {fileID: 2164299572758442546}
+  - component: {fileID: 5191668526587826429}
+  m_Layer: 0
+  m_Name: MinIO
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 1
+--- !u!4 &2164299572758442546
+Transform:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2366285771419430940}
+  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 1, y: 1, z: 1}
+  m_ConstrainProportionsScale: 0
+  m_Children: []
+  m_Father: {fileID: 3274897787036747888}
+  m_RootOrder: 1
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &5191668526587826429
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 2366285771419430940}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 846d10ee3776f7445ba95c012126b4d8, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  global: 1
 --- !u!1 &8099334051828054534
 GameObject:
   m_ObjectHideFlags: 0
@@ -79,6 +124,7 @@ Transform:
   m_ConstrainProportionsScale: 0
   m_Children:
   - {fileID: 4566161397553809488}
+  - {fileID: 2164299572758442546}
   m_Father: {fileID: 0}
   m_RootOrder: 0
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

+ 11 - 0
Assets/Game/Blue/Controller/Item/ShowXunJian_UIItem.cs

@@ -22,6 +22,10 @@ public class ShowXunJian_UIItem : MonoBehaviour, IController
 
     [SerializeField] private GameObject mErrorBtn_go;
 
+    public Image Screenshot_0_Image;
+    public Image Screenshot_1_Image;
+    public Image Screenshot_2_Image;
+
     private void Start()
     {
         mNormal_Btn.onClick.AddListener(NormalClick);
@@ -63,6 +67,13 @@ public class ShowXunJian_UIItem : MonoBehaviour, IController
                 LabelText_Input.text = InspectionStep.outliers;
                 mOutliers = InspectionStep.outliers;
             }
+
+            foreach (var imageIndex in InspectionStep.images)
+            {
+                LangChaoMinIo.Instance.getFile(this.GetService<IInspectionService>().InspectionInfo.id , mItemID.ToString(), imageIndex, Texture2D => 
+                {
+                });
+            }
         }
     }
 

+ 264 - 0
Assets/Game/Blue/Controller/LangChaoMinIo.cs

@@ -0,0 +1,264 @@
+using LitJson;
+using Minio;
+using Minio.DataModel.Args;
+using Minio.Exceptions;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System.Threading.Tasks;
+using UnityEngine;
+using UnityEngine.Networking;
+using XRTool.Util;
+
+public class LangChaoMinIo : MonoSingleton<LangChaoMinIo>
+{
+    IMinioClient minio;
+    string path;
+    string bucket;
+    string host;
+
+    string tmpSecretId;
+    string tmpSecretKey;
+    string minioToken;
+
+    int projectId;
+    Thread thread;
+    private void Start()
+    {
+        thread = new Thread(DoSomeWork);
+        thread.Start();
+    }
+
+    bool isminioUpdate;
+    bool isUpdate;
+    void DoSomeWork()
+    {
+        while (true)
+        {
+            if (minio == null)
+            {
+                if (projectId != 0 && !isminioUpdate)
+                {
+                    isminioUpdate = true;
+                    initMinIo((bool b) =>
+                    {
+                        isminioUpdate = false;
+                    });
+
+                }
+            }
+            else
+            {
+                if (Nowfd != null && !isUpdate)
+                {
+                    isUpdate = true;
+                    Run().Wait();
+                }
+            }
+            Thread.Sleep(1000);
+        }
+    }
+
+    void initMinIo(Action<bool> callBack)
+    {
+        JsonData data = new JsonData();
+        data["inspectionId"] = projectId;
+        GameStart.Instance.StartCoroutine(HttpTool.Instance.SendHttp(HttpActionLang.storage_inspectionCredential, data.ToJson(), async (string str) =>
+        {
+            try
+            {
+
+                JsonData d = JsonMapper.ToObject(str);
+                minioToken = d["data"]["credentials"]["token"].ToString();
+                tmpSecretId = d["data"]["credentials"]["tmpSecretId"].ToString();
+                tmpSecretKey = d["data"]["credentials"]["tmpSecretKey"].ToString();
+                host = d["data"]["host"].ToString();
+                bucket = d["data"]["bucket"].ToString();
+                path = d["data"]["path"].ToString();
+                Debug.Log(str);
+                bool isHttps = host.Contains("https");
+                var endpoint = host.Split("//")[1];
+                var accessKey = tmpSecretId;//"tr6Nh5D8bnlGaLJE6vb5";
+                var secretKey = tmpSecretKey;// "aVOYdXLnX4MCiKbit8aomZNWvAx8YSpzhiwzFhrI";
+                Debug.Log("endpoint===>" + endpoint + "    isHttps==>" + isHttps);
+                minio = new MinioClient()
+                                    .WithEndpoint(endpoint)
+                                    .WithCredentials(accessKey, secretKey)
+                                    .WithSessionToken(minioToken)
+                                    .WithSSL(isHttps)
+                                    .Build();
+                TimerMgr.Instance.CreateTimer(() =>
+                {
+
+                    minio = null;
+                }, 1200);
+                callBack?.Invoke(true);
+            }
+            catch
+            {
+                callBack?.Invoke(false);
+
+            }
+
+        }));
+    }
+
+    Queue<FileData> fdQueue = new Queue<FileData>();
+    void putFile(string filePath, string fileName, Action<bool> callBack)
+    {
+        FileData fd = new FileData();
+        fd.filePath = filePath;
+        fd.fileName = fileName;
+        fd.callBack = callBack;
+        fdQueue.Enqueue(fd);
+    }
+    string DicName = "XunJian";
+    public void saveFile(Texture tex, int projectId, string Index, int imgIndex, Action<bool> callBack)
+    {
+        this.projectId = projectId;
+
+
+        Texture2D texture2D = TextureToTexture2D(tex);
+        byte[] bytes = texture2D.EncodeToPNG();
+        if (!Directory.Exists(Application.persistentDataPath + "/" + DicName))
+            Directory.CreateDirectory(Application.persistentDataPath + "/" + DicName);
+
+        string fileName = DicName + "_" + projectId + "_" + Index + "_" + imgIndex + ".png";
+        string filePathname = Application.persistentDataPath + "/" + DicName + "/" + fileName;
+        if (File.Exists(filePathname))
+            File.Delete(filePathname);
+        File.WriteAllBytes(filePathname, bytes);
+
+        PlayerPrefs.SetString(fileName, filePathname);
+        putFile(filePathname, fileName, callBack);
+
+    }
+    /// <summary>
+    /// 运行模式下Texture转换成Texture2D
+    /// </summary>
+    /// <param name="texture"></param>
+    /// <returns></returns>
+    private Texture2D TextureToTexture2D(Texture texture)
+    {
+        Texture2D texture2D = new Texture2D(texture.width, texture.height, TextureFormat.RGBA32, false);
+        RenderTexture currentRT = RenderTexture.active;
+        RenderTexture renderTexture = RenderTexture.GetTemporary(texture.width, texture.height, 32);
+        Graphics.Blit(texture, renderTexture);
+
+        RenderTexture.active = renderTexture;
+        texture2D.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
+        texture2D.Apply();
+
+        RenderTexture.active = currentRT;
+        RenderTexture.ReleaseTemporary(renderTexture);
+
+        return texture2D;
+    }
+
+    /// <summary>
+    /// 获取文件
+    /// </summary>
+    /// <param name="projectId">巡检ID</param>
+    /// <param name="Index">步骤ID</param>
+    /// <param name="imgIndex">步骤ID内图片ID</param>
+    /// <param name="callBack"></param>
+    public void getFile(int projectId, string Index, int imgIndex, Action<Texture2D> callBack)//, string path
+    {
+        this.projectId = projectId;
+
+        string fileName = DicName + "_" + projectId + "_" + Index + "_" + imgIndex + ".png";
+        string filePathname = PlayerPrefs.GetString(fileName);
+        if (filePathname != "")
+        {
+            StartCoroutine(_GetTexture(filePathname, callBack));
+        }
+        else
+        {
+            callBack.Invoke(null);
+        }
+    }
+
+    /// <summary>
+    /// 请求图片
+    /// </summary>
+    /// <param name="url">图片地址,like 'http://www.my-server.com/image.png '</param>
+    /// <param name="action">请求发起后处理回调结果的委托,处理请求结果的图片</param>
+    /// <returns></returns>
+    IEnumerator _GetTexture(string url, Action<Texture2D> actionResult)
+    {
+        UnityWebRequest uwr = new UnityWebRequest(url);
+        DownloadHandlerTexture downloadTexture = new DownloadHandlerTexture(true);
+        uwr.downloadHandler = downloadTexture;
+        yield return uwr.SendWebRequest();
+        Texture2D t = null;
+        if (!(uwr.isNetworkError || uwr.isHttpError))
+        {
+            t = downloadTexture.texture;
+        }
+        else
+        {
+            Debug.Log("下载失败,请检查网络,或者下载地址是否正确: " + uwr.error);
+        }
+
+        if (actionResult != null)
+        {
+            actionResult(t);
+        }
+    }
+    // File uploader task.
+    private async Task Run()
+    {
+        try
+        {
+
+            var getListBucketsTask = await minio.ListBucketsAsync().ConfigureAwait(false);
+            var bucketName = bucket;
+            var objectName = path + "/" + Nowfd.fileName;
+            var filePath = Nowfd.filePath;
+            var contentType = "application/octet-stream";
+
+            // Make a bucket on the server, if not already present.
+
+            // Upload a file to bucket.
+            var putObjectArgs = new PutObjectArgs()
+                .WithBucket(bucketName)
+                .WithObject(objectName)
+                .WithFileName(filePath)
+                .WithContentType(contentType);
+            await minio.PutObjectAsync(putObjectArgs).ConfigureAwait(false);
+            Debug.Log("33333333333333333");
+            isUpdate = false;
+            Nowfd = null;
+            Nowfd.callBack?.Invoke(true);
+        }
+        catch
+        {
+
+            isUpdate = false;
+            Nowfd = null;
+            Nowfd.callBack?.Invoke(false);
+        }
+    }
+    FileData Nowfd;
+    private void Update()
+    {
+        if (fdQueue.Count > 0 && Nowfd == null)
+        {
+            Nowfd = fdQueue.Dequeue();
+        }
+    }
+
+    public class FileData
+    {
+        public string filePath;
+        public string fileName;
+        public Action<bool> callBack;
+    }
+
+    public class GetFileData
+    {
+
+    }
+}

+ 11 - 0
Assets/Game/Blue/Controller/LangChaoMinIo.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 846d10ee3776f7445ba95c012126b4d8
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
Assets/Game/Blue/RTC/Info/InspectionInfo.cs

@@ -31,7 +31,7 @@ public class InspectionStep
 {
     public bool normal; // 是否正常
     public string outliers; // 标签信息
-    public string[] images; // 图片
+    public int[] images; // 图片
 }
 
 

+ 167 - 0
Assets/Game/Blue/Test/TestMinIO.cs

@@ -0,0 +1,167 @@
+using LitJson;
+using Minio;
+using Minio.DataModel.Args;
+using Minio.DataModel.Encryption;
+using Minio.Exceptions;
+using System;
+using System.IO;
+using System.Threading.Tasks;
+using UnityEngine;
+
+public class TestMinIO : MonoBehaviour
+{
+    private string endpoint;
+    private string accessKey;
+    private string secretKey;
+    private string minioToken;
+    private string bucketName;
+    private string objectName;
+    private string contentType;
+    private string tmpSecretId;
+    private string tmpSecretKey;
+    private string host;
+    private string path;
+    private MinioClient minio;
+
+    private void Start()
+    {
+        endpoint = "api-fat2.ghz-tech.com";
+        accessKey = "2RB1QSM6ZTPQPJIA32K3";
+        secretKey = "c1e274Rj0ObD10cHOygHXV2wMZHcFubes0jOza6r";
+        minioToken = "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhY2Nlc3NLZXkiOiIyUkIxUVNNNlpUUFFQSklBMzJLMyIsImV4cCI6MTY5OTgwOTE0MSwicGFyZW50IjoiZ2h6Iiwic2Vzc2lvblBvbGljeSI6ImV5SjJaWEp6YVc5dUlqb2lNakF4TWkweE1DMHhOeUlzSW5OMFlYUmxiV1Z1ZENJNlczc2lZV04wYVc5dUlqcGJJbk16T2tkbGRFSjFZMnRsZEV4dlkyRjBhVzl1SWl3aWN6TTZSMlYwVDJKcVpXTjBJaXdpY3pNNlVIVjBUMkpxWldOMElpd2ljek02VEdsemRFSjFZMnRsZENKZExDSmxabVpsWTNRaU9pSkJiR3h2ZHlJc0luSmxjMjkxY21ObElqcGJJbUZ5YmpwaGQzTTZjek02T2pvcUlsMTlYWDA9In0.SNxgRP-vBxKvBRwo2pWGcpD3Yap7bjN34jbsluY4pEa45zPmyRSWW-PxvMc69lTaXub2ijYgyPFwOe0iVi7ZMQ";
+        bucketName = "ghz";
+        objectName = "110901.jpg";
+        contentType = "application/octet-stream";
+        Active();
+        /*
+        */
+        InspectionCredential();
+    }
+
+    private void InspectionCredential()
+    {
+        JsonData data = new JsonData();
+        data["inspectionId"] = 10;
+        GameStart.Instance.StartCoroutine(HttpTool.Instance.SendHttp("/cmcc-endustry/v1/storage/inspectionCredential", data.ToJson(), async (string str) =>
+        {
+            JsonData d = JsonMapper.ToObject(str);
+            //minioToken = d["data"]["credentials"]["token"].ToString();
+            tmpSecretId = d["data"]["credentials"]["tmpSecretId"].ToString();
+            //tmpSecretKey = d["data"]["credentials"]["tmpSecretKey"].ToString();
+            host = d["data"]["host"].ToString();
+            bucketName = d["data"]["bucket"].ToString();
+            path = d["data"]["path"].ToString();
+            Debug.Log(str);
+            bool isHttps = host.Contains("https");
+            //var endpoint = host.Split("//")[1];
+            //var accessKey = tmpSecretId;//"tr6Nh5D8bnlGaLJE6vb5";
+            //var secretKey = tmpSecretKey;// "aVOYdXLnX4MCiKbit8aomZNWvAx8YSpzhiwzFhrI";
+            //Active();
+            
+            minio = (MinioClient)new MinioClient()
+                            .WithEndpoint(endpoint)
+                            .WithCredentials(accessKey, secretKey)
+                            .WithSessionToken(minioToken)
+                            .WithSSL(isHttps)
+                            .Build();
+            //  Run((MinioClient)minio).Wait();
+            var getListBucketsTask = await minio.ListBucketsAsync().ConfigureAwait(false);
+            foreach (var bucket in getListBucketsTask.Buckets)
+            {
+                Debug.LogError($"Bucket:{bucket.Name}");
+            }
+            Active();
+        }));
+    }
+
+    private void Active()
+    {
+        try
+        {
+            /*
+            var minio = (MinioClient)new MinioClient()
+                               //.WithEndpoint(endpoint)
+                                .WithEndpoint(host)
+                                .WithCredentials(accessKey, secretKey)
+                                .WithSessionToken(minioToken)
+                                .WithSSL()
+                                .Build();
+            */
+            SetObjectRun(minio).Wait();
+            //GetObjectRun(minio, "bluebucketone", "BlueIOTest.jpg", "C:\\Users\\lsxk0\\Desktop\\DownAPK\\1107.jpg").Wait();
+        }
+        catch (Exception ex)
+        {
+            Debug.LogError("host:"+ host);
+            Debug.LogError("bucketName:" + bucketName);
+            Debug.LogError("path:" + path);
+            Debug.LogError($"SetObjectRun Error----{ex.Message}");
+        }
+    }
+
+    /// <summary>
+    ///  文件上传
+    /// </summary>
+    private async Task SetObjectRun(MinioClient minio)
+    {
+        Debug.LogError("SetObjectRun");
+
+        //var location = "us-east-1";
+        var filePath = "C:\\Users\\lsxk0\\Desktop\\图片\\IMG_20190113_082755.jpg";
+        //var filePath = Application.persistentDataPath + "/IMG.jpg";
+
+        try
+        {
+            // 在服务器上制作一个bucket(如果还没有)
+            var beArgs = new BucketExistsArgs()
+                .WithBucket(bucketName);
+            bool found = await minio.BucketExistsAsync(beArgs).ConfigureAwait(false);
+            if (!found)
+            {
+                var mbArgs = new MakeBucketArgs()
+                    .WithBucket(bucketName);
+                await minio.MakeBucketAsync(mbArgs).ConfigureAwait(false);
+            }
+            // 将文件上传到bucket
+            var putObjectArgs = new PutObjectArgs()
+                .WithBucket(bucketName)
+                .WithObject(objectName)
+                .WithFileName(filePath)
+                .WithContentType(contentType);
+            await minio.PutObjectAsync(putObjectArgs).ConfigureAwait(false);
+            Debug.LogError("Successfully uploaded " + objectName);
+        }
+        catch (MinioException e)
+        {
+            Debug.LogError("Upload Error----");
+            Debug.LogError($"File Upload Error: {e.Message}");
+        }
+    }
+
+    /// <summary>
+    /// 将对象从bucket下载到本地文件
+    /// </summary>
+    public async Task GetObjectRun(
+        IMinioClient minio,
+        string bucketName = "my-bucket-name",
+        string objectName = "my-object-name",
+        string fileName = "local-filename",
+        IServerSideEncryption sse = null)
+    {
+        try
+        {
+            File.Delete(fileName);
+            var args = new GetObjectArgs()
+                .WithBucket(bucketName)
+                .WithObject(objectName)
+                .WithFile(fileName)
+                .WithServerSideEncryption(sse);
+            _ = await minio.GetObjectAsync(args).ConfigureAwait(false);
+            Debug.LogError($"Downloaded the file {fileName} from bucket {bucketName}");
+        }
+        catch (Exception e)
+        {
+            Debug.LogError($"[Bucket]  Exception: {e}");
+        }
+    }
+}

+ 11 - 0
Assets/Game/Blue/Test/TestMinIO.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4d90f06d1b1919649b5065508afbe669
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 44 - 0
Assets/Game/Blue/Utility/IRawImageForSpriteUtility.cs

@@ -1,4 +1,5 @@
 using Blue;
+using System.IO;
 using UnityEngine;
 using UnityEngine.UI;
 
@@ -10,12 +11,15 @@ namespace GHZLangChao
     public interface IRawImageForSpriteUtility : IUtility
     {
         Sprite SwitchSprite(RawImage rawImage);
+        Sprite PngToSprite(string fullPath, int x, int y);
     }
 
     public class RawImageForSpriteUtility : IRawImageForSpriteUtility
     {
         public Sprite SwitchSprite(RawImage rawImage)
         {
+            SaveLocal(rawImage, "1", "0");
+
             // 获取RawImage的纹理
             Texture2D rawTexture = TextureToTexture2D(rawImage.texture);
             // 创建一个新的纹理,用于截图
@@ -49,5 +53,45 @@ namespace GHZLangChao
 
             return texture2D;
         }
+
+        /// <summary>
+        /// 保存到本地
+        /// </summary>
+        /// <param name="rawImage"></param>
+        /// <param name="Step">某个步骤</param>
+        /// <param name="id">某个步骤的第几张图片</param>
+        private void SaveLocal(RawImage rawImage, string Step, string id)
+        {
+            Texture2D texture2D = TextureToTexture2D(rawImage.texture);
+            byte[] bytes = texture2D.EncodeToPNG();
+            if (!Directory.Exists(Application.persistentDataPath + "/" + Step))
+                Directory.CreateDirectory(Application.persistentDataPath + "/" + Step);
+            string filename = Application.persistentDataPath + "/" + Step + "/" + id + ".png";
+            if (File.Exists(filename))
+                File.Delete(filename);
+            Debug.LogError(Application.persistentDataPath);
+            File.WriteAllBytes(filename, bytes);
+        }
+
+
+        /// <summary>
+        /// IO方式 —— 将PNG转为Sprite精灵图片
+        /// </summary>
+        /// <param name="fullPath">读取的PNG图片全路径:路径+文件名+后缀</param>
+        /// <param name="x">图片尺寸:宽</param>
+        /// <param name="y">图片尺寸:高</param>
+        /// <returns></returns>
+        public Sprite PngToSprite(string fullPath, int x, int y)
+        {
+            using (FileStream fs = new FileStream(fullPath, FileMode.Open, FileAccess.Read)) //自动双清
+            {
+                fs.Seek(0, SeekOrigin.Begin);  //设定当前流的位置
+                byte[] bytes = new byte[fs.Length];      //创建文件长度缓冲区
+                fs.Read(bytes, 0, (int)fs.Length);  //读取文件
+                Texture2D texture = new Texture2D(x, y); //创建Texture
+                texture.LoadImage(bytes);
+                return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.one / 2);
+            }
+        }
     }
 }

+ 3 - 0
Assets/Game/PrefabTemplate/借用_XunjianToogleUI.prefab

@@ -4485,6 +4485,9 @@ MonoBehaviour:
   WarningPanel_go: {fileID: 3706178895091204087}
   LabelText_Input: {fileID: 975195068224255630}
   mErrorBtn_go: {fileID: 7477279148625475104}
+  Screenshot_0_Image: {fileID: 2159213327334610182}
+  Screenshot_1_Image: {fileID: 3532761808821666237}
+  Screenshot_2_Image: {fileID: 1969936950275804296}
 --- !u!1 &7584859786364747502
 GameObject:
   m_ObjectHideFlags: 0

+ 12 - 0
Assets/Game/ShowChoose/ShowChoose.prefab

@@ -2993,3 +2993,15 @@ GameObject:
   m_CorrespondingSourceObject: {fileID: 1292101901884213937, guid: 5737d81e5a250f240bcb0e4487c44eab, type: 3}
   m_PrefabInstance: {fileID: 3188562182568662485}
   m_PrefabAsset: {fileID: 0}
+--- !u!114 &8526068738342794658
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4444625930573684580}
+  m_Enabled: 0
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 4d90f06d1b1919649b5065508afbe669, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 

+ 1 - 1
Assets/Game/ShowLogin/LangChaoLogin.cs

@@ -54,7 +54,7 @@ namespace GHZLangChao
         private void OnClickLogin()
         {
 #if UNITY_EDITOR
-            mAccountStr = "dgj1";
+            mAccountStr = "cy1";
             mPasswordStr = "1";
             mAccount_Input.text = mAccountStr;
             mPassword_Input.text = mPasswordStr;

+ 1 - 0
Assets/Game/ShowXunJian/ShowXunJian.prefab

@@ -7345,6 +7345,7 @@ MonoBehaviour:
         m_CallState: 2
   currentUIItem: {fileID: 0}
   LastUIItem: {fileID: 0}
+  imageTest: {fileID: 731099477028635128}
   ItemNameTextList:
   - {fileID: 1108556361098302881}
   - {fileID: 5578992365418269874}

+ 3 - 0
Assets/Game/ShowXunJian/StartXunJian.cs

@@ -36,9 +36,12 @@ namespace GHZLangChao
         private IInspectionService mInspectionService;
 
         public static StartXunJian Instance;
+
+        public Image imageTest;
         private void Awake()
         {
             Instance = this;
+            imageTest.sprite = this.GetUtility<IRawImageForSpriteUtility>().PngToSprite(Application.persistentDataPath+"/0.png",500,500);
         }
         void Start()
         {

+ 2 - 0
Assets/HttpActionLang.cs

@@ -21,6 +21,8 @@ public class HttpActionLang : Singleton<HttpActionLang>
 
     public const string inspection_step = "/cmcc-endustry/v1/inspection/step"; // 机房巡检步骤上报
 
+    public const string storage_inspectionCredential = "/cmcc-endustry/v1/storage/inspectionCredential"; // 
+
     /// <summary>
     /// 获取刀片机详细信息
     /// </summary>

+ 4 - 4
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IAudioDeviceManager.cs

@@ -83,7 +83,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Starts the audio playback device test.
-        /// This method tests whether the audio playback device works properly. Once a user starts the test, the SDK plays an audio file specified by the user. If the user can hear the audio, the playback device works properly.After calling this method, the SDK triggers the OnAudioVolumeIndication callback every 100 ms, reporting uid = 1 and the volume information of the playback device.Ensure that you call this method before joining a channel.
+        /// This method tests whether the audio playback device works properly. Once a user starts the test, the SDK plays an audio file specified by the user. If the user can hear the audio, the playback device works properly.After calling this method, the SDK triggers the OnAudioVolumeIndication Callback every 100 ms, reporting uid = 1 and the volume information of the playback device.Ensure that you call this method before joining a channel.
         /// </summary>
         ///
         /// <param name="testAudioFilePath"> The path of the audio file. The data format is string in UTF-8.Supported file formats: wav, mp3, m4a, and aac.Supported file sample rates: 8000, 16000, 32000, 44100, and 48000 Hz.</param>
@@ -196,10 +196,10 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Starts the audio capture device test.
-        /// This method tests whether the audio capture device works properly. After calling this method, the SDK triggers the OnAudioVolumeIndication callback at the time interval set in this method, which reports uid = 0 and the volume information of the capturing device.Ensure that you call this method before joining a channel.
+        /// This method tests whether the audio capture device works properly. After calling this method, the SDK triggers the OnAudioVolumeIndication Callback at the time interval set in this method, which reports uid = 0 and the volume information of the capturing device.Ensure that you call this method before joining a channel.
         /// </summary>
         ///
-        /// <param name="indicationInterval"> The time interval (ms) at which the SDK triggers the OnAudioVolumeIndication callback. Agora recommends a setting greater than 200 ms. This value must not be less than 10 ms; otherwise, you can not receive the OnAudioVolumeIndication callback.</param>
+        /// <param name="indicationInterval"> The time interval (ms) at which the SDK triggers the OnAudioVolumeIndication Callback. Agora recommends a setting greater than 200 ms. This value must not be less than 10 ms; otherwise, you can not receive the OnAudioVolumeIndication Callback.</param>
         ///
         /// <returns>
         /// 0: Success.&lt; 0: Failure.
@@ -240,7 +240,7 @@ namespace Agora.Rtc
         /// This method tests whether the local audio capture device and playback device are working properly. Once the test starts, the audio recording device records the local audio, and the audio playback device plays the captured audio. The SDK triggers two independent OnAudioVolumeIndication callbacks at the time interval set in this method, which reports the volume information of the capture device (uid = 0) and the volume information of the playback device (uid = 1) respectively.Ensure that you call this method before joining a channel.This method tests local audio devices and does not report the network conditions.
         /// </summary>
         ///
-        /// <param name="indicationInterval"> The time interval (ms) at which the SDK triggers the OnAudioVolumeIndication callback. Agora recommends setting a value greater than 200 ms. This value must not be less than 10 ms; otherwise, you can not receive the OnAudioVolumeIndication callback.</param>
+        /// <param name="indicationInterval"> The time interval (ms) at which the SDK triggers the OnAudioVolumeIndication Callback. Agora recommends setting a value greater than 200 ms. This value must not be less than 10 ms; otherwise, you can not receive the OnAudioVolumeIndication Callback.</param>
         ///
         /// <returns>
         /// 0: Success.&lt; 0: Failure.

+ 3 - 3
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IAudioEncodedFrameObserver.cs

@@ -12,7 +12,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Gets the encoded audio data of the local user.
-        /// After calling RegisterAudioEncodedFrameObserver and setting the encoded audio as AUDIO_ENCODED_FRAME_OBSERVER_POSITION_RECORD, you can get the encoded audio data of the local user from this callback.
+        /// After calling RegisterAudioEncodedFrameObserver and setting the encoded audio as AUDIO_ENCODED_FRAME_OBSERVER_POSITION_RECORD, you can get the encoded audio data of the local user from this Callback.
         /// </summary>
         ///
         /// <param name="frameBufferPtr"> The audio buffer.</param>
@@ -30,7 +30,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Gets the encoded audio data of all remote users.
-        /// After calling RegisterAudioEncodedFrameObserver and setting the encoded audio as AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK, you can get encoded audio data of all remote users through this callback.
+        /// After calling RegisterAudioEncodedFrameObserver and setting the encoded audio as AUDIO_ENCODED_FRAME_OBSERVER_POSITION_PLAYBACK, you can get encoded audio data of all remote users through this Callback.
         /// </summary>
         ///
         /// <param name="frameBufferPtr"> The audio buffer.</param>
@@ -48,7 +48,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Gets the mixed and encoded audio data of the local and all remote users.
-        /// After calling RegisterAudioEncodedFrameObserver and setting the audio profile as AUDIO_ENCODED_FRAME_OBSERVER_POSITION_MIXED, you can get the mixed and encoded audio data of the local and all remote users through this callback.
+        /// After calling RegisterAudioEncodedFrameObserver and setting the audio profile as AUDIO_ENCODED_FRAME_OBSERVER_POSITION_MIXED, you can get the mixed and encoded audio data of the local and all remote users through this Callback.
         /// </summary>
         ///
         /// <param name="frameBufferPtr"> The audio buffer.</param>

+ 8 - 8
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IAudioFrameObserver.cs

@@ -10,7 +10,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Gets the captured audio frame.
-        /// If you want to set the format of the captured audio frame, Agora recommends that you call the RegisterAudioFrameObserver method to set the format of the audio frame after calling the GetRecordAudioParams method to register an audio frame observer. The SDK calculates the sampling interval according to the AudioParams set in the GetRecordAudioParams callback return value, and triggers the OnRecordAudioFrame callback according to the sampling interval.
+        /// If you want to set the format of the captured audio frame, Agora recommends that you call the RegisterAudioFrameObserver method to set the format of the audio frame after calling the GetRecordAudioParams method to register an audio frame observer. The SDK calculates the sampling interval according to the AudioParams set in the GetRecordAudioParams Callback return value, and triggers the OnRecordAudioFrame Callback according to the sampling interval.
         /// </summary>
         ///
         /// <param name="audioFrame"> The raw audio data. See AudioFrame .</param>
@@ -48,7 +48,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Retrieves the mixed captured and playback audio frame.
-        /// This callback only returns the single-channel data.If you want to set the format of the mixed captured and playback audio frame, Agora recommends you call the RegisterAudioFrameObserver method to set the format of the audio frames after calling the SetMixedAudioFrameParameters method to register an audio frame observer.
+        /// This Callback only returns the single-channel data.If you want to set the format of the mixed captured and playback audio frame, Agora recommends you call the RegisterAudioFrameObserver method to set the format of the audio frames after calling the SetMixedAudioFrameParameters method to register an audio frame observer.
         /// </summary>
         ///
         /// <param name="audio_Frame"> The raw audio data. See AudioFrame .</param>
@@ -74,8 +74,8 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// Sets the audio format for the OnPlaybackAudioFrame callback.
-        /// You need to register the callback when calling the RegisterAudioFrameObserver method. After you successfully register the audio observer, the SDK triggers this callback, and you can set the audio format in the return value of this callback.The SDK calculates the sample interval according to the AudioParams you set in the return value of this callback.Sample interval = samplePerCall/(sampleRate × channel).Ensure that the sample interval ≥ 0.01 (s).The SDK triggers the OnPlaybackAudioFrame callback according to the sampling interval.
+        /// Sets the audio format for the OnPlaybackAudioFrame Callback.
+        /// You need to register the Callback when calling the RegisterAudioFrameObserver method. After you successfully register the audio observer, the SDK triggers this Callback, and you can set the audio format in the return value of this Callback.The SDK calculates the sample interval according to the AudioParams you set in the return value of this Callback.Sample interval = samplePerCall/(sampleRate × channel).Ensure that the sample interval ≥ 0.01 (s).The SDK triggers the OnPlaybackAudioFrame Callback according to the sampling interval.
         /// </summary>
         ///
         /// <returns>
@@ -89,8 +89,8 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// Sets the audio format for the OnRecordAudioFrame callback.
-        /// You need to register the callback when calling the RegisterAudioFrameObserver method. After you successfully register the audio observer, the SDK triggers this callback, and you can set the audio format in the return value of this callback.The SDK calculates the sample interval according to the AudioParams you set in the return value of this callback.Sample interval = samplePerCall/(sampleRate × channel).Ensure that the sample interval ≥ 0.01 (s).The SDK triggers the OnRecordAudioFrame callback according to the sampling interval.
+        /// Sets the audio format for the OnRecordAudioFrame Callback.
+        /// You need to register the Callback when calling the RegisterAudioFrameObserver method. After you successfully register the audio observer, the SDK triggers this Callback, and you can set the audio format in the return value of this Callback.The SDK calculates the sample interval according to the AudioParams you set in the return value of this Callback.Sample interval = samplePerCall/(sampleRate × channel).Ensure that the sample interval ≥ 0.01 (s).The SDK triggers the OnRecordAudioFrame Callback according to the sampling interval.
         /// </summary>
         ///
         /// <returns>
@@ -104,8 +104,8 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// Sets the audio format for the OnMixedAudioFrame callback.
-        /// You need to register the callback when calling the RegisterAudioFrameObserver method. After you successfully register the audio observer, the SDK triggers this callback, and you can set the audio format in the return value of this callback.The SDK calculates the sample interval according to the AudioParams you set in the return value of this callback.Sample interval = samplePerCall/(sampleRate × channel).Ensure that the sample interval ≥ 0.01 (s).The SDK triggers the OnMixedAudioFrame callback according to the sampling interval.
+        /// Sets the audio format for the OnMixedAudioFrame Callback.
+        /// You need to register the Callback when calling the RegisterAudioFrameObserver method. After you successfully register the audio observer, the SDK triggers this Callback, and you can set the audio format in the return value of this Callback.The SDK calculates the sample interval according to the AudioParams you set in the return value of this Callback.Sample interval = samplePerCall/(sampleRate × channel).Ensure that the sample interval ≥ 0.01 (s).The SDK triggers the OnMixedAudioFrame Callback according to the sampling interval.
         /// </summary>
         ///
         /// <returns>

+ 2 - 2
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IAudioSpectrumObserver.cs

@@ -10,7 +10,7 @@
         ///
         /// <summary>
         /// Gets the statistics of a local audio spectrum.
-        /// After successfully calling RegisterAudioSpectrumObserver to implement the OnLocalAudioSpectrum callback in IAudioSpectrumObserver and calling EnableAudioSpectrumMonitor to enable audio spectrum monitoring, the SDK will trigger the callback as the time interval you set to report the received remote audio data spectrum.
+        /// After successfully calling RegisterAudioSpectrumObserver to implement the OnLocalAudioSpectrum Callback in IAudioSpectrumObserver and calling EnableAudioSpectrumMonitor to enable audio spectrum monitoring, the SDK will trigger the Callback as the time interval you set to report the received remote audio data spectrum.
         /// </summary>
         ///
         /// <param name="data"> The audio spectrum data of the local user. See AudioSpectrumData .</param>
@@ -27,7 +27,7 @@
         ///
         /// <summary>
         /// Gets the remote audio spectrum.
-        /// After successfully calling RegisterAudioSpectrumObserver to implement the OnRemoteAudioSpectrum callback in the IAudioSpectrumObserver and calling EnableAudioSpectrumMonitor to enable audio spectrum monitoring, the SDK will trigger the callback as the time interval you set to report the received remote audio data spectrum.
+        /// After successfully calling RegisterAudioSpectrumObserver to implement the OnRemoteAudioSpectrum Callback in the IAudioSpectrumObserver and calling EnableAudioSpectrumMonitor to enable audio spectrum monitoring, the SDK will trigger the Callback as the time interval you set to report the received remote audio data spectrum.
         /// </summary>
         ///
         /// <param name="spectrums"> The audio spectrum information of the remote user, see UserAudioSpectrumInfo . The number of arrays is the number of remote users monitored by the SDK. If the array is null, it means that no audio spectrum of remote users is detected.</param>

+ 7 - 7
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaPlayer.cs

@@ -29,7 +29,7 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// Adds callback event for media player.
+        /// Adds Callback event for media player.
         /// </summary>
         ///
         /// <param name="engineEventHandler"> Callback events to be added. </param>
@@ -77,7 +77,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Opens the media resource.
-        /// This method is called asynchronously. If you need to play a media file, make sure you receive the OnPlayerSourceStateChanged callback reporting PLAYER_STATE_OPEN_COMPLETED before calling the Play method to play the file.
+        /// This method is called asynchronously. If you need to play a media file, make sure you receive the OnPlayerSourceStateChanged Callback reporting PLAYER_STATE_OPEN_COMPLETED before calling the Play method to play the file.
         /// </summary>
         ///
         /// <param name="url"> The path of the media file. Both local path and online path are supported.On the Android platform, if you need to open a file in URI format, use Open .</param>
@@ -100,7 +100,7 @@ namespace Agora.Rtc
         ///
         /// <param name="startPos"> The starting position (ms) for playback. The default value is 0.</param>
         ///
-        /// <param name="provider"> The callback for custom media resource files. See IMediaPlayerCustomDataProvider .</param>
+        /// <param name="provider"> The Callback for custom media resource files. See IMediaPlayerCustomDataProvider .</param>
         ///
         /// <returns>
         /// 0: Success.&lt; 0: Failure.
@@ -175,7 +175,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Seeks to a new playback position.
-        /// After successfully calling this method, you will receive the OnPlayerEvent callback, reporting the result of the seek operation to the new playback position.To play the media file from a specific position, do the following:Call this method to seek to the position you want to begin playback.Call the Play method to play the media file.
+        /// After successfully calling this method, you will receive the OnPlayerEvent Callback, reporting the result of the seek operation to the new playback position.To play the media file from a specific position, do the following:Call this method to seek to the position you want to begin playback.Call the Play method to play the media file.
         /// </summary>
         ///
         /// <param name="newPos"> The new playback position (ms).</param>
@@ -492,7 +492,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Opens a media resource and requests all the CDN routes of the media resources through the self-developed scheduling center.
-        /// This method is called asynchronously. If you need to play a media file, make sure you receive the OnPlayerSourceStateChanged callback reporting PLAYER_STATE_OPEN_COMPLETED before calling the Play method to play the file.After you call this method, Agora opens the media resources and tries to obtain all the CDN routes for playing the media resource. By default, Agora uses the first CDN route for playing, and you can call the SwitchAgoraCDNLineByIndex method to switch routes.If you want to ensure the security of the connection and media files, to determine the sign and the ts fields for authentication. Once the fields are determined, use them as the query parameter of the URL to update the URL of the media resource. For example:The URL of the media file to be opened: rtmp://$domain/$appName/$streamNameThe URL updated by the authentication of the media file to be opened: rtmp://$domain/$appName/$streamName?ts=$ts&sign=$signAuthentication information:sign: An encrypted string calculated according to the MD5 algorithm based on authKey, appName, streamName, and ts. You need to for your authKey.ts: The timestamp when the authentication information expires. You can set the validity period of the authentication information according to your scenarios. For example, 24h or 1h30m20s.
+        /// This method is called asynchronously. If you need to play a media file, make sure you receive the OnPlayerSourceStateChanged Callback reporting PLAYER_STATE_OPEN_COMPLETED before calling the Play method to play the file.After you call this method, Agora opens the media resources and tries to obtain all the CDN routes for playing the media resource. By default, Agora uses the first CDN route for playing, and you can call the SwitchAgoraCDNLineByIndex method to switch routes.If you want to ensure the security of the connection and media files, to determine the sign and the ts fields for authentication. Once the fields are determined, use them as the query parameter of the URL to update the URL of the media resource. For example:The URL of the media file to be opened: rtmp://$domain/$appName/$streamNameThe URL updated by the authentication of the media file to be opened: rtmp://$domain/$appName/$streamName?ts=$ts&sign=$signAuthentication information:sign: An encrypted string calculated according to the MD5 algorithm based on authKey, appName, streamName, and ts. You need to for your authKey.ts: The timestamp when the authentication information expires. You can set the validity period of the authentication information according to your scenarios. For example, 24h or 1h30m20s.
         /// </summary>
         ///
         /// <param name="src"> The URL of the media resource.</param>
@@ -591,7 +591,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Switches the media resource being played.
-        /// You can call this method to switch the media resource to be played according to the current network status. For example:When the network is poor, the media resource to be played is switched to a media resource address with a lower bitrate.When the network is good, the media resource to be played is switched to a media resource address with a higher bitrate.After calling this method, if you receive the OnPlayerEvent event in the PLAYER_EVENT_SWITCH_COMPLETE callback, the switch is successful; If you receive the OnPlayerEvent event in the PLAYER_EVENT_SWITCH_ERROR callback, the switch fails.Ensure that you call this method after Open .To ensure normal playback, pay attention to the following when calling this method:Do not call this method when playback is paused.Do not call the Seek method during switching.Before switching the media resource, make sure that the playback position does not exceed the total duration of the media resource to be switched.
+        /// You can call this method to switch the media resource to be played according to the current network status. For example:When the network is poor, the media resource to be played is switched to a media resource address with a lower bitrate.When the network is good, the media resource to be played is switched to a media resource address with a higher bitrate.After calling this method, if you receive the OnPlayerEvent event in the PLAYER_EVENT_SWITCH_COMPLETE Callback, the switch is successful; If you receive the OnPlayerEvent event in the PLAYER_EVENT_SWITCH_ERROR Callback, the switch fails.Ensure that you call this method after Open .To ensure normal playback, pay attention to the following when calling this method:Do not call this method when playback is paused.Do not call the Seek method during switching.Before switching the media resource, make sure that the playback position does not exceed the total duration of the media resource to be switched.
         /// </summary>
         ///
         /// <param name="src"> The URL of the media resource.</param>
@@ -623,7 +623,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Plays preloaded media resources.
-        /// After calling the PreloadSrc method to preload the media resource into the playlist, you can call this method to play the preloaded media resource. After calling this method, if you receive the OnPlayerSourceStateChanged callback which reports the PLAYER_STATE_PLAYING state, the playback is successful.If you want to change the preloaded media resource to be played, you can call this method again and specify the URL of the new media resource that you want to preload. If you want to replay the media resource, you need to call PreloadSrc to preload the media resource to the playlist again before playing. If you want to clear the playlist, call the Stop method.If you call this method when playback is paused, this method does not take effect until playback is resumed.
+        /// After calling the PreloadSrc method to preload the media resource into the playlist, you can call this method to play the preloaded media resource. After calling this method, if you receive the OnPlayerSourceStateChanged Callback which reports the PLAYER_STATE_PLAYING state, the playback is successful.If you want to change the preloaded media resource to be played, you can call this method again and specify the URL of the new media resource that you want to preload. If you want to replay the media resource, you need to call PreloadSrc to preload the media resource to the playlist again before playing. If you want to clear the playlist, call the Stop method.If you call this method when playback is paused, this method does not take effect until playback is resumed.
         /// </summary>
         ///
         /// <param name="src"> The URL of the media resource in the playlist must be consistent with the src set by the PreloadSrc method; otherwise, the media resource cannot be played.</param>

+ 1 - 1
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaPlayerCustomDataProvider.cs

@@ -4,7 +4,7 @@ namespace Agora.Rtc
 {
     ///
     /// <summary>
-    /// The callback for custom media resource files.
+    /// The Callback for custom media resource files.
     /// </summary>
     ///
     public abstract class IMediaPlayerCustomDataProvider

+ 1 - 1
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaPlayerFrameObserver.cs

@@ -10,7 +10,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs each time the player receives an audio frame.
-        /// After registering the audio frame observer, the callback occurs every time the player receives an audio frame, reporting the detailed information of the audio frame.
+        /// After registering the audio frame observer, the Callback occurs every time the player receives an audio frame, reporting the detailed information of the audio frame.
         /// </summary>
         ///
         /// <param name="videoFrame"> Audio frame information. See AudioPcmFrame .</param>

+ 8 - 8
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaPlayerSourceObserver.cs

@@ -12,7 +12,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the playback state change.
-        /// When the state of the media player changes, the SDK triggers this callback to report the current playback state.
+        /// When the state of the media player changes, the SDK triggers this Callback to report the current playback state.
         /// </summary>
         ///
         /// <param name="state"> The playback state, see MEDIA_PLAYER_STATE .</param>
@@ -24,7 +24,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports current playback progress.
-        /// When playing media files, the SDK triggers this callback every one second to report current playback progress.
+        /// When playing media files, the SDK triggers this Callback every one second to report current playback progress.
         /// </summary>
         ///
         /// <param name="position_ms"> The playback position (ms) of media files.</param>
@@ -34,7 +34,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the playback event.
-        /// After calling the Seek method, the SDK triggers the callback to report the results of the seek operation.
+        /// After calling the Seek method, the SDK triggers the Callback to report the results of the seek operation.
         /// </summary>
         ///
         /// <param name="eventCode"> The playback event. See MEDIA_PLAYER_EVENT .</param>
@@ -48,7 +48,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the media metadata is received.
-        /// The callback occurs when the player receives the media metadata and reports the detailed information of the media metadata.
+        /// The Callback occurs when the player receives the media metadata and reports the detailed information of the media metadata.
         /// </summary>
         ///
         /// <param name="data"> The detailed data of the media metadata.</param>
@@ -60,7 +60,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the playback duration that the buffered data can support.
-        /// When playing online media resources, the SDK triggers this callback every two seconds to report the playback duration that the currently buffered data can support.When the playback duration supported by the buffered data is less than the threshold (0 by default), the SDK returns PLAYER_EVENT_BUFFER_LOW.When the playback duration supported by the buffered data is greater than the threshold (0 by default), the SDK returns PLAYER_EVENT_BUFFER_RECOVER.
+        /// When playing online media resources, the SDK triggers this Callback every two seconds to report the playback duration that the currently buffered data can support.When the playback duration supported by the buffered data is less than the threshold (0 by default), the SDK returns PLAYER_EVENT_BUFFER_LOW.When the playback duration supported by the buffered data is greater than the threshold (0 by default), the SDK returns PLAYER_EVENT_BUFFER_RECOVER.
         /// </summary>
         ///
         /// <param name="playCachedBuffer"> The playback duration (ms) that the buffered data can support.</param>
@@ -88,7 +88,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the token is about to expire.
-        /// If the ts is about to expire when you call the SwitchAgoraCDNLineByIndex method to switch the CDN route for playing the media resource, the SDK triggers this callback to remind you to renew the authentication information. You need to call the RenewAgoraCDNSrcToken method to pass in the updated authentication information to update the authentication information of the media resource URL. After updating the authentication information, you need to call SwitchAgoraCDNLineByIndex to complete the route switching.
+        /// If the ts is about to expire when you call the SwitchAgoraCDNLineByIndex method to switch the CDN route for playing the media resource, the SDK triggers this Callback to remind you to renew the authentication information. You need to call the RenewAgoraCDNSrcToken method to pass in the updated authentication information to update the authentication information of the media resource URL. After updating the authentication information, you need to call SwitchAgoraCDNLineByIndex to complete the route switching.
         /// </summary>
         ///
         public virtual void OnAgoraCDNTokenWillExpire() { }
@@ -107,7 +107,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when information related to the media player changes.
-        /// When the information about the media player changes, the SDK triggers this callback. You can use this callback for troubleshooting.
+        /// When the information about the media player changes, the SDK triggers this Callback. You can use this Callback for troubleshooting.
         /// </summary>
         ///
         /// <param name="info"> Information related to the media player. See PlayerUpdatedInfo .</param>
@@ -117,7 +117,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the volume of the media player.
-        /// The SDK triggers this callback every 200 milliseconds to report the current volume of the media player.
+        /// The SDK triggers this Callback every 200 milliseconds to report the current volume of the media player.
         /// </summary>
         ///
         /// <param name="volume"> The volume of the media player. The value ranges from 0 to 255.</param>

+ 1 - 1
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaRecorder.cs

@@ -28,7 +28,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Starts recording the local audio and video.
-        /// After successfully getting the IMediaRecorder object by calling GetMediaRecorder , you can call this method to enable the recoridng of the local audio and video.This method can record the audio captured by the local microphone and encoded in AAC format, and the video captured by the local camera and encoded in H.264 format. The SDK can generate a recording file only when it detects audio and video streams; when there are no audio and video streams to be recorded or the audio and video streams are interrupted for more than five seconds, the SDK stops the recording and triggers the OnRecorderStateChanged(RECORDER_STATE_ERROR, RECORDER_ERROR_NO_STREAM) callback.Once the recording is started, if the video resolution is changed, the SDK stops the recording; if the sampling rate and audio channel changes, the SDK continues recording and generates audio files respectively.Call this method after joining a channel.
+        /// After successfully getting the IMediaRecorder object by calling GetMediaRecorder , you can call this method to enable the recoridng of the local audio and video.This method can record the audio captured by the local microphone and encoded in AAC format, and the video captured by the local camera and encoded in H.264 format. The SDK can generate a recording file only when it detects audio and video streams; when there are no audio and video streams to be recorded or the audio and video streams are interrupted for more than five seconds, the SDK stops the recording and triggers the OnRecorderStateChanged(RECORDER_STATE_ERROR, RECORDER_ERROR_NO_STREAM) Callback.Once the recording is started, if the video resolution is changed, the SDK stops the recording; if the sampling rate and audio channel changes, the SDK continues recording and generates audio files respectively.Call this method after joining a channel.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>

+ 2 - 2
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMediaRecorderObserver.cs

@@ -10,7 +10,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the recording state changes.
-        /// When the local audio or video recording state changes, the SDK triggers this callback to report the current recording state and the reason for the change.
+        /// When the local audio or video recording state changes, the SDK triggers this Callback to report the current recording state and the reason for the change.
         /// </summary>
         ///
         /// <param name="state"> The current recording state. See RecorderState .</param>
@@ -22,7 +22,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the recording information is updated.
-        /// After you successfully enable the local audio and video recording, the SDK periodically triggers this callback based on the value of recorderInfoUpdateInterval set in MediaRecorderConfiguration . This callback reports the file name, duration, and size of the current recording file.
+        /// After you successfully enable the local audio and video recording, the SDK periodically triggers this Callback based on the value of recorderInfoUpdateInterval set in MediaRecorderConfiguration . This Callback reports the file name, duration, and size of the current recording file.
         /// </summary>
         ///
         /// <param name="info"> The information about the file that is recorded. See RecorderInfo .</param>

+ 2 - 2
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IMetadataObserver.cs

@@ -10,7 +10,7 @@
         ///
         /// <summary>
         /// Occurs when the SDK requests the maximum size of the metadata.
-        /// After successfully complete the registration by calling RegisterMediaMetadataObserver , the SDK triggers this callback once every video frame is sent. You need to specify the maximum size of the metadata in the return value of this callback.
+        /// After successfully complete the registration by calling RegisterMediaMetadataObserver , the SDK triggers this Callback once every video frame is sent. You need to specify the maximum size of the metadata in the return value of this Callback.
         /// </summary>
         ///
         /// <returns>
@@ -25,7 +25,7 @@
         ///
         /// <summary>
         /// Occurs when the SDK is ready to send metadata.
-        /// This callback is triggered when the SDK is ready to send metadata.
+        /// This Callback is triggered when the SDK is ready to send metadata.
         /// </summary>
         ///
         /// <param name="source_type"> Video data type. See VIDEO_SOURCE_TYPE .</param>

File diff suppressed because it is too large
+ 23 - 23
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IRtcEngine.cs


+ 79 - 79
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IRtcEngineEventHandler.cs

@@ -12,31 +12,31 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when a user joins a channel.
-        /// This callback notifies the application that a user joins a specified channel.
+        /// This Callback notifies the application that a user joins a specified channel.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
         ///
-        /// <param name="elapsed"> The time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this callback.</param>
+        /// <param name="elapsed"> The time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this Callback.</param>
         ///
         public virtual void OnJoinChannelSuccess(RtcConnection connection, int elapsed) { }
 
         ///
         /// <summary>
         /// Occurs when a user rejoins the channel.
-        /// When a user loses connection with the server because of network problems, the SDK automatically tries to reconnect and triggers this callback upon reconnection.
+        /// When a user loses connection with the server because of network problems, the SDK automatically tries to reconnect and triggers this Callback upon reconnection.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
         ///
-        /// <param name="elapsed"> Time elapsed (ms) from the local user calling the JoinChannel [1/2] or JoinChannel [2/2] method until this callback is triggered.</param>
+        /// <param name="elapsed"> Time elapsed (ms) from the local user calling the JoinChannel [1/2] or JoinChannel [2/2] method until this Callback is triggered.</param>
         ///
         public virtual void OnRejoinChannelSuccess(RtcConnection connection, int elapsed) { }
 
         ///
         /// <summary>
         /// Reports the proxy connection state.
-        /// You can use this callback to listen for the state of the SDK connecting to a proxy. For example, when a user calls SetCloudProxy and joins a channel successfully, the SDK triggers this callback to report the user ID, the proxy type connected, and the time elapsed fromthe user calling JoinChannel [1/2] until this callback is triggered.
+        /// You can use this Callback to listen for the state of the SDK connecting to a proxy. For example, when a user calls SetCloudProxy and joins a channel successfully, the SDK triggers this Callback to report the user ID, the proxy type connected, and the time elapsed fromthe user calling JoinChannel [1/2] until this Callback is triggered.
         /// </summary>
         ///
         /// <param name="channel"> The channel name.</param>
@@ -47,14 +47,14 @@ namespace Agora.Rtc
         ///
         /// <param name="localProxyIp"> Reserved for future use.</param>
         ///
-        /// <param name="elapsed"> The time elapsed (ms) from the user calling JoinChannel [1/2] until this callback is triggered.</param>
+        /// <param name="elapsed"> The time elapsed (ms) from the user calling JoinChannel [1/2] until this Callback is triggered.</param>
         ///
         public virtual void OnProxyConnected(string channel, uint uid, PROXY_TYPE proxyType, string localProxyIp, int elapsed) { }
 
         ///
         /// <summary>
         /// Reports an error during SDK runtime.
-        /// This callback indicates that an error (concerning network or media) occurs during SDK runtime. In most cases, the SDK cannot fix the issue and resume running. The SDK requires the application to take action or informs the user about the issue.
+        /// This Callback indicates that an error (concerning network or media) occurs during SDK runtime. In most cases, the SDK cannot fix the issue and resume running. The SDK requires the application to take action or informs the user about the issue.
         /// </summary>
         ///
         /// <param name="err"> Error code. See ERROR_CODE_TYPE .</param>
@@ -66,7 +66,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the statistics of the audio stream from each remote user.
-        /// Deprecated:Please use OnRemoteAudioStats instead.The SDK triggers this callback once every two seconds to report the audio quality of each remote user/host sending an audio stream. If a channel has multiple users/hosts sending audio streams, the SDK triggers this callback as many times.
+        /// Deprecated:Please use OnRemoteAudioStats instead.The SDK triggers this Callback once every two seconds to report the audio quality of each remote user/host sending an audio stream. If a channel has multiple users/hosts sending audio streams, the SDK triggers this Callback as many times.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -92,7 +92,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the last mile network probe result.
-        /// The SDK triggers this callback within 30 seconds after the app calls StartLastmileProbeTest .
+        /// The SDK triggers this Callback within 30 seconds after the app calls StartLastmileProbeTest .
         /// </summary>
         ///
         /// <param name="result"> The uplink and downlink last-mile network probe test result. See LastmileProbeResult .</param>
@@ -102,23 +102,23 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the volume information of users.
-        /// By default, this callback is disabled. You can enable it by calling EnableAudioVolumeIndication . Once this callback is enabled and users send streams in the channel, the SDK triggers the OnAudioVolumeIndication callback according to the time interval set in EnableAudioVolumeIndication. The SDK triggers two independent OnAudioVolumeIndication callbacks simultaneously, which separately report the volume information of the local user who sends a stream and the remote users (up to three) whose instantaneous volume is the highest.Once this callback is enabled, if the local user calls the MuteLocalAudioStream method for mute, the SDK continues to report the volume indication of the local user.20 seconds after a remote user whose volume is one of the three highest in the channel stops publishing the audio stream, the callback excludes this user's information; 20 seconds after all remote users stop publishing audio streams, the SDK stops triggering the callback for remote users.
+        /// By default, this Callback is disabled. You can enable it by calling EnableAudioVolumeIndication . Once this Callback is enabled and users send streams in the channel, the SDK triggers the OnAudioVolumeIndication Callback according to the time interval set in EnableAudioVolumeIndication. The SDK triggers two independent OnAudioVolumeIndication callbacks simultaneously, which separately report the volume information of the local user who sends a stream and the remote users (up to three) whose instantaneous volume is the highest.Once this Callback is enabled, if the local user calls the MuteLocalAudioStream method for mute, the SDK continues to report the volume indication of the local user.20 seconds after a remote user whose volume is one of the three highest in the channel stops publishing the audio stream, the Callback excludes this user's information; 20 seconds after all remote users stop publishing audio streams, the SDK stops triggering the Callback for remote users.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
         ///
-        /// <param name="speakers"> The volume information of the users. See AudioVolumeInfo . An empty speakers array in the callback indicates that no remote user is in the channel or sending a stream at the moment.</param>
+        /// <param name="speakers"> The volume information of the users. See AudioVolumeInfo . An empty speakers array in the Callback indicates that no remote user is in the channel or sending a stream at the moment.</param>
         ///
-        /// <param name="speakerNumber"> The total number of users.In the callback for the local user, if the local user is sending streams, the value of speakerNumber is 1.In the callback for remote users, the value range of speakerNumber is [0,3]. If the number of remote users who send streams is greater than or equal to three, the value of speakerNumber is 3.</param>
+        /// <param name="speakerNumber"> The total number of users.In the Callback for the local user, if the local user is sending streams, the value of speakerNumber is 1.In the Callback for remote users, the value range of speakerNumber is [0,3]. If the number of remote users who send streams is greater than or equal to three, the value of speakerNumber is 3.</param>
         ///
-        /// <param name="totalVolume"> The volume of the speaker. The value ranges between 0 (lowest volume) and 255 (highest volume).In the callback for the local user, totalVolume is the volume of the local user who sends a stream.In the callback for remote users, totalVolume is the sum of the volume of the remote users (up to three) whose instantaneous volume are the highest. </param>
+        /// <param name="totalVolume"> The volume of the speaker. The value ranges between 0 (lowest volume) and 255 (highest volume).In the Callback for the local user, totalVolume is the volume of the local user who sends a stream.In the Callback for remote users, totalVolume is the sum of the volume of the remote users (up to three) whose instantaneous volume are the highest. </param>
         ///
         public virtual void OnAudioVolumeIndication(RtcConnection connection, AudioVolumeInfo[] speakers, uint speakerNumber, int totalVolume) { }
 
         ///
         /// <summary>
         /// Occurs when a user leaves a channel.
-        /// This callback notifies the app that the user leaves the channel by calling LeaveChannel [1/2]
+        /// This Callback notifies the app that the user leaves the channel by calling LeaveChannel [1/2]
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -130,7 +130,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the statistics of the current call.
-        /// The SDK triggers this callback once every two seconds after the user joins the channel.
+        /// The SDK triggers this Callback once every two seconds after the user joins the channel.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -142,7 +142,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the audio device state changes.
-        /// This callback notifies the application that the system's audio device state is changed. For example, a headset is unplugged from the device.This method is for Windows and macOS only.
+        /// This Callback notifies the application that the system's audio device state is changed. For example, a headset is unplugged from the device.This method is for Windows and macOS only.
         /// </summary>
         ///
         /// <param name="deviceId"> The device ID.</param>
@@ -157,7 +157,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the playback of the local music file finishes.
-        /// Deprecated:Please use OnAudioMixingStateChanged instead.After you call StartAudioMixing [2/2] to play a local music file, this callback occurs when the playback finishes. If the call StartAudioMixing [2/2] fails, the error code WARN_AUDIO_MIXING_OPEN_ERROR is returned.
+        /// Deprecated:Please use OnAudioMixingStateChanged instead.After you call StartAudioMixing [2/2] to play a local music file, this Callback occurs when the playback finishes. If the call StartAudioMixing [2/2] fails, the error code WARN_AUDIO_MIXING_OPEN_ERROR is returned.
         /// </summary>
         ///
         public virtual void OnAudioMixingFinished() { }
@@ -165,7 +165,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the playback of the local music file finishes.
-        /// This callback occurs when the local audio effect file finishes playing.
+        /// This Callback occurs when the local audio effect file finishes playing.
         /// </summary>
         ///
         /// <param name="soundId"> The audio effect ID. The ID of each audio effect file is unique.</param>
@@ -185,7 +185,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the last mile network quality of each user in the channel.
-        /// This callback reports the last mile network conditions of each user in the channel. Last mile refers to the connection between the local device and Agora's edge server.The SDK triggers this callback once every two seconds. If a channel includes multiple users, the SDK triggers this callback as many times.txQuality is UNKNOWNrxQuality is UNKNOWN
+        /// This Callback reports the last mile network conditions of each user in the channel. Last mile refers to the connection between the local device and Agora's edge server.The SDK triggers this Callback once every two seconds. If a channel includes multiple users, the SDK triggers this Callback as many times.txQuality is UNKNOWNrxQuality is UNKNOWN
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -222,7 +222,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the uplink network information changes.
-        /// The SDK triggers this callback when the uplink network information changes.This callback only applies to scenarios where you push externally encoded video data in H.264 format to the SDK.
+        /// The SDK triggers this Callback when the uplink network information changes.This Callback only applies to scenarios where you push externally encoded video data in H.264 format to the SDK.
         /// </summary>
         ///
         /// <param name="info"> The uplink network information. See UplinkNetworkInfo .</param>
@@ -237,7 +237,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the last-mile network quality of the local user.
-        /// This callback reports the last-mile network conditions of the local user before the user joins the channel. Last mile refers to the connection between the local device and Agora's edge server.Before the user joins the channel, this callback is triggered by the SDK once StartLastmileProbeTest is called and reports the last-mile network conditions of the local user.
+        /// This Callback reports the last-mile network conditions of the local user before the user joins the channel. Last mile refers to the connection between the local device and Agora's edge server.Before the user joins the channel, this Callback is triggered by the SDK once StartLastmileProbeTest is called and reports the last-mile network conditions of the local user.
         /// </summary>
         ///
         /// <param name="quality"> The last-mile network quality. 
@@ -255,7 +255,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the first local video frame is displayed on the local video view.
-        /// The SDK triggers this callback when the first local video frame is displayed on the local video view.
+        /// The SDK triggers this Callback when the first local video frame is displayed on the local video view.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -264,19 +264,19 @@ namespace Agora.Rtc
         ///
         /// <param name="height"> The height (px) of the first local video frame.</param>
         ///
-        /// <param name="elapsed"> Time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this callback. If you call StartPreview [1/2] JoinChannel [2/2], then this parameter is the time elapsed from calling the StartPreview [1/2]</param>
+        /// <param name="elapsed"> Time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this Callback. If you call StartPreview [1/2] JoinChannel [2/2], then this parameter is the time elapsed from calling the StartPreview [1/2]</param>
         ///
         public virtual void OnFirstLocalVideoFrame(RtcConnection connection, int width, int height, int elapsed) { }
 
         ///
         /// <summary>
         /// Occurs when the first video frame is published.
-        /// The SDK triggers this callback under one of the following circumstances:The local client enables the video module and calls JoinChannel [2/2] successfully.The local client calls MuteLocalVideoStream (true) and MuteLocalVideoStream(false) in sequence.The local client calls DisableVideo and EnableVideo in sequence.
+        /// The SDK triggers this Callback under one of the following circumstances:The local client enables the video module and calls JoinChannel [2/2] successfully.The local client calls MuteLocalVideoStream (true) and MuteLocalVideoStream(false) in sequence.The local client calls DisableVideo and EnableVideo in sequence.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
         ///
-        /// <param name="elapsed"> Time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this callback.</param>
+        /// <param name="elapsed"> Time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this Callback.</param>
         ///
         public virtual void OnFirstLocalVideoFramePublished(RtcConnection connection, int elapsed) { }
 
@@ -288,7 +288,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the first remote video frame is received and decoded.
-        /// The SDK triggers this callback under one of the following circumstances:The remote user joins the channel and sends the video stream.The remote user stops sending the video stream and re-sends it after 15 seconds. Reasons for such an interruption include:The remote user leaves the channel.The remote user drops offline.The remote user calls MuteLocalVideoStream to stop sending the video stream.The remote user calls DisableVideo to disable video.
+        /// The SDK triggers this Callback under one of the following circumstances:The remote user joins the channel and sends the video stream.The remote user stops sending the video stream and re-sends it after 15 seconds. Reasons for such an interruption include:The remote user leaves the channel.The remote user drops offline.The remote user calls MuteLocalVideoStream to stop sending the video stream.The remote user calls DisableVideo to disable video.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -299,7 +299,7 @@ namespace Agora.Rtc
         ///
         /// <param name="height"> The height (px) of the video stream.</param>
         ///
-        /// <param name="elapsed"> The time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this callback.</param>
+        /// <param name="elapsed"> The time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this Callback.</param>
         ///
         public virtual void OnFirstRemoteVideoDecoded(RtcConnection connection, uint remoteUid, int width, int height, int elapsed) { }
 
@@ -325,7 +325,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the result of video content moderation.
-        /// After calling enableContentInspect to enable the video content moderation, and setting the type parameter in ContentInspectConfig toCONTENT_INSPECT_MODERATION, the SDK triggers the onContentInspectResult callback and reports the result of video content moderation.
+        /// After calling enableContentInspect to enable the video content moderation, and setting the type parameter in ContentInspectConfig toCONTENT_INSPECT_MODERATION, the SDK triggers the onContentInspectResult Callback and reports the result of video content moderation.
         /// </summary>
         ///
         /// <param name="result"> The results of video content moderation. See CONTENT_INSPECT_RESULT .</param>
@@ -335,7 +335,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the result of taking a video snapshot.
-        /// After a successful takeSnapshot method call, the SDK triggers this callback to report whether the snapshot is successfully taken, as well as the details for that snapshot.
+        /// After a successful takeSnapshot method call, the SDK triggers this Callback to report whether the snapshot is successfully taken, as well as the details for that snapshot.
         /// </summary>
         ///
         /// <param name="channel"> The channel name.</param>
@@ -355,7 +355,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the local video stream state changes.
-        /// When the state of the local video stream changes (including the state of the video capture and encoding), the SDK triggers this callback to report the current state. This callback indicates the state of the local video stream, including camera capturing and video encoding, and allows you to troubleshoot issues when exceptions occur.The SDK triggers the OnLocalVideoStateChanged callback with the state code of LOCAL_VIDEO_STREAM_STATE_FAILED and error code of LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE in the following situations:The app switches to the background, and the system gets the camera resource.The camera starts normally, but does not output video frames for four consecutive seconds.When the camera outputs the captured video frames, if the video frames are the same for 15 consecutive frames, the SDK triggers the OnLocalVideoStateChanged callback with the state code of LOCAL_VIDEO_STREAM_STATE_CAPTURING and error code of LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE. Note that the video frame duplication detection is only available for video frames with a resolution greater than 200 × 200, a frame rate greater than or equal to 10 fps, and a bitrate less than 20 Kbps.For some device models, the SDK does not trigger this callback when the state of the local video changes while the local video capturing device is in use, so you have to make your own timeout judgment.
+        /// When the state of the local video stream changes (including the state of the video capture and encoding), the SDK triggers this Callback to report the current state. This Callback indicates the state of the local video stream, including camera capturing and video encoding, and allows you to troubleshoot issues when exceptions occur.The SDK triggers the OnLocalVideoStateChanged Callback with the state code of LOCAL_VIDEO_STREAM_STATE_FAILED and error code of LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE in the following situations:The app switches to the background, and the system gets the camera resource.The camera starts normally, but does not output video frames for four consecutive seconds.When the camera outputs the captured video frames, if the video frames are the same for 15 consecutive frames, the SDK triggers the OnLocalVideoStateChanged Callback with the state code of LOCAL_VIDEO_STREAM_STATE_CAPTURING and error code of LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE. Note that the video frame duplication detection is only available for video frames with a resolution greater than 200 × 200, a frame rate greater than or equal to 10 fps, and a bitrate less than 20 Kbps.For some device models, the SDK does not trigger this Callback when the state of the local video changes while the local video capturing device is in use, so you have to make your own timeout judgment.
         /// </summary>
         ///
         /// <param name="state"> The state of the local video, see LOCAL_VIDEO_STREAM_STATE .</param>
@@ -368,7 +368,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the remote video stream state changes.
-        /// This callback does not work properly when the number of users (in the communication profile) or hosts (in the live streaming channel) in a channel exceeds 17.
+        /// This Callback does not work properly when the number of users (in the communication profile) or hosts (in the live streaming channel) in a channel exceeds 17.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -379,7 +379,7 @@ namespace Agora.Rtc
         ///
         /// <param name="reason"> The reason for the remote video state change, see REMOTE_VIDEO_STATE_REASON .</param>
         ///
-        /// <param name="elapsed"> Time elapsed (ms) from the local user calling the JoinChannel [2/2] method until the SDK triggers this callback.</param>
+        /// <param name="elapsed"> Time elapsed (ms) from the local user calling the JoinChannel [2/2] method until the SDK triggers this Callback.</param>
         ///
         public virtual void OnRemoteVideoStateChanged(RtcConnection connection, uint remoteUid, REMOTE_VIDEO_STATE state, REMOTE_VIDEO_STATE_REASON reason, int elapsed) { }
 
@@ -396,21 +396,21 @@ namespace Agora.Rtc
         ///
         /// <param name="height"> The height (px) of the video stream.</param>
         ///
-        /// <param name="elapsed"> The time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this callback.</param>
+        /// <param name="elapsed"> The time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this Callback.</param>
         ///
         public virtual void OnFirstRemoteVideoFrame(RtcConnection connection, uint remoteUid, int width, int height, int elapsed) { }
 
         ///
         /// <summary>
         /// Occurs when a remote user (COMMUNICATION)/ host (LIVE_BROADCASTING) joins the channel.
-        /// In a communication channel, this callback indicates that a remote user joins the channel. The SDK also triggers this callback to report the existing users in the channel when a user joins the channel.In a live-broadcast channel, this callback indicates that a host joins the channel. The SDK also triggers this callback to report the existing hosts in the channel when a host joins the channel. Agora recommends limiting the number of hosts to 17.The SDK triggers this callback under one of the following circumstances:A remote user/host joins the channel by calling the JoinChannel [2/2] method.A remote user switches the user role to the host after joining the channel.A remote user/host rejoins the channel after a network interruption.
+        /// In a communication channel, this Callback indicates that a remote user joins the channel. The SDK also triggers this Callback to report the existing users in the channel when a user joins the channel.In a live-broadcast channel, this Callback indicates that a host joins the channel. The SDK also triggers this Callback to report the existing hosts in the channel when a host joins the channel. Agora recommends limiting the number of hosts to 17.The SDK triggers this Callback under one of the following circumstances:A remote user/host joins the channel by calling the JoinChannel [2/2] method.A remote user switches the user role to the host after joining the channel.A remote user/host rejoins the channel after a network interruption.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
         ///
         /// <param name="remoteUid"> The ID of the user or host who joins the channel.</param>
         ///
-        /// <param name="elapsed"> Time delay (ms) from the local user calling JoinChannel [2/2] until this callback is triggered.</param>
+        /// <param name="elapsed"> Time delay (ms) from the local user calling JoinChannel [2/2] until this Callback is triggered.</param>
         ///
         public virtual void OnUserJoined(RtcConnection connection, uint remoteUid, int elapsed) { }
 
@@ -432,7 +432,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when a remote user (in the communication profile) or a host (in the live streaming profile) stops/resumes sending the audio stream.
-        /// This method is about to be deprecated. Agora recommends you using OnRemoteAudioStateChanged instead.The SDK triggers this callback when the remote user stops or resumes sending the audio stream by calling the MuteLocalAudioStream method.This callback does not work properly when the number of users (in the communication profile) or hosts (in the live streaming channel) in a channel exceeds 17.
+        /// This method is about to be deprecated. Agora recommends you using OnRemoteAudioStateChanged instead.The SDK triggers this Callback when the remote user stops or resumes sending the audio stream by calling the MuteLocalAudioStream method.This Callback does not work properly when the number of users (in the communication profile) or hosts (in the live streaming channel) in a channel exceeds 17.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -447,7 +447,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when a remote user stops/resumes publishing the video stream.
-        /// This method is about to be deprecated. Agora recommends you using OnRemoteVideoStateChanged instead.When a remote user calls MuteLocalVideoStream to stop or resume publishing the video stream, the SDK triggers this callback to report the state of the remote user's publishing stream to the local user.This callback can be inaccurate when the number of users (in the communication profile) or hosts (in the live streaming profile) in a channel exceeds 17.
+        /// This method is about to be deprecated. Agora recommends you using OnRemoteVideoStateChanged instead.When a remote user calls MuteLocalVideoStream to stop or resume publishing the video stream, the SDK triggers this Callback to report the state of the remote user's publishing stream to the local user.This Callback can be inaccurate when the number of users (in the communication profile) or hosts (in the live streaming profile) in a channel exceeds 17.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -462,7 +462,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when a remote user enables/disables the video module.
-        /// This method is about to be deprecated. Agora recommends you using OnRemoteVideoStateChanged instead.Once the video module is disabled, the user can only use a voice call. The user cannot send or receive any video.The SDK triggers this callback when a remote user enables or disables the video module by calling the EnableVideo or DisableVideo method.
+        /// This method is about to be deprecated. Agora recommends you using OnRemoteVideoStateChanged instead.Once the video module is disabled, the user can only use a voice call. The user cannot send or receive any video.The SDK triggers this Callback when a remote user enables or disables the video module by calling the EnableVideo or DisableVideo method.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -477,7 +477,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when a specific remote user enables/disables the local video capturing function.
-        /// The SDK triggers this callback when the remote user resumes or stops capturing the video stream by calling the EnableLocalVideo method.
+        /// The SDK triggers this Callback when the remote user resumes or stops capturing the video stream by calling the EnableLocalVideo method.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -509,7 +509,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the statistics of the local audio stream.
-        /// The SDK triggers this callback once every two seconds.
+        /// The SDK triggers this Callback once every two seconds.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -521,7 +521,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the statistics of the audio stream sent by each remote users.
-        /// The SDK triggers this callback once every two seconds. If a channel includes multiple users, the SDK triggers this callback as many times.
+        /// The SDK triggers this Callback once every two seconds. If a channel includes multiple users, the SDK triggers this Callback as many times.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -533,7 +533,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the statistics of the local video stream.
-        /// The SDK triggers this callback once every two seconds to report the statistics of the local video stream.
+        /// The SDK triggers this Callback once every two seconds to report the statistics of the local video stream.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -545,7 +545,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the statistics of the video stream sent by each remote users.
-        /// Reports the statistics of the video stream from the remote users. The SDK triggers this callback once every two seconds for each remote user. If a channel has multiple users/hosts sending video streams, the SDK triggers this callback as many times.
+        /// Reports the statistics of the video stream from the remote users. The SDK triggers this Callback once every two seconds for each remote user. If a channel has multiple users/hosts sending video streams, the SDK triggers this Callback as many times.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -557,7 +557,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the camera turns on and is ready to capture the video.
-        /// Deprecated:Please use LOCAL_VIDEO_STREAM_STATE_CAPTURING(1) in OnLocalVideoStateChanged instead.This callback indicates that the camera has been successfully turned on and you can start to capture video.
+        /// Deprecated:Please use LOCAL_VIDEO_STREAM_STATE_CAPTURING(1) in OnLocalVideoStateChanged instead.This Callback indicates that the camera has been successfully turned on and you can start to capture video.
         /// </summary>
         ///
         public virtual void OnCameraReady() { }
@@ -596,7 +596,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the face detection result of the local user.
-        /// Once you enable face detection by calling EnableFaceDetection (true), you can get the following information on the local user in real-time:The width and height of the local video.The position of the human face in the local view.The distance between the human face and the screen.This value is based on the fitting calculation of the local video size and the position of the human face.This callback is for Android and iOS only.When it is detected that the face in front of the camera disappears, the callback will be triggered immediately. When no human face is detected, the frequency of this callback to be rtriggered wil be decreased to reduce power consumption on the local device.The SDK stops triggering this callback when a human face is in close proximity to the screen.
+        /// Once you enable face detection by calling EnableFaceDetection (true), you can get the following information on the local user in real-time:The width and height of the local video.The position of the human face in the local view.The distance between the human face and the screen.This value is based on the fitting calculation of the local video size and the position of the human face.This Callback is for Android and iOS only.When it is detected that the face in front of the camera disappears, the Callback will be triggered immediately. When no human face is detected, the frequency of this Callback to be rtriggered wil be decreased to reduce power consumption on the local device.The SDK stops triggering this Callback when a human face is in close proximity to the screen.
         /// </summary>
         ///
         /// <param name="imageWidth"> The width (px) of the video image captured by the local camera.</param>
@@ -614,7 +614,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the video stops playing.
-        /// Deprecated:Use LOCAL_VIDEO_STREAM_STATE_STOPPED(0) in the OnLocalVideoStateChanged callback instead.The application can use this callback to change the configuration of the view (for example, displaying other pictures in the view) after the video stops playing.
+        /// Deprecated:Use LOCAL_VIDEO_STREAM_STATE_STOPPED(0) in the OnLocalVideoStateChanged Callback instead.The application can use this Callback to change the configuration of the view (for example, displaying other pictures in the view) after the video stops playing.
         /// </summary>
         ///
         public virtual void OnVideoStopped() { }
@@ -622,7 +622,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the playback state of the music file changes.
-        /// This callback occurs when the playback state of the music file changes, and reports the current state and error code.
+        /// This Callback occurs when the playback state of the music file changes, and reports the current state and error code.
         /// </summary>
         ///
         /// <param name="state"> The playback state of the music file. See AUDIO_MIXING_STATE_TYPE .</param>
@@ -639,7 +639,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the SDK cannot reconnect to Agora's edge server 10 seconds after its connection to the server is interrupted.
-        /// The SDK triggers this callback when it cannot connect to the server 10 seconds after calling the JoinChannel [2/2] method, regardless of whether it is in the channel. If the SDK fails to rejoin the channel within 20 minutes after disconnecting, the SDK will stop trying to reconnect.
+        /// The SDK triggers this Callback when it cannot connect to the server 10 seconds after calling the JoinChannel [2/2] method, regardless of whether it is in the channel. If the SDK fails to rejoin the channel within 20 minutes after disconnecting, the SDK will stop trying to reconnect.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -649,7 +649,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the connection between the SDK and the server is interrupted.
-        /// Deprecated:Use OnConnectionStateChanged instead.The SDK triggers this callback when it loses connection with the server for more than four seconds after the connection is established. After triggering this callback, the SDK tries to reconnect to the server. You can use this callback to implement pop-up reminders. The difference between this callback and OnConnectionLost is:The SDK triggers the OnConnectionInterrupted callback when it loses connection with the server for more than four seconds after it successfully joins the channel.The SDK triggers the OnConnectionLost callback when it loses connection with the server for more than 10 seconds, whether or not it joins the channel.If the SDK fails to rejoin the channel 20 minutes after being disconnected from Agora's edge server, the SDK stops rejoining the channel.
+        /// Deprecated:Use OnConnectionStateChanged instead.The SDK triggers this Callback when it loses connection with the server for more than four seconds after the connection is established. After triggering this Callback, the SDK tries to reconnect to the server. You can use this Callback to implement pop-up reminders. The difference between this Callback and OnConnectionLost is:The SDK triggers the OnConnectionInterrupted Callback when it loses connection with the server for more than four seconds after it successfully joins the channel.The SDK triggers the OnConnectionLost Callback when it loses connection with the server for more than 10 seconds, whether or not it joins the channel.If the SDK fails to rejoin the channel 20 minutes after being disconnected from Agora's edge server, the SDK stops rejoining the channel.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -669,7 +669,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the local user receives the data stream from the remote user.
-        /// The SDK triggers this callback when the local user receives the stream message that the remote user sends by calling the SendStreamMessage method.
+        /// The SDK triggers this Callback when the local user receives the stream message that the remote user sends by calling the SendStreamMessage method.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -689,7 +689,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the local user does not receive the data stream from the remote user.
-        /// The SDK triggers this callback when the local user fails to receive the stream message that the remote user sends by calling the SendStreamMessage method.
+        /// The SDK triggers this Callback when the local user fails to receive the stream message that the remote user sends by calling the SendStreamMessage method.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -709,7 +709,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the token expires.
-        /// When the token expires during a call, the SDK triggers this callback to remind the app to renew the token.Once you receive this callback, generate a new token on your app server, and call JoinChannel [2/2] to rejoin the channel.
+        /// When the token expires during a call, the SDK triggers this Callback to remind the app to renew the token.Once you receive this Callback, generate a new token on your app server, and call JoinChannel [2/2] to rejoin the channel.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -719,7 +719,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the token expires in 30 seconds.
-        /// When the token is about to expire in 30 seconds, the SDK triggers this callback to remind the app to renew the token.Upon receiving this callback, generate a new token on your server, and call RenewToken to pass the new token to the SDK.
+        /// When the token is about to expire in 30 seconds, the SDK triggers this Callback to remind the app to renew the token.Upon receiving this Callback, generate a new token on your server, and call RenewToken to pass the new token to the SDK.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -731,12 +731,12 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the first audio frame is published.
-        /// The SDK triggers this callback under one of the following circumstances:The local client enables the audio module and calls JoinChannel [2/2] successfully.The local client calls MuteLocalAudioStream (true) and MuteLocalAudioStream(false) in sequence.The local client calls DisableAudio and EnableAudio in sequence.The local client calls pushAudioFrame to successfully push the audio frame to the SDK.
+        /// The SDK triggers this Callback under one of the following circumstances:The local client enables the audio module and calls JoinChannel [2/2] successfully.The local client calls MuteLocalAudioStream (true) and MuteLocalAudioStream(false) in sequence.The local client calls DisableAudio and EnableAudio in sequence.The local client calls pushAudioFrame to successfully push the audio frame to the SDK.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
         ///
-        /// <param name="elapsed"> Time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this callback.</param>
+        /// <param name="elapsed"> Time elapsed (ms) from the local user calling JoinChannel [2/2] until the SDK triggers this Callback.</param>
         ///
         public virtual void OnFirstLocalAudioFramePublished(RtcConnection connection, int elapsed) { }
 
@@ -750,28 +750,28 @@ namespace Agora.Rtc
         ///
         /// <param name="userId"> The ID of the remote user sending the audio frames.</param>
         ///
-        /// <param name="elapsed"> The time elapsed (ms) from the local user calling the JoinChannel [2/2] method until the SDK triggers this callback.</param>
+        /// <param name="elapsed"> The time elapsed (ms) from the local user calling the JoinChannel [2/2] method until the SDK triggers this Callback.</param>
         ///
         public virtual void OnFirstRemoteAudioFrame(RtcConnection connection, uint userId, int elapsed) { }
 
         ///
         /// <summary>
         /// Occurs when the SDK decodes the first remote audio frame for playback.
-        /// Deprecated:Use OnRemoteAudioStateChanged instead.The SDK triggers this callback under one of the following circumstances:The remote user joins the channel and sends the audio stream.The remote user stops sending the audio stream and re-sends it after 15 seconds, and the possible reasons include:The remote user leaves the channel.The remote user is offline.The remote user calls MuteLocalAudioStream to stop sending the video stream.The remote user calls DisableAudio to disable video.
+        /// Deprecated:Use OnRemoteAudioStateChanged instead.The SDK triggers this Callback under one of the following circumstances:The remote user joins the channel and sends the audio stream.The remote user stops sending the audio stream and re-sends it after 15 seconds, and the possible reasons include:The remote user leaves the channel.The remote user is offline.The remote user calls MuteLocalAudioStream to stop sending the video stream.The remote user calls DisableAudio to disable video.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
         ///
         /// <param name="uid"> The user ID of the remote user.</param>
         ///
-        /// <param name="elapsed"> The time elapsed (ms) from the local user calling the JoinChannel [2/2] method until the SDK triggers this callback.</param>
+        /// <param name="elapsed"> The time elapsed (ms) from the local user calling the JoinChannel [2/2] method until the SDK triggers this Callback.</param>
         ///
         public virtual void OnFirstRemoteAudioDecoded(RtcConnection connection, uint uid, int elapsed) { }
 
         ///
         /// <summary>
         /// Occurs when the local audio stream state changes.
-        /// When the state of the local audio stream changes (including the state of the audio capture and encoding), the SDK triggers this callback to report the current state. This callback indicates the state of the local audio stream, and allows you to troubleshoot issues when audio exceptions occur.When the state is LOCAL_AUDIO_STREAM_STATE_FAILED (3), you can view the error information in the error parameter.
+        /// When the state of the local audio stream changes (including the state of the audio capture and encoding), the SDK triggers this Callback to report the current state. This Callback indicates the state of the local audio stream, and allows you to troubleshoot issues when audio exceptions occur.When the state is LOCAL_AUDIO_STREAM_STATE_FAILED (3), you can view the error information in the error parameter.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -785,7 +785,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the remote audio state changes.
-        /// When the audio state of a remote user (in a voice/video call channel) or host (in a live streaming channel) changes, the SDK triggers this callback to report the current state of the remote audio stream.This callback does not work properly when the number of users (in the communication profile) or hosts (in the live streaming channel) in a channel exceeds 17.
+        /// When the audio state of a remote user (in a voice/video call channel) or host (in a live streaming channel) changes, the SDK triggers this Callback to report the current state of the remote audio stream.This Callback does not work properly when the number of users (in the communication profile) or hosts (in the live streaming channel) in a channel exceeds 17.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -796,14 +796,14 @@ namespace Agora.Rtc
         ///
         /// <param name="reason"> The reason of the remote audio state change. See REMOTE_AUDIO_STATE_REASON .</param>
         ///
-        /// <param name="elapsed"> Time elapsed (ms) from the local user calling the JoinChannel [2/2] method until the SDK triggers this callback.</param>
+        /// <param name="elapsed"> Time elapsed (ms) from the local user calling the JoinChannel [2/2] method until the SDK triggers this Callback.</param>
         ///
         public virtual void OnRemoteAudioStateChanged(RtcConnection connection, uint remoteUid, REMOTE_AUDIO_STATE state, REMOTE_AUDIO_STATE_REASON reason, int elapsed) { }
 
         ///
         /// <summary>
         /// Occurs when the most active remote speaker is detected.
-        /// After a successful call of EnableAudioVolumeIndication , the SDK continuously detects which remote user has the loudest volume. During the current period, the remote user, who is detected as the loudest for the most times, is the most active user.When the number of users is no less than two and an active remote speaker exists, the SDK triggers this callback and reports the uid of the most active remote speaker.If the most active remote speaker is always the same user, the SDK triggers the OnActiveSpeaker callback only once.If the most active remote speaker changes to another user, the SDK triggers this callback again and reports the uid of the new active remote speaker.
+        /// After a successful call of EnableAudioVolumeIndication , the SDK continuously detects which remote user has the loudest volume. During the current period, the remote user, who is detected as the loudest for the most times, is the most active user.When the number of users is no less than two and an active remote speaker exists, the SDK triggers this Callback and reports the uid of the most active remote speaker.If the most active remote speaker is always the same user, the SDK triggers the OnActiveSpeaker Callback only once.If the most active remote speaker changes to another user, the SDK triggers this Callback again and reports the uid of the new active remote speaker.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -815,7 +815,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the user role switches in the interactive live streaming.
-        /// The SDK triggers this callback when the local user switches the user role by calling SetClientRole [1/2]
+        /// The SDK triggers this Callback when the local user switches the user role by calling SetClientRole [1/2]
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -829,7 +829,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the user role switch fails in the interactive live streaming.
-        /// In the live broadcasting channel profile, when the local user calls SetClientRole [1/2] to switch their user role after joining the channel but the switch fails, the SDK triggers this callback to report the reason for the failure and the current user role.
+        /// In the live broadcasting channel profile, when the local user calls SetClientRole [1/2] to switch their user role after joining the channel but the switch fails, the SDK triggers this Callback to report the reason for the failure and the current user role.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -848,7 +848,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the media push state changes.
-        /// When the media push state changes, the SDK triggers this callback and reports the URL address and the current state of the media push. This callback indicates the state of the media push. When exceptions occur, you can troubleshoot issues by referring to the detailed error descriptions in the error code parameter.
+        /// When the media push state changes, the SDK triggers this Callback and reports the URL address and the current state of the media push. This Callback indicates the state of the media push. When exceptions occur, you can troubleshoot issues by referring to the detailed error descriptions in the error code parameter.
         /// </summary>
         ///
         /// <param name="url"> The URL address where the state of the media push changes.</param>
@@ -873,7 +873,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the publisher's transcoding is updated.
-        /// When the LiveTranscoding class in the setLiveTranscoding method updates, the SDK triggers the OnTranscodingUpdated callback to report the update information.If you call the setLiveTranscoding method to set the LiveTranscoding class for the first time, the SDK does not trigger this callback.
+        /// When the LiveTranscoding class in the setLiveTranscoding method updates, the SDK triggers the OnTranscodingUpdated Callback to report the update information.If you call the setLiveTranscoding method to set the LiveTranscoding class for the first time, the SDK does not trigger this Callback.
         /// </summary>
         ///
         public virtual void OnTranscodingUpdated() { }
@@ -922,7 +922,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the transport-layer statistics of each remote audio stream.
-        /// Deprecated:Please use OnRemoteAudioStats instead.This callback reports the transport-layer statistics, such as the packet loss rate and network time delay, once every two seconds after the local user receives an audio packet from a remote user. During a call, when the user receives the video packet sent by the remote user/host, the callback is triggered every 2 seconds.
+        /// Deprecated:Please use OnRemoteAudioStats instead.This Callback reports the transport-layer statistics, such as the packet loss rate and network time delay, once every two seconds after the local user receives an audio packet from a remote user. During a call, when the user receives the video packet sent by the remote user/host, the Callback is triggered every 2 seconds.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -940,7 +940,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the transport-layer statistics of each remote video stream.
-        /// Deprecated:This callback is deprecated; use OnRemoteVideoStats instead.This callback reports the transport-layer statistics, such as the packet loss rate and network time delay, once every two seconds after the local user receives a video packet from a remote user.During a call, when the user receives the video packet sent by the remote user/host, the callback is triggered every 2 seconds.
+        /// Deprecated:This Callback is deprecated; use OnRemoteVideoStats instead.This Callback reports the transport-layer statistics, such as the packet loss rate and network time delay, once every two seconds after the local user receives a video packet from a remote user.During a call, when the user receives the video packet sent by the remote user/host, the Callback is triggered every 2 seconds.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -958,7 +958,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the network connection state changes.
-        /// When the network connection state changes, the SDK triggers this callback and reports the current connection state and the reason for the change.
+        /// When the network connection state changes, the SDK triggers this Callback and reports the current connection state and the reason for the change.
         /// </summary>
         ///
         /// <param name="state"> The current connection state. For details, see CONNECTION_STATE_TYPE .</param>
@@ -980,7 +980,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the local network type changes.
-        /// This callback occurs when the connection state of the local user changes. You can get the connection state and reason for the state change in this callback. When the network connection is interrupted, this callback indicates whether the interruption is caused by a network type change or poor network conditions.
+        /// This Callback occurs when the connection state of the local user changes. You can get the connection state and reason for the state change in this Callback. When the network connection is interrupted, this Callback indicates whether the interruption is caused by a network type change or poor network conditions.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -992,7 +992,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Reports the built-in encryption errors.
-        /// When encryption is enabled by calling EnableEncryption , the SDK triggers this callback if an error occurs in encryption or decryption on the sender or the receiver side.
+        /// When encryption is enabled by calling EnableEncryption , the SDK triggers this Callback if an error occurs in encryption or decryption on the sender or the receiver side.
         /// </summary>
         ///
         /// <param name="connection"> The connection information. See RtcConnection .</param>
@@ -1014,7 +1014,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the SDK cannot get the device permission.
-        /// When the SDK fails to get the device permission, the SDK triggers this callback to report which device permission cannot be got.This method is for Android and iOS only.
+        /// When the SDK fails to get the device permission, the SDK triggers this Callback to report which device permission cannot be got.This method is for Android and iOS only.
         /// </summary>
         ///
         /// <param name="permissionType"> The type of the device permission. See PERMISSION_TYPE .</param>
@@ -1024,7 +1024,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the local user registers a user account.
-        /// After the local user successfully calls RegisterLocalUserAccount to register the user account or calls JoinChannelWithUserAccount [2/2] to join a channel, the SDK triggers the callback and informs the local user's UID and User Account.
+        /// After the local user successfully calls RegisterLocalUserAccount to register the user account or calls JoinChannelWithUserAccount [2/2] to join a channel, the SDK triggers the Callback and informs the local user's UID and User Account.
         /// </summary>
         ///
         /// <param name="uid"> The ID of the local user.</param>
@@ -1036,7 +1036,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the SDK gets the user ID and user account of the remote user.
-        /// After a remote user joins the channel, the SDK gets the UID and user account of the remote user, caches them in a mapping table object, and triggers this callback on the local client.
+        /// After a remote user joins the channel, the SDK gets the UID and user account of the remote user, caches them in a mapping table object, and triggers this Callback on the local client.
         /// </summary>
         ///
         /// <param name="uid"> The user ID of the remote user.</param>
@@ -1113,8 +1113,8 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// The event callback of the extension.
-        /// To listen for events while the extension is running, you need to register this callback.
+        /// The event Callback of the extension.
+        /// To listen for events while the extension is running, you need to register this Callback.
         /// </summary>
         ///
         /// <param name="value"> The value of the extension key.</param>
@@ -1130,7 +1130,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the extension is enabled.
-        /// After a successful call of EnableExtension (true), the extension triggers this callback.
+        /// After a successful call of EnableExtension (true), the extension triggers this Callback.
         /// </summary>
         ///
         /// <param name="provider"> The name of the extension provider.</param>
@@ -1142,7 +1142,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the extension is disabled.
-        /// After a successful call of EnableExtension (false), this callback is triggered.
+        /// After a successful call of EnableExtension (false), this Callback is triggered.
         /// </summary>
         ///
         /// <param name="extension"> The name of the extension.</param>
@@ -1154,7 +1154,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs when the extension runs incorrectly.
-        /// When calling EnableExtension (true) fails or the extension runs in error, the extension triggers this callback and reports the error code and reason.
+        /// When calling EnableExtension (true) fails or the extension runs in error, the extension triggers this Callback and reports the error code and reason.
         /// </summary>
         ///
         /// <param name="provider"> The name of the extension provider.</param>

+ 5 - 5
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/IVideoFrameObserver.cs

@@ -10,7 +10,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs each time the SDK receives a video frame captured by the local camera.
-        /// After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data captured by the local camera. You can then pre-process the data according to your scenarios.After pre-processing, you can send the processed video data back to the SDK through this callback.The video data that this callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified.
+        /// After you successfully register the video frame observer, the SDK triggers this Callback each time it receives a video frame. In this Callback, you can get the video data captured by the local camera. You can then pre-process the data according to your scenarios.After pre-processing, you can send the processed video data back to the SDK through this Callback.The video data that this Callback gets has not been pre-processed, and is not watermarked, cropped, rotated or beautified.
         /// </summary>
         ///
         /// <param name="videoFrame"> The video frame. See VideoFrame .</param>
@@ -29,7 +29,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs each time the SDK receives a video frame before encoding.
-        /// After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data before encoding and then process the data according to your particular scenarios.After processing, you can send the processed video data back to the SDK in this callback.To get the video data captured from the second screen before encoding, you need to set POSITION_PRE_ENCODER(1 << 2) as a frame position through GetObservedFramePosition .The video data that this callback gets has been preprocessed, with its content cropped and rotated, and the image enhanced.
+        /// After you successfully register the video frame observer, the SDK triggers this Callback each time it receives a video frame. In this Callback, you can get the video data before encoding and then process the data according to your particular scenarios.After processing, you can send the processed video data back to the SDK in this Callback.To get the video data captured from the second screen before encoding, you need to set POSITION_PRE_ENCODER(1 << 2) as a frame position through GetObservedFramePosition .The video data that this callback gets has been preprocessed, with its content cropped and rotated, and the image enhanced.
         /// </summary>
         ///
         /// <param name="config"> The configuration of the video frame. See VideoFrameBufferConfig .</param>
@@ -48,7 +48,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Occurs each time the SDK receives a video frame sent by the remote user.
-        /// After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. In this callback, you can get the video data before encoding. You can then process the data according to your particular scenarios.
+        /// After you successfully register the video frame observer, the SDK triggers this Callback each time it receives a video frame. In this Callback, you can get the video data before encoding. You can then process the data according to your particular scenarios.
         /// </summary>
         ///
         /// <param name="videoFrame"> The video frame. See VideoFrame .</param>
@@ -69,7 +69,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Sets the format of the raw video data output by the SDK.
-        /// If you want to get raw video data in a color encoding format other than YUV 420, register this callback when calling RegisterVideoFrameObserver . After you successfully register the video frame observer, the SDK triggers this callback each time it receives a video frame. You need to set your preferred video data in the return value of this callback.
+        /// If you want to get raw video data in a color encoding format other than YUV 420, register this Callback when calling RegisterVideoFrameObserver . After you successfully register the video frame observer, the SDK triggers this Callback each time it receives a video frame. You need to set your preferred video data in the return value of this Callback.
         /// </summary>
         ///
         /// <returns>
@@ -84,7 +84,7 @@ namespace Agora.Rtc
         ///
         /// <summary>
         /// Sets the frame position for the video observer.
-        /// After successfully registering the video data observer, the SDK uses this callback to determine whether to trigger OnCaptureVideoFrame , OnRenderVideoFrame and OnPreEncodeVideoFrame callback at each specific video frame processing position, so that you can observe the locally collected video data, the video data sent by the remote end, and the video data before encoding. You can set one or more positions you need to observe by modifying the return value according to your scenario:POSITION_POST_CAPTURER(1 << 0) : The position after capturing the video data, which corresponds to the OnCaptureVideoFrame callback.POSITION_PRE_RENDERER(1 << 1): The position before receiving the remote video data, which corresponds to the OnRenderVideoFrame callback.POSITION_PRE_ENCODER(1 << 2): The position before encoding the video data, which corresponds to the OnPreEncodeVideoFrame callback.Use '|' (the OR operator) to observe multiple frame positions.This callback observesPOSITION_POST_CAPTURER (1 << 0) andPOSITION_PRE_RENDERER (1 << 1) by default.To conserve the system consumption, you can reduce the number of frame positions that you want to observe.
+        /// After successfully registering the video data observer, the SDK uses this Callback to determine whether to trigger OnCaptureVideoFrame , OnRenderVideoFrame and OnPreEncodeVideoFrame Callback at each specific video frame processing position, so that you can observe the locally collected video data, the video data sent by the remote end, and the video data before encoding. You can set one or more positions you need to observe by modifying the return value according to your scenario:POSITION_POST_CAPTURER(1 << 0) : The position after capturing the video data, which corresponds to the OnCaptureVideoFrame callback.POSITION_PRE_RENDERER(1 << 1): The position before receiving the remote video data, which corresponds to the OnRenderVideoFrame callback.POSITION_PRE_ENCODER(1 << 2): The position before encoding the video data, which corresponds to the OnPreEncodeVideoFrame callback.Use '|' (the OR operator) to observe multiple frame positions.This callback observesPOSITION_POST_CAPTURER (1 << 0) andPOSITION_PRE_RENDERER (1 << 1) by default.To conserve the system consumption, you can reduce the number of frame positions that you want to observe.
         /// </summary>
         ///
         /// <returns>

+ 18 - 18
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/Types/AgoraBase.cs

@@ -1514,7 +1514,7 @@ namespace Agora.Rtc
     {
         ///
         /// <summary>
-        /// Whether to synchronize the data packet with the published audio packet.true: Synchronize the data packet with the audio packet.false: Do not synchronize the data packet with the audio packet.When you set the data packet to synchronize with the audio, then if the data packet delay is within the audio delay, the SDK triggers the OnStreamMessage callback when the synchronized audio packet is played out. Do not set this parameter as true if you need the receiver to receive the data packet immediately. Agora recommends that you set this parameter to true only when you need to implement specific functions, for example, lyric synchronization.
+        /// Whether to synchronize the data packet with the published audio packet.true: Synchronize the data packet with the audio packet.false: Do not synchronize the data packet with the audio packet.When you set the data packet to synchronize with the audio, then if the data packet delay is within the audio delay, the SDK triggers the OnStreamMessage Callback when the synchronized audio packet is played out. Do not set this parameter as true if you need the receiver to receive the data packet immediately. Agora recommends that you set this parameter to true only when you need to implement specific functions, for example, lyric synchronization.
         /// </summary>
         ///
         public bool syncWithAudio;
@@ -1908,14 +1908,14 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// Application CPU usage (%).The value of cpuTotalUsage is always reported as 0 in the OnLeaveChannel callback.As of Android 8.1, you cannot get the CPU usage from this attribute due to system limitations.
+        /// Application CPU usage (%).The value of cpuTotalUsage is always reported as 0 in the OnLeaveChannel Callback.As of Android 8.1, you cannot get the CPU usage from this attribute due to system limitations.
         /// </summary>
         ///
         public double cpuAppUsage { set; get; }
 
         ///
         /// <summary>
-        /// The system CPU usage (%).For Windows, in the multi-kernel environment, this member represents the average CPU usage. The value = (100 - System Idle Progress in Task Manager)/100.The value of cpuTotalUsage is always reported as 0 in the OnLeaveChannel callback.As of Android 8.1, you cannot get the CPU usage from this attribute due to system limitations.
+        /// The system CPU usage (%).For Windows, in the multi-kernel environment, this member represents the average CPU usage. The value = (100 - System Idle Progress in Task Manager)/100.The value of cpuTotalUsage is always reported as 0 in the OnLeaveChannel Callback.As of Android 8.1, you cannot get the CPU usage from this attribute due to system limitations.
         /// </summary>
         ///
         public double cpuTotalUsage { set; get; }
@@ -2332,7 +2332,7 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// The total active time (ms) between the start of the audio call and the callback of the remote user.The active time refers to the total duration of the remote user without the mute state.
+        /// The total active time (ms) between the start of the audio call and the Callback of the remote user.The active time refers to the total duration of the remote user without the mute state.
         /// </summary>
         ///
         public int totalActiveTime { set; get; }
@@ -2609,7 +2609,7 @@ namespace Agora.Rtc
     {
         ///
         /// <summary>
-        /// -1: The SDK does not detect the brightness level of the video image. Wait a few seconds to get the brightness level from captureBrightnessLevel in the next callback.
+        /// -1: The SDK does not detect the brightness level of the video image. Wait a few seconds to get the brightness level from captureBrightnessLevel in the next Callback.
         /// </summary>
         ///
         CAPTURE_BRIGHTNESS_LEVEL_INVALID = -1,
@@ -2696,7 +2696,7 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// 2: No permission to use the local audio capturing device. Remind your users to grant permission.Deprecated:This enumerator is deprecated. Please use RECORD_AUDIO in the OnPermissionError callback instead.
+        /// 2: No permission to use the local audio capturing device. Remind your users to grant permission.Deprecated:This enumerator is deprecated. Please use RECORD_AUDIO in the OnPermissionError Callback instead.
         /// </summary>
         ///
         LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION = 2,
@@ -2817,7 +2817,7 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// 2: No permission to use the local video capturing device. Remind the user to grant permissions and rejoin the channel.Deprecated:This enumerator is deprecated. Please use CAMERA in the OnPermissionError callback instead.
+        /// 2: No permission to use the local video capturing device. Remind the user to grant permissions and rejoin the channel.Deprecated:This enumerator is deprecated. Please use CAMERA in the OnPermissionError Callback instead.
         /// </summary>
         ///
         LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION = 2,
@@ -3309,7 +3309,7 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// The user ID.In the local user's callback, uid = 0.In the remote users' callback, uid is the user ID of a remote user whose instantaneous volume is one of the three highest.
+        /// The user ID.In the local user's Callback, uid = 0.In the remote users' Callback, uid is the user ID of a remote user whose instantaneous volume is one of the three highest.
         /// </summary>
         ///
         public uint uid { set; get; }
@@ -3323,14 +3323,14 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// Voice activity status of the local user.0: The local user is not speaking.1: The local user is speaking.The vad parameter does not report the voice activity status of remote users. In a remote user's callback, the value of vad is always 1.To use this parameter, you must set reportVad to true when calling EnableAudioVolumeIndication .
+        /// Voice activity status of the local user.0: The local user is not speaking.1: The local user is speaking.The vad parameter does not report the voice activity status of remote users. In a remote user's Callback, the value of vad is always 1.To use this parameter, you must set reportVad to true when calling EnableAudioVolumeIndication .
         /// </summary>
         ///
         public uint vad { set; get; }
 
         ///
         /// <summary>
-        /// The voice pitch of the local user. The value ranges between 0.0 and 4000.0.The voicePitch parameter does not report the voice pitch of remote users. In the remote users' callback, the value of voicePitch is always 0.0.
+        /// The voice pitch of the local user. The value ranges between 0.0 and 4000.0.The voicePitch parameter does not report the voice pitch of remote users. In the remote users' Callback, the value of voicePitch is always 0.0.
         /// </summary>
         ///
         public double voicePitch { set; get; }
@@ -3873,28 +3873,28 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// 2: The SDK is connecting to the Agora edge server. This state indicates that the SDK is establishing a connection with the specified channel after the app calls JoinChannel [2/2].If the SDK successfully joins the channel, it triggers the OnConnectionStateChanged callback and the connection state switches to CONNECTION_STATE_CONNECTED.After the connection is established, the SDK also initializes the media and triggers OnJoinChannelSuccess when everything is ready.
+        /// 2: The SDK is connecting to the Agora edge server. This state indicates that the SDK is establishing a connection with the specified channel after the app calls JoinChannel [2/2].If the SDK successfully joins the channel, it triggers the OnConnectionStateChanged Callback and the connection state switches to CONNECTION_STATE_CONNECTED.After the connection is established, the SDK also initializes the media and triggers OnJoinChannelSuccess when everything is ready.
         /// </summary>
         ///
         CONNECTION_STATE_CONNECTING = 2,
 
         ///
         /// <summary>
-        /// 3: The SDK is connected to the Agora edge server. This state also indicates that the user has joined a channel and can now publish or subscribe to a media stream in the channel. If the connection to the channel is lost because, for example, if the network is down or switched, the SDK automatically tries to reconnect and triggers OnConnectionStateChanged callback, notifying that the current network state becomes CONNECTION_STATE_RECONNECTING.
+        /// 3: The SDK is connected to the Agora edge server. This state also indicates that the user has joined a channel and can now publish or subscribe to a media stream in the channel. If the connection to the channel is lost because, for example, if the network is down or switched, the SDK automatically tries to reconnect and triggers OnConnectionStateChanged Callback, notifying that the current network state becomes CONNECTION_STATE_RECONNECTING.
         /// </summary>
         ///
         CONNECTION_STATE_CONNECTED = 3,
 
         ///
         /// <summary>
-        /// 4: The SDK keeps reconnecting to the Agora edge server. The SDK keeps rejoining the channel after being disconnected from a joined channel because of network issues.If the SDK cannot rejoin the channel within 10 seconds, it triggers OnConnectionLost , stays in the CONNECTION_STATE_RECONNECTING state, and keeps rejoining the channel.If the SDK fails to rejoin the channel 20 minutes after being disconnected from the Agora edge server, the SDK triggers the OnConnectionStateChanged callback, switches to the CONNECTION_STATE_FAILED state, and stops rejoining the channel.
+        /// 4: The SDK keeps reconnecting to the Agora edge server. The SDK keeps rejoining the channel after being disconnected from a joined channel because of network issues.If the SDK cannot rejoin the channel within 10 seconds, it triggers OnConnectionLost , stays in the CONNECTION_STATE_RECONNECTING state, and keeps rejoining the channel.If the SDK fails to rejoin the channel 20 minutes after being disconnected from the Agora edge server, the SDK triggers the OnConnectionStateChanged Callback, switches to the CONNECTION_STATE_FAILED state, and stops rejoining the channel.
         /// </summary>
         ///
         CONNECTION_STATE_RECONNECTING = 4,
 
         ///
         /// <summary>
-        /// 5: The SDK fails to connect to the Agora edge server or join the channel. This state indicates that the SDK stops trying to rejoin the channel. You must call LeaveChannel [1/2] You can call JoinChannel [2/2] to rejoin the channel.If the SDK is banned from joining the channel by the Agora edge server through the RESTful API, the SDK triggers the OnConnectionStateChanged callback.
+        /// 5: The SDK fails to connect to the Agora edge server or join the channel. This state indicates that the SDK stops trying to rejoin the channel. You must call LeaveChannel [1/2] You can call JoinChannel [2/2] to rejoin the channel.If the SDK is banned from joining the channel by the Agora edge server through the RESTful API, the SDK triggers the OnConnectionStateChanged Callback.
         /// </summary>
         ///
         CONNECTION_STATE_FAILED = 5,
@@ -4102,7 +4102,7 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// Video codec profile type for Media Push. Set it as 66, 77, or 100 (default). See VIDEO_CODEC_PROFILE_TYPE for details.If you set this parameter to any other value, Agora adjusts it to the default value.
+        /// Video codec profile type for Media Push. SaveLocal it as 66, 77, or 100 (default). See VIDEO_CODEC_PROFILE_TYPE for details.If you set this parameter to any other value, Agora adjusts it to the default value.
         /// </summary>
         ///
         public VIDEO_CODEC_PROFILE_TYPE videoCodecProfile { set; get; }
@@ -4720,7 +4720,7 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// 4: The SDK connection fails. You can use reason reported in the OnConnectionStateChanged callback to troubleshoot the failure.
+        /// 4: The SDK connection fails. You can use reason reported in the OnConnectionStateChanged Callback to troubleshoot the failure.
         /// </summary>
         ///
         CLIENT_ROLE_CHANGE_FAILED_CONNECTION_FAILED = 4,
@@ -5898,7 +5898,7 @@ namespace Agora.Rtc
 
     ///
     /// <summary>
-    /// Recording content. Set in StartAudioRecording [3/3] .
+    /// Recording content. SaveLocal in StartAudioRecording [3/3] .
     /// </summary>
     ///
     public enum AUDIO_FILE_RECORDING_TYPE
@@ -6344,7 +6344,7 @@ namespace Agora.Rtc
     {
         ///
         /// <summary>
-        /// 0: The initial state. After you successfully stop the channel media relay by calling StopChannelMediaRelay , the OnChannelMediaRelayStateChanged callback returns this state.
+        /// 0: The initial state. After you successfully stop the channel media relay by calling StopChannelMediaRelay , the OnChannelMediaRelayStateChanged Callback returns this state.
         /// </summary>
         ///
         RELAY_STATE_IDLE = 0,

+ 5 - 5
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/Types/AgoraMediaBase.cs

@@ -773,21 +773,21 @@ namespace Agora.Rtc
     {
         ///
         /// <summary>
-        /// 1: The post-capturer position, which corresponds to the video data in the OnCaptureVideoFrame callback.
+        /// 1: The post-capturer position, which corresponds to the video data in the OnCaptureVideoFrame Callback.
         /// </summary>
         ///
         POSITION_POST_CAPTURER = 1 << 0,
 
         ///
         /// <summary>
-        /// 2: The pre-renderer position, which corresponds to the video data in the OnRenderVideoFrame callback.
+        /// 2: The pre-renderer position, which corresponds to the video data in the OnRenderVideoFrame Callback.
         /// </summary>
         ///
         POSITION_PRE_RENDERER = 1 << 1,
 
         ///
         /// <summary>
-        /// 4: The pre-encoder position, which corresponds to the video data in the OnPreEncodeVideoFrame callback.
+        /// 4: The pre-encoder position, which corresponds to the video data in the OnPreEncodeVideoFrame Callback.
         /// </summary>
         ///
         POSITION_PRE_ENCODER = 1 << 2,
@@ -958,7 +958,7 @@ namespace Agora.Rtc
     ///
     /// <summary>
     /// Audio data format.
-    /// You can pass the AudioParams object in the return value of the following callbacks to set the audio data format for the corresponding callback: GetRecordAudioParams : Sets the audio data format for the OnRecordAudioFrame callback. GetPlaybackAudioParams : Sets the audio data format for the OnPlaybackAudioFrame callback. GetMixedAudioParams : Sets the audio data format for the OnMixedAudioFrame callback.The SDK calculates the sampling interval through the samplesPerCall, sampleRate, and channel parameters in AudioParams, and triggers the OnRecordAudioFrame, OnPlaybackAudioFrame, and OnMixedAudioFrame callbacks according to the sampling interval.Sample interval = samplePerCall/(sampleRate × channel).Ensure that the sample interval ≥ 0.01 (s).
+    /// You can pass the AudioParams object in the return value of the following callbacks to set the audio data format for the corresponding Callback: GetRecordAudioParams : Sets the audio data format for the OnRecordAudioFrame Callback. GetPlaybackAudioParams : Sets the audio data format for the OnPlaybackAudioFrame Callback. GetMixedAudioParams : Sets the audio data format for the OnMixedAudioFrame Callback.The SDK calculates the sampling interval through the samplesPerCall, sampleRate, and channel parameters in AudioParams, and triggers the OnRecordAudioFrame, OnPlaybackAudioFrame, and OnMixedAudioFrame callbacks according to the sampling interval.Sample interval = samplePerCall/(sampleRate × channel).Ensure that the sample interval ≥ 0.01 (s).
     /// </summary>
     ///
     public class AudioParams
@@ -1396,7 +1396,7 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// The interval (ms) of updating the recording information. The value range is [1000,10000]. Based on the value you set in this parameter, the SDK triggers the OnRecorderInfoUpdated callback to report the updated recording information.
+        /// The interval (ms) of updating the recording information. The value range is [1000,10000]. Based on the value you set in this parameter, the SDK triggers the OnRecorderInfoUpdated Callback to report the updated recording information.
         /// </summary>
         ///
         public int recorderInfoUpdateInterval { set; get; }

+ 1 - 1
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/Types/AgoraMediaPlayerTypesBase.cs

@@ -732,7 +732,7 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// The callback for custom media resource files. See IMediaPlayerCustomDataProvider .If you need to open a custom media resource, such as an encrypted media file, pass in a value to provider rather than to url.
+        /// The Callback for custom media resource files. See IMediaPlayerCustomDataProvider .If you need to open a custom media resource, such as an encrypted media file, pass in a value to provider rather than to url.
         /// </summary>
         ///
         public IMediaPlayerCustomDataProvider provider { set; get; }

+ 4 - 4
Assets/LangChaoRTC/Agora-RTC-Plugin/Agora-Unity-RTC-SDK/Code/Types/IAgoraRtcEngineBase.cs

@@ -95,7 +95,7 @@ namespace Agora.Rtc
 
     ///
     /// <summary>
-    /// The reason why the playback state of the music file changes. Reported in the OnAudioMixingStateChanged callback.
+    /// The reason why the playback state of the music file changes. Reported in the OnAudioMixingStateChanged Callback.
     /// </summary>
     ///
     public enum AUDIO_MIXING_REASON_TYPE
@@ -1145,7 +1145,7 @@ namespace Agora.Rtc
 
     ///
     /// <summary>
-    /// The image content of the thumbnail or icon. Set in ScreenCaptureSourceInfo .
+    /// The image content of the thumbnail or icon. SaveLocal in ScreenCaptureSourceInfo .
     /// </summary>
     ///
     public class ThumbImageBuffer
@@ -1189,7 +1189,7 @@ namespace Agora.Rtc
 
     ///
     /// <summary>
-    /// The type of the shared target. Set in ScreenCaptureSourceInfo .
+    /// The type of the shared target. SaveLocal in ScreenCaptureSourceInfo .
     /// </summary>
     ///
     public enum ScreenCaptureSourceType
@@ -2251,7 +2251,7 @@ namespace Agora.Rtc
 
         ///
         /// <summary>
-        /// 3: Fails to push streams to the CDN. You can troubleshoot the issue with the information reported by the OnDirectCdnStreamingStateChanged callback, and then push streams to the CDN again.
+        /// 3: Fails to push streams to the CDN. You can troubleshoot the issue with the information reported by the OnDirectCdnStreamingStateChanged Callback, and then push streams to the CDN again.
         /// </summary>
         ///
         DIRECT_CDN_STREAMING_STATE_FAILED = 3,

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Authentication/Credentials.cs

@@ -43,7 +43,7 @@
         public string Password { get; private set; }
 
         /// <summary>
-        /// Set up the authentication credentials with the username and password. The Type will be set to Unknown.
+        /// SaveLocal up the authentication credentials with the username and password. The Type will be set to Unknown.
         /// </summary>
         public Credentials(string userName, string password)
             :this(AuthenticationTypes.Unknown, userName, password)
@@ -51,7 +51,7 @@
         }
 
         /// <summary>
-        /// Set up the authentication credentials with the given authentication type, username and password.
+        /// SaveLocal up the authentication credentials with the given authentication type, username and password.
         /// </summary>
         public Credentials(AuthenticationTypes type, string userName, string password)
         {

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Authentication/Digest.cs

@@ -184,7 +184,7 @@ namespace BestHTTP.Authentication
                                 return string.Empty;
                         }
 
-                        // A string of 32 hex digits, which proves that the user knows a password. Set according to the qop value.
+                        // A string of 32 hex digits, which proves that the user knows a password. SaveLocal according to the qop value.
                         string response = string.Empty;
 
                         // The server sent QoP-value can be a list of supported methodes(if sent at all - in this case it's null).

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Cookies/Cookie.cs

@@ -216,7 +216,7 @@ namespace BestHTTP.Cookies
 
                 // http://tools.ietf.org/html/rfc6265#section-4.1.2.3
                 // WARNING: Some existing user agents treat an absent Domain attribute as if the Domain attribute were present and contained the current host name.
-                // For example, if example.com returns a Set-Cookie header without a Domain attribute, these user agents will erroneously send the cookie to www.example.com as well.
+                // For example, if example.com returns a SaveLocal-Cookie header without a Domain attribute, these user agents will erroneously send the cookie to www.example.com as well.
                 if (string.IsNullOrEmpty(cookie.Domain))
                     cookie.Domain = defaultDomain.Host;
 

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Decompression/Deflate.cs

@@ -410,7 +410,7 @@ namespace BestHTTP.Decompression.Zlib
             int j = k << 1; // left son of k
             while (j <= heap_len)
             {
-                // Set j to the smallest of the two sons:
+                // SaveLocal j to the smallest of the two sons:
                 if (j < heap_len && _IsSmaller(tree, heap[j + 1], heap[j], depth))
                 {
                     j++;
@@ -815,7 +815,7 @@ namespace BestHTTP.Decompression.Zlib
 
 
 
-        // Set the data type to ASCII or BINARY, using a crude approximation:
+        // SaveLocal the data type to ASCII or BINARY, using a crude approximation:
         // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
         // IN assertion: the fields freq of dyn_ltree are set and the total of all
         // frequencies does not exceed 64K (to fit in an int on 16 bit machines).

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Decompression/DeflateStream.cs

@@ -410,7 +410,7 @@ namespace BestHTTP.Decompression.Zlib
         /// </para>
         ///
         /// <para>
-        ///   Set this before the first call to <c>Read()</c> or <c>Write()</c> on the
+        ///   SaveLocal this before the first call to <c>Read()</c> or <c>Write()</c> on the
         ///   stream. If you try to set it afterwards, it will throw.
         /// </para>
         /// </remarks>

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Decompression/GZipStream.cs

@@ -559,7 +559,7 @@ namespace BestHTTP.Decompression.Zlib
         /// </para>
         ///
         /// <para>
-        ///   Set this before the first call to <c>Read()</c> or <c>Write()</c> on the
+        ///   SaveLocal this before the first call to <c>Read()</c> or <c>Write()</c> on the
         ///   stream. If you try to set it afterwards, it will throw.
         /// </para>
         /// </remarks>

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Decompression/ZlibCodec.cs

@@ -618,7 +618,7 @@ namespace BestHTTP.Decompression.Zlib
 
 
         /// <summary>
-        /// Set the CompressionStrategy and CompressionLevel for a deflation session.
+        /// SaveLocal the CompressionStrategy and CompressionLevel for a deflation session.
         /// </summary>
         /// <param name="level">the level of compression to use.</param>
         /// <param name="strategy">the strategy to use for compression.</param>
@@ -632,7 +632,7 @@ namespace BestHTTP.Decompression.Zlib
 
 
         /// <summary>
-        /// Set the dictionary to be used for either Inflation or Deflation.
+        /// SaveLocal the dictionary to be used for either Inflation or Deflation.
         /// </summary>
         /// <param name="dictionary">The dictionary bytes to use.</param>
         /// <returns>Z_OK if all goes well.</returns>

+ 14 - 14
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Extensions/Future.cs

@@ -76,30 +76,30 @@ namespace BestHTTP.Futures
         Exception error { get; }
 
         /// <summary>
-        /// Adds a new callback to invoke when an intermediate result is known.
+        /// Adds a new Callback to invoke when an intermediate result is known.
         /// </summary>
-        /// <param name="callback">The callback to invoke.</param>
+        /// <param name="callback">The Callback to invoke.</param>
         /// <returns>The future so additional calls can be chained together.</returns>
         IFuture<T> OnItem(FutureValueCallback<T> callback);
 
         /// <summary>
-        /// Adds a new callback to invoke if the future value is retrieved successfully.
+        /// Adds a new Callback to invoke if the future value is retrieved successfully.
         /// </summary>
-        /// <param name="callback">The callback to invoke.</param>
+        /// <param name="callback">The Callback to invoke.</param>
         /// <returns>The future so additional calls can be chained together.</returns>
         IFuture<T> OnSuccess(FutureValueCallback<T> callback);
 
         /// <summary>
-        /// Adds a new callback to invoke if the future has an error.
+        /// Adds a new Callback to invoke if the future has an error.
         /// </summary>
-        /// <param name="callback">The callback to invoke.</param>
+        /// <param name="callback">The Callback to invoke.</param>
         /// <returns>The future so additional calls can be chained together.</returns>
         IFuture<T> OnError(FutureErrorCallback callback);
 
         /// <summary>
-        /// Adds a new callback to invoke if the future value is retrieved successfully or has an error.
+        /// Adds a new Callback to invoke if the future value is retrieved successfully or has an error.
         /// </summary>
-        /// <param name="callback">The callback to invoke.</param>
+        /// <param name="callback">The Callback to invoke.</param>
         /// <returns>The future so additional calls can be chained together.</returns>
         IFuture<T> OnComplete(FutureCallback<T> callback);
     }
@@ -189,9 +189,9 @@ namespace BestHTTP.Futures
         }
 
         /// <summary>
-        /// Adds a new callback to invoke if the future value is retrieved successfully.
+        /// Adds a new Callback to invoke if the future value is retrieved successfully.
         /// </summary>
-        /// <param name="callback">The callback to invoke.</param>
+        /// <param name="callback">The Callback to invoke.</param>
         /// <returns>The future so additional calls can be chained together.</returns>
         public IFuture<T> OnSuccess(FutureValueCallback<T> callback)
         {
@@ -208,9 +208,9 @@ namespace BestHTTP.Futures
         }
 
         /// <summary>
-        /// Adds a new callback to invoke if the future has an error.
+        /// Adds a new Callback to invoke if the future has an error.
         /// </summary>
-        /// <param name="callback">The callback to invoke.</param>
+        /// <param name="callback">The Callback to invoke.</param>
         /// <returns>The future so additional calls can be chained together.</returns>
         public IFuture<T> OnError(FutureErrorCallback callback)
         {
@@ -227,9 +227,9 @@ namespace BestHTTP.Futures
         }
 
         /// <summary>
-        /// Adds a new callback to invoke if the future value is retrieved successfully or has an error.
+        /// Adds a new Callback to invoke if the future value is retrieved successfully or has an error.
         /// </summary>
-        /// <param name="callback">The callback to invoke.</param>
+        /// <param name="callback">The Callback to invoke.</param>
         /// <returns>The future so additional calls can be chained together.</returns>
         public IFuture<T> OnComplete(FutureCallback<T> callback)
         {

+ 5 - 5
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/Forms/Implementations/HTTPMultiPartForm.cs

@@ -30,7 +30,7 @@ namespace BestHTTP.Forms
 
         public override void PrepareRequest(HTTPRequest request)
         {
-            // Set up Content-Type header for the request
+            // SaveLocal up Content-Type header for the request
             request.SetHeader("Content-Type", "multipart/form-data; boundary=\"" + Boundary + "\"");
         }
 
@@ -45,13 +45,13 @@ namespace BestHTTP.Forms
                 {
                     HTTPFieldData field = Fields[i];
 
-                    // Set the boundary
+                    // SaveLocal the boundary
                     ms.WriteLine("--" + Boundary);
 
-                    // Set up Content-Disposition header to our form with the name
+                    // SaveLocal up Content-Disposition header to our form with the name
                     ms.WriteLine("Content-Disposition: form-data; name=\"" + field.Name + "\"" + (!string.IsNullOrEmpty(field.FileName) ? "; filename=\"" + field.FileName + "\"" : string.Empty));
 
-                    // Set up Content-Type head for the form.
+                    // SaveLocal up Content-Type head for the form.
                     if (!string.IsNullOrEmpty(field.MimeType))
                         ms.WriteLine("Content-Type: " + field.MimeType);
 
@@ -69,7 +69,7 @@ namespace BestHTTP.Forms
 
                 IsChanged = false;
 
-                // Set the RawData of our request
+                // SaveLocal the RawData of our request
                 return CachedData = ms.ToArray();
             }
         }

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/HTTPConnection.cs

@@ -316,10 +316,10 @@ namespace BestHTTP
                                             // Remove the previously set Host header.
                                             CurrentRequest.RemoveHeader("Host");
 
-                                            // Set the Referer header to the last Uri.
+                                            // SaveLocal the Referer header to the last Uri.
                                             CurrentRequest.SetHeader("Referer", CurrentRequest.CurrentUri.ToString());
 
-                                            // Set the new Uri, the CurrentUri will return this while the IsRedirected property is true
+                                            // SaveLocal the new Uri, the CurrentUri will return this while the IsRedirected property is true
                                             CurrentRequest.RedirectUri = redirectUri;
 
                                             // Discard the redirect response, we don't need it any more

+ 8 - 8
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/HTTPManager.cs

@@ -35,7 +35,7 @@ namespace BestHTTP
             ConnectTimeout = TimeSpan.FromSeconds(20);
             RequestTimeout = TimeSpan.FromSeconds(60);
 
-            // Set the default logger mechanism
+            // SaveLocal the default logger mechanism
             logger = new BestHTTP.Logger.DefaultLogger();
 
 #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
@@ -68,7 +68,7 @@ namespace BestHTTP
 
 #if !BESTHTTP_DISABLE_CACHING && (!UNITY_WEBGL || UNITY_EDITOR)
         /// <summary>
-        /// Set to true, if caching is prohibited.
+        /// SaveLocal to true, if caching is prohibited.
         /// </summary>
         public static bool IsCachingDisabled { get; set; }
 #endif
@@ -80,7 +80,7 @@ namespace BestHTTP
 
 #if !BESTHTTP_DISABLE_COOKIES && (!UNITY_WEBGL || UNITY_EDITOR)
         /// <summary>
-        /// Set to false to disable all Cookie. It's default value is true.
+        /// SaveLocal to false to disable all Cookie. It's default value is true.
         /// </summary>
         public static bool IsCookiesEnabled { get; set; }
 #endif
@@ -528,7 +528,7 @@ namespace BestHTTP
         /// </summary>
         public static void OnUpdate()
         {
-            // We will try to acquire a lock. If it fails, we will skip this frame without calling any callback.
+            // We will try to acquire a lock. If it fails, we will skip this frame without calling any Callback.
             if (System.Threading.Monitor.TryEnter(Locker))
             {
                 try
@@ -562,7 +562,7 @@ namespace BestHTTP
 
                                 case HTTPConnectionStates.TimedOut:
                                     // The connection is still in TimedOut state, and if we waited enough time, we will dispatch the
-                                    //  callback and recycle the connection
+                                    //  Callback and recycle the connection
                                     try
                                     {
                                         if (DateTime.UtcNow - conn.TimedOutStart > TimeSpan.FromMilliseconds(500))
@@ -594,7 +594,7 @@ namespace BestHTTP
                                     // If it's a streamed request, it's finished now
                                     conn.CurrentRequest.FinishStreaming();
 
-                                    // Call the callback
+                                    // Call the Callback
                                     conn.HandleCallback();
 
                                     // Then recycle the connection
@@ -644,7 +644,7 @@ namespace BestHTTP
                                     // If it's a streamed request, it's finished now
                                     conn.CurrentRequest.FinishStreaming();
 
-                                    // Call the callback
+                                    // Call the Callback
                                     conn.HandleCallback();
 
                                     // It will remove from the ActiveConnections
@@ -672,7 +672,7 @@ namespace BestHTTP
                                 for (int i = 0; i < RecycledConnections.Count; ++i)
                                 {
                                     var connection = RecycledConnections[i];
-                                    // If in a callback made a request that acquired this connection, then we will not remove it from the
+                                    // If in a Callback made a request that acquired this connection, then we will not remove it from the
                                     //  active connections.
                                     if (connection.IsFree)
                                     {

+ 15 - 15
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/HTTPRequest.cs

@@ -20,42 +20,42 @@ namespace BestHTTP
     public enum HTTPRequestStates
     {
         /// <summary>
-        /// Initial status of a request. No callback will be called with this status.
+        /// Initial status of a request. No Callback will be called with this status.
         /// </summary>
         Initial,
 
         /// <summary>
-        /// Waiting in a queue to be processed. No callback will be called with this status.
+        /// Waiting in a queue to be processed. No Callback will be called with this status.
         /// </summary>
         Queued,
 
         /// <summary>
-        /// Processing of the request started. In this state the client will send the request, and parse the response. No callback will be called with this status.
+        /// Processing of the request started. In this state the client will send the request, and parse the response. No Callback will be called with this status.
         /// </summary>
         Processing,
 
         /// <summary>
-        /// The request finished without problem. Parsing the response done, the result can be used. The user defined callback will be called with a valid response object. The request’s Exception property will be null.
+        /// The request finished without problem. Parsing the response done, the result can be used. The user defined Callback will be called with a valid response object. The request’s Exception property will be null.
         /// </summary>
         Finished,
 
         /// <summary>
-        /// The request finished with an unexpected error. The user defined callback will be called with a null response object. The request's Exception property may contain more info about the error, but it can be null.
+        /// The request finished with an unexpected error. The user defined Callback will be called with a null response object. The request's Exception property may contain more info about the error, but it can be null.
         /// </summary>
         Error,
 
         /// <summary>
-        /// The request aborted by the client(HTTPRequest’s Abort() function). The user defined callback will be called with a null response. The request’s Exception property will be null.
+        /// The request aborted by the client(HTTPRequest’s Abort() function). The user defined Callback will be called with a null response. The request’s Exception property will be null.
         /// </summary>
         Aborted,
 
         /// <summary>
-        /// Connecting to the server timed out. The user defined callback will be called with a null response. The request’s Exception property will be null.
+        /// Connecting to the server timed out. The user defined Callback will be called with a null response. The request’s Exception property will be null.
         /// </summary>
         ConnectionTimedOut,
 
         /// <summary>
-        /// The request didn't finished in the given time. The user defined callback will be called with a null response. The request’s Exception property will be null.
+        /// The request didn't finished in the given time. The user defined Callback will be called with a null response. The request’s Exception property will be null.
         /// </summary>
         TimedOut
     }
@@ -211,7 +211,7 @@ namespace BestHTTP
         public int MaxFragmentQueueLength { get; set; }
 
         /// <summary>
-        /// The callback function that will be called when a request is fully processed or when any downloaded fragment is available if UseStreaming is true. Can be null for fire-and-forget requests.
+        /// The Callback function that will be called when a request is fully processed or when any downloaded fragment is available if UseStreaming is true. Can be null for fire-and-forget requests.
         /// </summary>
         public OnRequestFinishedDelegate Callback { get; set; }
 
@@ -358,7 +358,7 @@ namespace BestHTTP
         public TimeSpan Timeout { get; set; }
 
         /// <summary>
-        /// Set to true to enable Timeouts on streaming request. Default value is false.
+        /// SaveLocal to true to enable Timeouts on streaming request. Default value is false.
         /// </summary>
         public bool EnableTimoutForStreaming { get; set; }
 
@@ -409,7 +409,7 @@ namespace BestHTTP
         private OnBeforeRedirectionDelegate onBeforeRedirection;
 
         /// <summary>
-        /// This event will be fired before the plugin will write headers to the wire. New headers can be added in this callback. This event is called on a non-Unity thread!
+        /// This event will be fired before the plugin will write headers to the wire. New headers can be added in this Callback. This event is called on a non-Unity thread!
         /// </summary>
         public event OnBeforeHeaderSendDelegate OnBeforeHeaderSend
         {
@@ -438,7 +438,7 @@ namespace BestHTTP
         internal long DownloadLength { get; set; }
 
         /// <summary>
-        /// Set to true when the downloaded bytes are changed, and set to false when the OnProgress event called.
+        /// SaveLocal to true when the downloaded bytes are changed, and set to false when the OnProgress event called.
         /// </summary>
         internal bool DownloadProgressChanged { get; set; }
 
@@ -476,7 +476,7 @@ namespace BestHTTP
         internal long UploadLength { get; set; }
 
         /// <summary>
-        /// Set to true when the uploaded bytes are changed, and set to false when the OnUploadProgress event called.
+        /// SaveLocal to true when the uploaded bytes are changed, and set to false when the OnUploadProgress event called.
         /// </summary>
         internal bool UploadProgressChanged { get; set; }
 
@@ -687,7 +687,7 @@ namespace BestHTTP
 
 #if !BESTHTTP_DISABLE_UNITY_FORM
         /// <summary>
-        /// Set or overwrite the internal form. Remarks: on WP8 it doesn't supported!
+        /// SaveLocal or overwrite the internal form. Remarks: on WP8 it doesn't supported!
         /// </summary>
         public void SetFields(UnityEngine.WWWForm wwwForm)
         {
@@ -1234,7 +1234,7 @@ namespace BestHTTP
                         // Write to the wire
                         bufferStream.Flush();
 
-                        // let the callback fire
+                        // let the Callback fire
                         UploadProgressChanged = true;
                     }
 

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/HTTPResponse.cs

@@ -1096,7 +1096,7 @@ namespace BestHTTP
         }
 
         /// <summary>
-        /// If streaming is used, then every time this callback function called we can use this function to
+        /// If streaming is used, then every time this Callback function called we can use this function to
         ///  retrieve the downloaded and buffered data. The returned list can be null, if there is no data yet.
         /// </summary>
         /// <returns></returns>

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/HTTPUpdateDelegator.cs

@@ -25,7 +25,7 @@ namespace BestHTTP
         public static bool IsCreated { get; private set; }
 
         /// <summary>
-        /// Set it true before any CheckInstance() call, or before any request sent to dispatch callbacks on another thread.
+        /// SaveLocal it true before any CheckInstance() call, or before any request sent to dispatch callbacks on another thread.
         /// </summary>
         public static bool IsThreaded { get; set; }
 

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/PlatformSupport/TcpClient/TcpClient.cs

@@ -490,7 +490,7 @@ namespace BestHTTP.PlatformSupport.TcpClient.General
 
 
 #if UNITY_WINDOWS || UNITY_EDITOR
-                    // Set the keep-alive time and interval on windows
+                    // SaveLocal the keep-alive time and interval on windows
 
                     // https://msdn.microsoft.com/en-us/library/windows/desktop/dd877220%28v=vs.85%29.aspx
                     // https://msdn.microsoft.com/en-us/library/windows/desktop/ee470551%28v=vs.85%29.aspx

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/asn1/DerSet.cs

@@ -86,7 +86,7 @@ namespace Org.BouncyCastle.Asn1
 		 * <p>
 		 * As Der requires the constructed, definite-length model to
 		 * be used for structured types, this varies slightly from the
-		 * ASN.1 descriptions given. Rather than just outputing Set,
+		 * ASN.1 descriptions given. Rather than just outputing SaveLocal,
 		 * we also have to specify Constructed, and the objects length.
 		 */
 		internal override void Encode(

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/asn1/util/Asn1Dump.cs

@@ -105,7 +105,7 @@ namespace Org.BouncyCastle.Asn1.Utilities
                 string tab = indent + Tab;
 
                 buf.Append(indent);
-                buf.Append("BER Set");
+                buf.Append("BER SaveLocal");
                 buf.Append(NewLine);
 
                 foreach (Asn1Encodable o in ((Asn1Set)obj))
@@ -127,7 +127,7 @@ namespace Org.BouncyCastle.Asn1.Utilities
                 string tab = indent + Tab;
 
                 buf.Append(indent);
-                buf.Append("DER Set");
+                buf.Append("DER SaveLocal");
                 buf.Append(NewLine);
 
                 foreach (Asn1Encodable o in ((Asn1Set)obj))

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/crypto/engines/GOST28147Engine.cs

@@ -161,7 +161,7 @@ namespace Org.BouncyCastle.Crypto.Engines
 				ParametersWithSBox   param = (ParametersWithSBox)parameters;
 
 				//
-				// Set the S-Box
+				// SaveLocal the S-Box
 				//
 				byte[] sBox = param.GetSBox();
 				if (sBox.Length != Sbox_Default.Length)

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/crypto/macs/GOST28147Mac.cs

@@ -67,7 +67,7 @@ namespace Org.BouncyCastle.Crypto.Macs
 				ParametersWithSBox param = (ParametersWithSBox)parameters;
 
 				//
-				// Set the S-Box
+				// SaveLocal the S-Box
 				//
 				param.GetSBox().CopyTo(this.S, 0);
 

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/crypto/tls/TlsClientProtocol.cs

@@ -69,7 +69,7 @@ namespace Org.BouncyCastle.Crypto.Tls
          * <br/>
          * In blocking mode, this will not return until the handshake is complete.
          * In non-blocking mode, use {@link TlsPeer#NotifyHandshakeComplete()} to
-         * receive a callback when the handshake is complete.
+         * receive a Callback when the handshake is complete.
          *
          * @param tlsClient The {@link TlsClient} to use for the handshake.
          * @throws IOException If in blocking mode and handshake was not successful.

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/math/ec/ECFieldElement.cs

@@ -642,7 +642,7 @@ namespace Org.BouncyCastle.Math.EC
             BigInteger	x)
             : this(m, k, 0, 0, x)
         {
-            // Set k1 to k, and set k2 and k3 to 0
+            // SaveLocal k1 to k, and set k2 and k3 to 0
         }
 
         private F2mFieldElement(int m, int[] ks, LongArray x)

+ 3 - 3
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SecureProtocol/util/zlib/Deflate.cs

@@ -335,7 +335,7 @@ namespace Org.BouncyCastle.Utilities.Zlib {
                 head[i]=0;
             }
 
-            // Set the default configuration parameters:
+            // SaveLocal the default configuration parameters:
             max_lazy_match   = Deflate.config_table[level].max_lazy;
             good_match       = Deflate.config_table[level].good_length;
             nice_match       = Deflate.config_table[level].nice_length;
@@ -390,7 +390,7 @@ namespace Org.BouncyCastle.Utilities.Zlib {
             int v = heap[k];
             int j = k << 1;  // left son of k
             while (j <= heap_len) {
-                // Set j to the smallest of the two sons:
+                // SaveLocal j to the smallest of the two sons:
                 if (j < heap_len &&
                     smaller(tree, heap[j+1], heap[j], depth)){
                     j++;
@@ -721,7 +721,7 @@ namespace Org.BouncyCastle.Utilities.Zlib {
             last_eob_len = ltree[END_BLOCK*2+1];
         }
 
-        // Set the data type to ASCII or BINARY, using a crude approximation:
+        // SaveLocal the data type to ASCII or BINARY, using a crude approximation:
         // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise.
         // IN assertion: the fields freq of dyn_ltree are set and the total of all
         // frequencies does not exceed 64K (to fit in an int on 16 bit machines).

+ 3 - 3
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/ServerSentEvents/EventSource.cs

@@ -171,12 +171,12 @@ namespace BestHTTP.ServerSentEvents
 #if !UNITY_WEBGL || UNITY_EDITOR
             this.InternalRequest = new HTTPRequest(Uri, HTTPMethods.Get, true, true, OnRequestFinished);
 
-            // Set headers
+            // SaveLocal headers
             this.InternalRequest.SetHeader("Accept", "text/event-stream");
             this.InternalRequest.SetHeader("Cache-Control", "no-cache");
             this.InternalRequest.SetHeader("Accept-Encoding", "identity");
 
-            // Set protocol stuff
+            // SaveLocal protocol stuff
             this.InternalRequest.ProtocolHandler = SupportedProtocols.ServerSentEvents;
             this.InternalRequest.OnUpgraded = OnUpgraded;
 
@@ -479,7 +479,7 @@ namespace BestHTTP.ServerSentEvents
             if (this.State >= States.Closing)
                 return;
 
-            // 1.) Set the last event ID string of the event source to value of the last event ID buffer.
+            // 1.) SaveLocal the last event ID string of the event source to value of the last event ID buffer.
             // The buffer does not get reset, so the last event ID string of the event source remains set to this value until the next time it is set by the server.
             // We check here only for null, because it can be a non-null but empty string.
             if (message.Id != null)

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/ServerSentEvents/EventSourceResponse.cs

@@ -292,12 +292,12 @@ namespace BestHTTP.ServerSentEvents
 
             switch(field)
             {
-                // If the field name is "id" => Set the last event ID buffer to the field value.
+                // If the field name is "id" => SaveLocal the last event ID buffer to the field value.
                 case "id":
                     CurrentMessage.Id = value;
                     break;
 
-                // If the field name is "event" => Set the event type buffer to field value.
+                // If the field name is "event" => SaveLocal the event type buffer to field value.
                 case "event":
                     CurrentMessage.Event = value;
                     break;

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalR/Connection.cs

@@ -626,7 +626,7 @@ namespace BestHTTP.SignalR
                 return;
             ReconnectStarted = true;
 
-            // Set ReconnectStartedAt only when the previous State is not Reconnecting,
+            // SaveLocal ReconnectStartedAt only when the previous State is not Reconnecting,
             // so we keep the first date&time when we started reconnecting
             if (this.State != ConnectionStates.Reconnecting)
                 ReconnectStartedAt = DateTime.UtcNow;

+ 10 - 10
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalR/Hubs/Hub.cs

@@ -58,7 +58,7 @@ namespace BestHTTP.SignalR.Hubs
         private Dictionary<UInt64, ClientMessage> SentMessages = new Dictionary<ulong, ClientMessage>();
 
         /// <summary>
-        /// Methodname -> callback delegate mapping. This table stores the server callable functions.
+        /// Methodname -> Callback delegate mapping. This table stores the server callable functions.
         /// </summary>
         private Dictionary<string, OnMethodCallCallbackDelegate> MethodTable = new Dictionary<string, OnMethodCallCallbackDelegate>();
 
@@ -86,7 +86,7 @@ namespace BestHTTP.SignalR.Hubs
         #region Public Hub Functions
 
         /// <summary>
-        /// Registers a callback function to the given method.
+        /// Registers a Callback function to the given method.
         /// </summary>
         public void On(string method, OnMethodCallCallbackDelegate callback)
         {
@@ -94,7 +94,7 @@ namespace BestHTTP.SignalR.Hubs
         }
 
         /// <summary>
-        /// Removes callback from the given method.
+        /// Removes Callback from the given method.
         /// </summary>
         /// <param name="method"></param>
         public void Off(string method)
@@ -113,7 +113,7 @@ namespace BestHTTP.SignalR.Hubs
 
         /// <summary>
         /// Orders the server to call a method with the given arguments.
-        /// The onResult callback will be called when the server successfully called the function.
+        /// The onResult Callback will be called when the server successfully called the function.
         /// </summary>
         /// <returns>True if the plugin was able to send out the message</returns>
         public bool Call(string method, OnMethodResultDelegate onResult, params object[] args)
@@ -123,7 +123,7 @@ namespace BestHTTP.SignalR.Hubs
 
         /// <summary>
         /// Orders the server to call a method with the given arguments.
-        /// The onResult callback will be called when the server successfully called the function.
+        /// The onResult Callback will be called when the server successfully called the function.
         /// The onResultError will be called when the server can't call the function, or when the function throws an exception.
         /// </summary>
         /// <returns>True if the plugin was able to send out the message</returns>
@@ -134,8 +134,8 @@ namespace BestHTTP.SignalR.Hubs
 
         /// <summary>
         /// Orders the server to call a method with the given arguments.
-        /// The onResult callback will be called when the server successfully called the function.
-        /// The onProgress callback called multiple times when the method is a long running function and reports back its progress.
+        /// The onResult Callback will be called when the server successfully called the function.
+        /// The onProgress Callback called multiple times when the method is a long running function and reports back its progress.
         /// </summary>
         /// <returns>True if the plugin was able to send out the message</returns>
         public bool Call(string method, OnMethodResultDelegate onResult, OnMethodProgressDelegate onProgress, params object[] args)
@@ -145,9 +145,9 @@ namespace BestHTTP.SignalR.Hubs
 
         /// <summary>
         /// Orders the server to call a method with the given arguments.
-        /// The onResult callback will be called when the server successfully called the function.
+        /// The onResult Callback will be called when the server successfully called the function.
         /// The onResultError will be called when the server can't call the function, or when the function throws an exception.
-        /// The onProgress callback called multiple times when the method is a long running function and reports back its progress.
+        /// The onProgress Callback called multiple times when the method is a long running function and reports back its progress.
         /// </summary>
         /// <returns>True if the plugin was able to send out the message</returns>
         public bool Call(string method, OnMethodResultDelegate onResult, OnMethodFailedDelegate onResultError, OnMethodProgressDelegate onProgress, params object[] args)
@@ -229,7 +229,7 @@ namespace BestHTTP.SignalR.Hubs
                 }
                 catch(Exception ex)
                 {
-                    HTTPManager.Logger.Exception("Hub - " + this.Name, "IHub.OnMethod - callback", ex);
+                    HTTPManager.Logger.Exception("Hub - " + this.Name, "IHub.OnMethod - Callback", ex);
                 }
             }
             else

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalR/Transports/PollingTransport.cs

@@ -166,7 +166,7 @@ namespace BestHTTP.SignalR.Transports
                 return;
             }
 
-            // Set the pollRequest to null, now we can send out a new one
+            // SaveLocal the pollRequest to null, now we can send out a new one
             pollRequest = null;
 
             // error reason if there is any. We will call the manager's Error function if it's not empty.

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalR/Transports/PostSendTransportBase.cs

@@ -33,7 +33,7 @@ namespace BestHTTP.SignalR.Transports
 
             Connection.PrepareRequest(request, RequestTypes.Send);
 
-            // Set a lower priority then the default. This way requests that are sent out alongside with SignalR sent requests can be processed sooner.
+            // SaveLocal a lower priority then the default. This way requests that are sent out alongside with SignalR sent requests can be processed sooner.
             request.Priority = -1;
 
             request.Send();

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalR/Transports/WebSocketTransport.cs

@@ -52,7 +52,7 @@ namespace BestHTTP.SignalR.Transports
             // Create the WebSocket instance
             wSocket = new WebSocket.WebSocket(uri);
 
-            // Set up eventhandlers
+            // SaveLocal up eventhandlers
             wSocket.OnOpen += WSocket_OnOpen;
             wSocket.OnMessage += WSocket_OnMessage;
             wSocket.OnClosed += WSocket_OnClosed;

+ 4 - 4
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SignalRCore/HubConnection.cs

@@ -86,13 +86,13 @@ namespace BestHTTP.SignalRCore
         private long lastInvocationId = 0;
 
         /// <summary>
-        ///  Store the callback for all sent message that expect a return value from the server. All sent message has
+        ///  Store the Callback for all sent message that expect a return value from the server. All sent message has
         ///  a unique invocationId that will be sent back from the server.
         /// </summary>
         private Dictionary<long, Action<Message>> invocations = new Dictionary<long, Action<Message>>();
 
         /// <summary>
-        /// This is where we store the methodname => callback mapping.
+        /// This is where we store the methodname => Callback mapping.
         /// </summary>
         private Dictionary<string, Subscription> subscriptions = new Dictionary<string, Subscription>(StringComparer.OrdinalIgnoreCase);
 
@@ -530,7 +530,7 @@ namespace BestHTTP.SignalRCore
                                     }
                                     catch (Exception ex)
                                     {
-                                        HTTPManager.Logger.Exception("HubConnection", "OnMessages - StreamItem - callback", ex);
+                                        HTTPManager.Logger.Exception("HubConnection", "OnMessages - StreamItem - Callback", ex);
                                     }
                                 }
                             }
@@ -551,7 +551,7 @@ namespace BestHTTP.SignalRCore
                                     }
                                     catch (Exception ex)
                                     {
-                                        HTTPManager.Logger.Exception("HubConnection", "OnMessages - Completion - callback", ex);
+                                        HTTPManager.Logger.Exception("HubConnection", "OnMessages - Completion - Callback", ex);
                                     }
                                 }
                                 this.invocations.Remove(invocationId);

+ 3 - 3
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SocketIO/Events/EventDescriptor.cs

@@ -16,7 +16,7 @@ namespace BestHTTP.SocketIO.Events
         #region Public Properties
 
         /// <summary>
-        /// List of callback delegates.
+        /// List of Callback delegates.
         /// </summary>
         public List<SocketIOCallback> Callbacks { get; private set; }
 
@@ -51,14 +51,14 @@ namespace BestHTTP.SocketIO.Events
         }
 
         /// <summary>
-        /// Will call the callback delegates with the given parameters and remove the callbacks if this descriptor marked with a true OnlyOnce property.
+        /// Will call the Callback delegates with the given parameters and remove the callbacks if this descriptor marked with a true OnlyOnce property.
         /// </summary>
         public void Call(Socket socket, Packet packet, params object[] args)
         {
             if (CallbackArray == null || CallbackArray.Length < Callbacks.Count)
                 Array.Resize(ref CallbackArray, Callbacks.Count);
 
-            // Copy the callback delegates to an array, because in one of the callbacks we can modify the list(by calling On/Once/Off in an event handler)
+            // Copy the Callback delegates to an array, because in one of the callbacks we can modify the list(by calling On/Once/Off in an event handler)
             // This way we can prevent some strange bug
             Callbacks.CopyTo(CallbackArray);
 

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SocketIO/Events/EventTable.cs

@@ -32,7 +32,7 @@ namespace BestHTTP.SocketIO.Events
         }
 
         /// <summary>
-        /// Register a callback to a name with the given metadata.
+        /// Register a Callback to a name with the given metadata.
         /// </summary>
         public void Register(string eventName, SocketIOCallback callback, bool onlyOnce, bool autoDecodePayload)
         {
@@ -46,7 +46,7 @@ namespace BestHTTP.SocketIO.Events
             // If not found, create one
             if (desc == null)
                 events.Add(new EventDescriptor(onlyOnce, autoDecodePayload, callback));
-            else // if found, add the new callback
+            else // if found, add the new Callback
                 desc.Callbacks.Add(callback);
         }
 

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SocketIO/Packet.cs

@@ -338,14 +338,14 @@ namespace BestHTTP.SocketIO
         {
             StringBuilder builder = new StringBuilder();
 
-            // Set to Message if not set, and we are sending attachments
+            // SaveLocal to Message if not set, and we are sending attachments
             if (this.TransportEvent == TransportEventTypes.Unknown && this.AttachmentCount > 0)
                 this.TransportEvent = TransportEventTypes.Message;
 
             if (this.TransportEvent != TransportEventTypes.Unknown)
                 builder.Append(((int)this.TransportEvent).ToString());
 
-            // Set to BinaryEvent if not set, and we are sending attachments
+            // SaveLocal to BinaryEvent if not set, and we are sending attachments
             if (this.SocketIOEvent == SocketIOEventTypes.Unknown && this.AttachmentCount > 0)
                 this.SocketIOEvent = SocketIOEventTypes.BinaryEvent;
 

+ 5 - 5
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SocketIO/Socket.cs

@@ -50,7 +50,7 @@ namespace BestHTTP.SocketIO
         private Dictionary<int, SocketIOAckCallback> AckCallbacks;
 
         /// <summary>
-        /// Tha callback table that helps this class to manage event subscription and dispatching events.
+        /// Tha Callback table that helps this class to manage event subscription and dispatching events.
         /// </summary>
         private EventTable EventCallbacks;
 
@@ -265,7 +265,7 @@ namespace BestHTTP.SocketIO
         #region On Implementations
 
         /// <summary>
-        /// Register a callback for a given name
+        /// Register a Callback for a given name
         /// </summary>
         public void On(string eventName, SocketIOCallback callback)
         {
@@ -344,7 +344,7 @@ namespace BestHTTP.SocketIO
         }
 
         /// <summary>
-        /// Remove the specified callback.
+        /// Remove the specified Callback.
         /// </summary>
         public void Off(string eventName, SocketIOCallback callback)
         {
@@ -352,7 +352,7 @@ namespace BestHTTP.SocketIO
         }
 
         /// <summary>
-        /// Remove the specified callback.
+        /// Remove the specified Callback.
         /// </summary>
         public void Off(SocketIOEventTypes type, SocketIOCallback callback)
         {
@@ -364,7 +364,7 @@ namespace BestHTTP.SocketIO
         #region Packet Handling
 
         /// <summary>
-        /// Last call of the OnPacket chain(Transport -> Manager -> Socket), we will dispatch the event if there is any callback
+        /// Last call of the OnPacket chain(Transport -> Manager -> Socket), we will dispatch the event if there is any Callback
         /// </summary>
         void ISocket.OnPacket(Packet packet)
         {

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/SocketIO/SocketManager.cs

@@ -322,7 +322,7 @@ namespace BestHTTP.SocketIO
                 for (int i = 0; i < Sockets.Count; ++i)
                     (Sockets[i] as ISocket).Disconnect(removeSockets);
 
-            // Set to Closed after Socket's Disconnect. This way we can send the disconnect events to the server.
+            // SaveLocal to Closed after Socket's Disconnect. This way we can send the disconnect events to the server.
             State = States.Closed;
 
             LastHeartbeat = DateTime.MinValue;
@@ -649,7 +649,7 @@ namespace BestHTTP.SocketIO
                     // Start to send out unsent packets
                     SendOfflinePackets();
 
-                    // First time we reached this point. Set the LastHeartbeat to the current time, 'cause we are just opened.
+                    // First time we reached this point. SaveLocal the LastHeartbeat to the current time, 'cause we are just opened.
                     if (LastHeartbeat == DateTime.MinValue)
                     {
                         LastHeartbeat = DateTime.UtcNow;

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/BestHTTP/WebSocket/WebSocket.cs

@@ -83,7 +83,7 @@ namespace BestHTTP.WebSocket
 
 #if (!UNITY_WEBGL || UNITY_EDITOR)
         /// <summary>
-        /// Set to true to start a new thread to send Pings to the WebSocket server
+        /// SaveLocal to true to start a new thread to send Pings to the WebSocket server
         /// </summary>
         public bool StartPingThread { get; set; }
 
@@ -219,7 +219,7 @@ namespace BestHTTP.WebSocket
             uri = new Uri(scheme + "://" + uri.Host + ":" + port + uri.GetRequestPathAndQueryURL());
 
 #if !UNITY_WEBGL || UNITY_EDITOR
-            // Set up some default values.
+            // SaveLocal up some default values.
             this.PingFrequency = 1000;
             this.CloseAfterNoMesssage = TimeSpan.FromSeconds(10);
 

+ 4 - 4
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/HTTP/LargeFileDownloadSample.cs

@@ -107,7 +107,7 @@ namespace BestHTTP.Examples
                     // The request is currently processed. With UseStreaming == true, we can get the streamed fragments here
                     case HTTPRequestStates.Processing:
 
-                        // Set the DownloadLength, so we can display the progress
+                        // SaveLocal the DownloadLength, so we can display the progress
                         if (!PlayerPrefs.HasKey("DownloadLength"))
                         {
                             string value = resp.GetFirstHeaderValue("content-length");
@@ -190,7 +190,7 @@ namespace BestHTTP.Examples
 
             // Are there any progress, that we can continue?
             if (PlayerPrefs.HasKey("DownloadProgress"))
-                // Set the range header
+                // SaveLocal the range header
                 request.SetRangeHeader(PlayerPrefs.GetInt("DownloadProgress"));
             else
                 // This is a new request
@@ -204,7 +204,7 @@ namespace BestHTTP.Examples
             // We want to access the downloaded bytes while we are still downloading
             request.UseStreaming = true;
 
-            // Set a reasonable high fragment size. Here it is 5 megabytes.
+            // SaveLocal a reasonable high fragment size. Here it is 5 megabytes.
             request.StreamFragmentSize = fragmentSize;
 
             // Start Processing the request
@@ -234,7 +234,7 @@ namespace BestHTTP.Examples
 
                 PlayerPrefs.Save();
 
-                // Set the progress to the actually processed bytes
+                // SaveLocal the progress to the actually processed bytes
                 progress = PlayerPrefs.GetInt("DownloadProgress") / (float)PlayerPrefs.GetInt("DownloadLength");
             }
         }

+ 5 - 5
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/HTTP/TextureDownloadSample.cs

@@ -48,7 +48,7 @@ namespace BestHTTP.Examples
 
         void Awake()
         {
-            // Set a well observable value
+            // SaveLocal a well observable value
             // This is how many concurrent requests can be made to a server
             HTTPManager.MaxConnectionPerServer = 1;
 
@@ -59,7 +59,7 @@ namespace BestHTTP.Examples
 
         void OnDestroy()
         {
-            // Set back to its defualt value.
+            // SaveLocal back to its defualt value.
             HTTPManager.MaxConnectionPerServer = 4;
         }
 
@@ -98,7 +98,7 @@ namespace BestHTTP.Examples
 
         void DownloadImages()
         {
-            // Set these metadatas to its initial values
+            // SaveLocal these metadatas to its initial values
 #if !BESTHTTP_DISABLE_CACHING && (!UNITY_WEBGL || UNITY_EDITOR)
             allDownloadedFromLocalCache = true;
 #endif
@@ -106,13 +106,13 @@ namespace BestHTTP.Examples
 
             for (int i = 0; i < Images.Length; ++i)
             {
-                // Set a blank placeholder texture, overriding previously downloaded texture
+                // SaveLocal a blank placeholder texture, overriding previously downloaded texture
                 Textures[i] = new Texture2D(100, 150);
 
                 // Construct the request
                 var request = new HTTPRequest(new Uri(BaseURL + Images[i]), ImageDownloaded);
 
-                // Set the Tag property, we can use it as a general storage bound to the request
+                // SaveLocal the Tag property, we can use it as a general storage bound to the request
                 request.Tag = Textures[i];
 
                 // Send out the request

+ 22 - 22
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/Helpers/CodeBlocks.cs

@@ -54,7 +54,7 @@ namespace BestHTTP.Examples
 
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">void</span>&nbsp;Awake()
 &nbsp;&nbsp;&nbsp;&nbsp;{
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;a&nbsp;well&nbsp;observable&nbsp;value</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;a&nbsp;well&nbsp;observable&nbsp;value</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;This&nbsp;is&nbsp;how&nbsp;many&nbsp;concurrent&nbsp;requests&nbsp;can&nbsp;be&nbsp;made&nbsp;to&nbsp;a&nbsp;server</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#2b91af;"">HTTPManager</span>.MaxConnectionPerServer&nbsp;=&nbsp;1;
 
@@ -65,7 +65,7 @@ namespace BestHTTP.Examples
 
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">void</span>&nbsp;OnDestroy()
 &nbsp;&nbsp;&nbsp;&nbsp;{
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;back&nbsp;to&nbsp;its&nbsp;defualt&nbsp;value.</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;back&nbsp;to&nbsp;its&nbsp;defualt&nbsp;value.</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#2b91af;"">HTTPManager</span>.MaxConnectionPerServer&nbsp;=&nbsp;4;
 &nbsp;&nbsp;&nbsp;&nbsp;}
 
@@ -102,19 +102,19 @@ namespace BestHTTP.Examples
 
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">void</span>&nbsp;DownloadImages()
 &nbsp;&nbsp;&nbsp;&nbsp;{
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;these&nbsp;metadatas&nbsp;to&nbsp;its&nbsp;initial&nbsp;values</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;these&nbsp;metadatas&nbsp;to&nbsp;its&nbsp;initial&nbsp;values</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allDownloadedFromLocalCache&nbsp;=&nbsp;<span style=""color:blue;"">true</span>;
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finishedCount&nbsp;=&nbsp;0;
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">for</span>&nbsp;(<span style=""color:blue;"">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;Images.Length;&nbsp;++i)
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;a&nbsp;blank&nbsp;placeholder&nbsp;texture,&nbsp;overriding&nbsp;previously&nbsp;downloaded&nbsp;texture</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;a&nbsp;blank&nbsp;placeholder&nbsp;texture,&nbsp;overriding&nbsp;previously&nbsp;downloaded&nbsp;texture</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Textures[i]&nbsp;=&nbsp;<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">Texture2D</span>(100,&nbsp;150);
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Construct&nbsp;the&nbsp;request</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">var</span>&nbsp;request&nbsp;=&nbsp;<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">HTTPRequest</span>(<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">Uri</span>(BaseURL&nbsp;+&nbsp;Images[i]),&nbsp;ImageDownloaded);
 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;the&nbsp;Tag&nbsp;property,&nbsp;we&nbsp;can&nbsp;use&nbsp;it&nbsp;as&nbsp;a&nbsp;general&nbsp;storage&nbsp;bound&nbsp;to&nbsp;the&nbsp;request</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;the&nbsp;Tag&nbsp;property,&nbsp;we&nbsp;can&nbsp;use&nbsp;it&nbsp;as&nbsp;a&nbsp;general&nbsp;storage&nbsp;bound&nbsp;to&nbsp;the&nbsp;request</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.Tag&nbsp;=&nbsp;Textures[i];
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Send&nbsp;out&nbsp;the&nbsp;request</span>
@@ -621,7 +621,7 @@ namespace BestHTTP.Examples
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;The&nbsp;request&nbsp;is&nbsp;currently&nbsp;processed.&nbsp;With&nbsp;UseStreaming&nbsp;==&nbsp;true,&nbsp;we&nbsp;can&nbsp;get&nbsp;the&nbsp;streamed&nbsp;fragments&nbsp;here</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">case</span>&nbsp;<span style=""color:#2b91af;"">HTTPRequestStates</span>.Processing:
 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;the&nbsp;DownloadLength,&nbsp;so&nbsp;we&nbsp;can&nbsp;display&nbsp;the&nbsp;progress</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;the&nbsp;DownloadLength,&nbsp;so&nbsp;we&nbsp;can&nbsp;display&nbsp;the&nbsp;progress</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">if</span>&nbsp;(!<span style=""color:#2b91af;"">PlayerPrefs</span>.HasKey(<span style=""color:#a31515;"">&quot;DownloadLength&quot;</span>))
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">string</span>&nbsp;value&nbsp;=&nbsp;resp.GetFirstHeaderValue(<span style=""color:#a31515;"">&quot;content-length&quot;</span>);
@@ -704,7 +704,7 @@ namespace BestHTTP.Examples
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Are&nbsp;there&nbsp;any&nbsp;progress,&nbsp;that&nbsp;we&nbsp;can&nbsp;continue?</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">if</span>&nbsp;(<span style=""color:#2b91af;"">PlayerPrefs</span>.HasKey(<span style=""color:#a31515;"">&quot;DownloadProgress&quot;</span>))
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;the&nbsp;range&nbsp;header</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;the&nbsp;range&nbsp;header</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.SetRangeHeader(<span style=""color:#2b91af;"">PlayerPrefs</span>.GetInt(<span style=""color:#a31515;"">&quot;DownloadProgress&quot;</span>));
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">else</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;This&nbsp;is&nbsp;a&nbsp;new&nbsp;request</span>
@@ -716,7 +716,7 @@ namespace BestHTTP.Examples
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;We&nbsp;want&nbsp;to&nbsp;access&nbsp;the&nbsp;downloaded&nbsp;bytes&nbsp;while&nbsp;we&nbsp;are&nbsp;still&nbsp;downloading</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.UseStreaming&nbsp;=&nbsp;<span style=""color:blue;"">true</span>;
 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;a&nbsp;reasonable&nbsp;high&nbsp;fragment&nbsp;size.&nbsp;Here&nbsp;it&nbsp;is&nbsp;5&nbsp;megabytes.</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;a&nbsp;reasonable&nbsp;high&nbsp;fragment&nbsp;size.&nbsp;Here&nbsp;it&nbsp;is&nbsp;5&nbsp;megabytes.</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.StreamFragmentSize&nbsp;=&nbsp;fragmentSize;
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Start&nbsp;Processing&nbsp;the&nbsp;request</span>
@@ -746,7 +746,7 @@ namespace BestHTTP.Examples
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#2b91af;"">PlayerPrefs</span>.Save();
 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;the&nbsp;progress&nbsp;to&nbsp;the&nbsp;actually&nbsp;processed&nbsp;bytes</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;the&nbsp;progress&nbsp;to&nbsp;the&nbsp;actually&nbsp;processed&nbsp;bytes</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;progress&nbsp;=&nbsp;<span style=""color:#2b91af;"">PlayerPrefs</span>.GetInt(<span style=""color:#a31515;"">&quot;DownloadProgress&quot;</span>)&nbsp;/&nbsp;(<span style=""color:blue;"">float</span>)<span style=""color:#2b91af;"">PlayerPrefs</span>.GetInt(<span style=""color:#a31515;"">&quot;DownloadLength&quot;</span>);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
 &nbsp;&nbsp;&nbsp;&nbsp;}
@@ -838,7 +838,7 @@ namespace BestHTTP.Examples
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Create&nbsp;the&nbsp;Socket.IO&nbsp;manager</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manager&nbsp;=&nbsp;<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">SocketManager</span>(<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">Uri</span>(<span style=""color:#a31515;"">&quot;http://chat.socket.io/socket.io/&quot;</span>),&nbsp;options);
 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;up&nbsp;custom&nbsp;chat&nbsp;events</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;up&nbsp;custom&nbsp;chat&nbsp;events</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manager.Socket.On(<span style=""color:#a31515;"">&quot;login&quot;</span>,&nbsp;OnLogin);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manager.Socket.On(<span style=""color:#a31515;"">&quot;new&nbsp;message&quot;</span>,&nbsp;OnNewMessage);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Manager.Socket.On(<span style=""color:#a31515;"">&quot;user&nbsp;joined&quot;</span>,&nbsp;OnUserJoined);
@@ -1164,7 +1164,7 @@ namespace BestHTTP.Examples
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Keep&nbsp;a&nbsp;reference&nbsp;to&nbsp;the&nbsp;root&nbsp;namespace</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Socket&nbsp;=&nbsp;manager.Socket;
 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;up&nbsp;our&nbsp;event&nbsp;handlers.</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;up&nbsp;our&nbsp;event&nbsp;handlers.</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Socket.On(<span style=""color:#2b91af;"">SocketIOEventTypes</span>.Connect,&nbsp;OnConnected);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Socket.On(<span style=""color:#a31515;"">&quot;joined&quot;</span>,&nbsp;OnJoined);
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Socket.On(<span style=""color:#a31515;"">&quot;connections&quot;</span>,&nbsp;OnConnections);
@@ -1601,10 +1601,10 @@ namespace BestHTTP.Examples
 
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">void</span>&nbsp;Start()
 &nbsp;&nbsp;&nbsp;&nbsp;{
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;a&nbsp;&quot;user&quot;&nbsp;cookie&nbsp;if&nbsp;we&nbsp;previously&nbsp;used&nbsp;the&nbsp;&#39;Enter&nbsp;Name&#39;&nbsp;button.</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;a&nbsp;&quot;user&quot;&nbsp;cookie&nbsp;if&nbsp;we&nbsp;previously&nbsp;used&nbsp;the&nbsp;&#39;Enter&nbsp;Name&#39;&nbsp;button.</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;The&nbsp;server&nbsp;will&nbsp;set&nbsp;this&nbsp;username&nbsp;to&nbsp;the&nbsp;new&nbsp;connection.</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">if</span>&nbsp;(<span style=""color:#2b91af;"">PlayerPrefs</span>.HasKey(<span style=""color:#a31515;"">&quot;userName&quot;</span>))
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#2b91af;"">CookieJar</span>.Set(URI,&nbsp;<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">Cookie</span>(<span style=""color:#a31515;"">&quot;user&quot;</span>,&nbsp;<span style=""color:#2b91af;"">PlayerPrefs</span>.GetString(<span style=""color:#a31515;"">&quot;userName&quot;</span>)));
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#2b91af;"">CookieJar</span>.SaveLocal(URI,&nbsp;<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">Cookie</span>(<span style=""color:#a31515;"">&quot;user&quot;</span>,&nbsp;<span style=""color:#2b91af;"">PlayerPrefs</span>.GetString(<span style=""color:#a31515;"">&quot;userName&quot;</span>)));
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signalRConnection&nbsp;=&nbsp;<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">Connection</span>(URI);
 
@@ -1761,7 +1761,7 @@ namespace BestHTTP.Examples
 &nbsp;&nbsp;&nbsp;&nbsp;}
 
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;</span><span style=""color:gray;"">&lt;summary&gt;</span>
-&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;Set&nbsp;a&nbsp;name&nbsp;for&nbsp;this&nbsp;connection.</span>
+&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;SaveLocal&nbsp;a&nbsp;name&nbsp;for&nbsp;this&nbsp;connection.</span>
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;</span><span style=""color:gray;"">&lt;/summary&gt;</span>
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">private</span>&nbsp;<span style=""color:blue;"">void</span>&nbsp;EnterName(<span style=""color:blue;"">string</span>&nbsp;name)
 &nbsp;&nbsp;&nbsp;&nbsp;{
@@ -1851,7 +1851,7 @@ namespace BestHTTP.Examples
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signalRConnection.OnError&nbsp;+=&nbsp;signalRConnection_OnError;
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signalRConnection.OnStateChanged&nbsp;+=&nbsp;signalRConnection_OnStateChanged;
 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;up&nbsp;a&nbsp;callback&nbsp;for&nbsp;Hub&nbsp;events</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;up&nbsp;a&nbsp;Callback&nbsp;for&nbsp;Hub&nbsp;events</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signalRConnection[<span style=""color:#a31515;"">&quot;StatusHub&quot;</span>].OnMethodCall&nbsp;+=&nbsp;statusHub_OnMethodCall;
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Connect&nbsp;to&nbsp;the&nbsp;server</span>
@@ -2040,7 +2040,7 @@ namespace BestHTTP.Examples
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;demoHub.PlainTask();
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;demoHub.GenericTaskWithContinueWith();
 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedDemoHub.Echo(<span style=""color:#a31515;"">&quot;Typed&nbsp;echo&nbsp;callback&quot;</span>);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedDemoHub.Echo(<span style=""color:#a31515;"">&quot;Typed&nbsp;echo&nbsp;Callback&quot;</span>);
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;vbDemo&nbsp;is&nbsp;not&nbsp;wrapped&nbsp;in&nbsp;a&nbsp;hub&nbsp;class,&nbsp;it&nbsp;would&nbsp;contain&nbsp;only&nbsp;one&nbsp;function</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vbDemoHub.Call(<span style=""color:#a31515;"">&quot;readStateValue&quot;</span>,&nbsp;(hub,&nbsp;msg,&nbsp;result)&nbsp;=&gt;&nbsp;vbReadStateResult&nbsp;=&nbsp;<span style=""color:blue;"">string</span>.Format(<span style=""color:#a31515;"">&quot;Read&nbsp;some&nbsp;state&nbsp;from&nbsp;VB.NET!&nbsp;=&gt;&nbsp;{0}&quot;</span>,&nbsp;result.ReturnValue&nbsp;==&nbsp;<span style=""color:blue;"">null</span>&nbsp;?&nbsp;<span style=""color:#a31515;"">&quot;undefined&quot;</span>&nbsp;:&nbsp;result.ReturnValue.ToString()));
@@ -2121,7 +2121,7 @@ namespace BestHTTP.Examples
 
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;</span><span style=""color:gray;"">&lt;summary&gt;</span>
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;Client-called,&nbsp;server&nbsp;side&nbsp;implementation&nbsp;of&nbsp;the&nbsp;Echo&nbsp;function.</span>
-&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;When&nbsp;the&nbsp;function&nbsp;successfully&nbsp;executed&nbsp;on&nbsp;the&nbsp;server&nbsp;the&nbsp;OnEcho_Done&nbsp;callback&nbsp;function&nbsp;will&nbsp;be&nbsp;called.</span>
+&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;When&nbsp;the&nbsp;function&nbsp;successfully&nbsp;executed&nbsp;on&nbsp;the&nbsp;server&nbsp;the&nbsp;OnEcho_Done&nbsp;Callback&nbsp;function&nbsp;will&nbsp;be&nbsp;called.</span>
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;</span><span style=""color:gray;"">&lt;/summary&gt;</span>
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">public</span>&nbsp;<span style=""color:blue;"">void</span>&nbsp;Echo(<span style=""color:blue;"">string</span>&nbsp;msg)
 &nbsp;&nbsp;&nbsp;&nbsp;{
@@ -2129,7 +2129,7 @@ namespace BestHTTP.Examples
 &nbsp;&nbsp;&nbsp;&nbsp;}
 
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;</span><span style=""color:gray;"">&lt;summary&gt;</span>
-&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;When&nbsp;the&nbsp;function&nbsp;successfully&nbsp;executed&nbsp;on&nbsp;the&nbsp;server&nbsp;this&nbsp;callback&nbsp;function&nbsp;will&nbsp;be&nbsp;called.</span>
+&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;When&nbsp;the&nbsp;function&nbsp;successfully&nbsp;executed&nbsp;on&nbsp;the&nbsp;server&nbsp;this&nbsp;Callback&nbsp;function&nbsp;will&nbsp;be&nbsp;called.</span>
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;</span><span style=""color:gray;"">&lt;/summary&gt;</span>
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">private</span>&nbsp;<span style=""color:blue;"">void</span>&nbsp;OnEcho_Done(<span style=""color:#2b91af;"">Hub</span>&nbsp;hub,&nbsp;<span style=""color:#2b91af;"">ClientMessage</span>&nbsp;originalMessage,&nbsp;<span style=""color:#2b91af;"">ResultMessage</span>&nbsp;result)
 &nbsp;&nbsp;&nbsp;&nbsp;{
@@ -2140,7 +2140,7 @@ namespace BestHTTP.Examples
 
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">public</span>&nbsp;<span style=""color:blue;"">void</span>&nbsp;Draw()
 &nbsp;&nbsp;&nbsp;&nbsp;{
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#2b91af;"">GUILayout</span>.Label(<span style=""color:#a31515;"">&quot;Typed&nbsp;callback&quot;</span>);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#2b91af;"">GUILayout</span>.Label(<span style=""color:#a31515;"">&quot;Typed&nbsp;Callback&quot;</span>);
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#2b91af;"">GUILayout</span>.BeginHorizontal();
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:#2b91af;"">GUILayout</span>.Space(20);
@@ -2562,11 +2562,11 @@ namespace BestHTTP.Examples
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">BaseHub</span>(<span style=""color:#a31515;"">&quot;adminauthhub&quot;</span>,&nbsp;<span style=""color:#a31515;"">&quot;Messages&nbsp;Requiring&nbsp;Admin&nbsp;Membership&nbsp;to&nbsp;Send&nbsp;or&nbsp;Receive&quot;</span>),&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">BaseHub</span>(<span style=""color:#a31515;"">&quot;userandroleauthhub&quot;</span>,&nbsp;<span style=""color:#a31515;"">&quot;Messages&nbsp;Requiring&nbsp;Name&nbsp;to&nbsp;be&nbsp;\&quot;User\&quot;&nbsp;and&nbsp;Role&nbsp;to&nbsp;be&nbsp;\&quot;Admin\&quot;&nbsp;to&nbsp;Send&nbsp;or&nbsp;Receive&quot;</span>));
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;the&nbsp;authenticator&nbsp;if&nbsp;we&nbsp;have&nbsp;valid&nbsp;fields</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;the&nbsp;authenticator&nbsp;if&nbsp;we&nbsp;have&nbsp;valid&nbsp;fields</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">if</span>&nbsp;(!<span style=""color:blue;"">string</span>.IsNullOrEmpty(userName)&nbsp;&amp;&amp;&nbsp;!<span style=""color:blue;"">string</span>.IsNullOrEmpty(role))
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signalRConnection.AuthenticationProvider&nbsp;=&nbsp;<span style=""color:blue;"">new</span>&nbsp;<span style=""color:#2b91af;"">HeaderAuthenticator</span>(userName,&nbsp;role);
 
-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Set&nbsp;up&nbsp;event&nbsp;handler</span>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;SaveLocal&nbsp;up&nbsp;event&nbsp;handler</span>
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signalRConnection.OnConnected&nbsp;+=&nbsp;signalRConnection_OnConnected;
 
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:green;"">//&nbsp;Start&nbsp;to&nbsp;connect&nbsp;to&nbsp;the&nbsp;server.</span>
@@ -2712,7 +2712,7 @@ namespace BestHTTP.Examples
 &nbsp;&nbsp;&nbsp;&nbsp;}
 
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;</span><span style=""color:gray;"">&lt;summary&gt;</span>
-&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;This&nbsp;callback&nbsp;function&nbsp;will&nbsp;be&nbsp;called&nbsp;every&nbsp;time&nbsp;we&nbsp;try&nbsp;to&nbsp;access&nbsp;a&nbsp;protected&nbsp;API&nbsp;while&nbsp;we&nbsp;are&nbsp;using&nbsp;an&nbsp;non-authenticated&nbsp;connection.</span>
+&nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;This&nbsp;Callback&nbsp;function&nbsp;will&nbsp;be&nbsp;called&nbsp;every&nbsp;time&nbsp;we&nbsp;try&nbsp;to&nbsp;access&nbsp;a&nbsp;protected&nbsp;API&nbsp;while&nbsp;we&nbsp;are&nbsp;using&nbsp;an&nbsp;non-authenticated&nbsp;connection.</span>
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:gray;"">///</span><span style=""color:green;"">&nbsp;</span><span style=""color:gray;"">&lt;/summary&gt;</span>
 &nbsp;&nbsp;&nbsp;&nbsp;<span style=""color:blue;"">private</span>&nbsp;<span style=""color:blue;"">void</span>&nbsp;OnInvokeFailed(<span style=""color:#2b91af;"">Hub</span>&nbsp;hub,&nbsp;<span style=""color:#2b91af;"">ClientMessage</span>&nbsp;originalMessage,&nbsp;<span style=""color:#2b91af;"">ResultMessage</span>&nbsp;result)
 &nbsp;&nbsp;&nbsp;&nbsp;{

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SampleSelector.cs

@@ -97,7 +97,7 @@ public class SampleSelector : MonoBehaviour
         Samples.Add(new SampleDescriptor(null, "HTTP Samples", string.Empty, string.Empty) { IsLabel = true } );
 
         Samples.Add(new SampleDescriptor(typeof(TextureDownloadSample), "Texture Download", "With HTTPManager.MaxConnectionPerServer you can control how many requests can be processed per server parallel.\n\nFeatures demoed in this example:\n-Parallel requests to the same server\n-Controlling the parallelization\n-Automatic Caching\n-Create a Texture2D from the downloaded data", CodeBlocks.TextureDownloadSample));
-        Samples.Add(new SampleDescriptor(typeof(AssetBundleSample), "AssetBundle Download", "A small example that shows a possible way to download an AssetBundle and load a resource from it.\n\nFeatures demoed in this example:\n-Using HTTPRequest without a callback\n-Using HTTPRequest in a Coroutine\n-Loading an AssetBundle from the downloaded bytes\n-Automatic Caching", CodeBlocks.AssetBundleSample));
+        Samples.Add(new SampleDescriptor(typeof(AssetBundleSample), "AssetBundle Download", "A small example that shows a possible way to download an AssetBundle and load a resource from it.\n\nFeatures demoed in this example:\n-Using HTTPRequest without a Callback\n-Using HTTPRequest in a Coroutine\n-Loading an AssetBundle from the downloaded bytes\n-Automatic Caching", CodeBlocks.AssetBundleSample));
 #if !UNITY_WEBGL || UNITY_EDITOR
         Samples.Add(new SampleDescriptor(typeof(LargeFileDownloadSample), "Large File Download", "This example demonstrates how you can download a (large) file and continue the download after the connection is aborted.\n\nFeatures demoed in this example:\n-Setting up a streamed download\n-How to access the downloaded data while the download is in progress\n-Setting the HTTPRequest's StreamFragmentSize to controll the frequency and size of the fragments\n-How to use the SetRangeHeader to continue a previously disconnected download\n-How to disable the local, automatic caching", CodeBlocks.LargeFileDownloadSample));
 #endif
@@ -117,7 +117,7 @@ public class SampleSelector : MonoBehaviour
         Samples.Add(new SampleDescriptor(null, "SignalR Samples", string.Empty, string.Empty) { IsLabel = true });
         Samples.Add(new SampleDescriptor(typeof(SimpleStreamingSample), "Simple Streaming", "A very simple example of a background thread that broadcasts the server time to all connected clients every two seconds.\n\nFeatures demoed in this example:\n-Subscribing and handling non-hub messages", CodeBlocks.SignalR_SimpleStreamingSample));
         Samples.Add(new SampleDescriptor(typeof(ConnectionAPISample), "Connection API", "Demonstrates all features of the lower-level connection API including starting and stopping, sending and receiving messages, and managing groups.\n\nFeatures demoed in this example:\n-Instantiating and setting up a SignalR Connection to connect to a SignalR server\n-Changing the default Json encoder\n-Subscribing to state changes\n-Receiving and handling of non-hub messages\n-Sending non-hub messages\n-Managing groups", CodeBlocks.SignalR_ConnectionAPISample));
-        Samples.Add(new SampleDescriptor(typeof(ConnectionStatusSample), "Connection Status", "Demonstrates how to handle the events that are raised when connections connect, reconnect and disconnect from the Hub API.\n\nFeatures demoed in this example:\n-Connecting to a Hub\n-Setting up a callback for Hub events\n-Handling server-sent method call requests\n-Calling a Hub-method on the server-side\n-Opening and closing the SignalR Connection", CodeBlocks.SignalR_ConnectionStatusSample));
+        Samples.Add(new SampleDescriptor(typeof(ConnectionStatusSample), "Connection Status", "Demonstrates how to handle the events that are raised when connections connect, reconnect and disconnect from the Hub API.\n\nFeatures demoed in this example:\n-Connecting to a Hub\n-Setting up a Callback for Hub events\n-Handling server-sent method call requests\n-Calling a Hub-method on the server-side\n-Opening and closing the SignalR Connection", CodeBlocks.SignalR_ConnectionStatusSample));
         Samples.Add(new SampleDescriptor(typeof(DemoHubSample), "Demo Hub", "A contrived example that exploits every feature of the Hub API.\n\nFeatures demoed in this example:\n-Creating and using wrapper Hub classes to encapsulate hub functions and events\n-Handling long running server-side functions by handling progress messages\n-Groups\n-Handling server-side functions with return value\n-Handling server-side functions throwing Exceptions\n-Calling server-side functions with complex type parameters\n-Calling server-side functions with array parameters\n-Calling overloaded server-side functions\n-Changing Hub states\n-Receiving and handling hub state changes\n-Calling server-side functions implemented in VB .NET", CodeBlocks.SignalR_DemoHubSample));
 #if !UNITY_WEBGL
         Samples.Add(new SampleDescriptor(typeof(AuthenticationSample), "Authentication", "Demonstrates how to use the authorization features of the Hub API to restrict certain Hubs and methods to specific users.\n\nFeatures demoed in this example:\n-Creating and using wrapper Hub classes to encapsulate hub functions and events\n-Create and use a Header-based authenticator to access protected APIs\n-SignalR over HTTPS", CodeBlocks.SignalR_AuthenticationSample));

+ 3 - 3
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SignalR/AuthenticationSample.cs

@@ -41,11 +41,11 @@ class AuthenticationSample : MonoBehaviour
                                                 new BaseHub("adminauthhub", "Messages Requiring Admin Membership to Send or Receive"),
                                                 new BaseHub("userandroleauthhub", "Messages Requiring Name to be \"User\" and Role to be \"Admin\" to Send or Receive"));
 
-        // Set the authenticator if we have valid fields
+        // SaveLocal the authenticator if we have valid fields
         if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(role))
             signalRConnection.AuthenticationProvider = new HeaderAuthenticator(userName, role);
 
-        // Set up event handler
+        // SaveLocal up event handler
         signalRConnection.OnConnected += signalRConnection_OnConnected;
 
         // Start to connect to the server.
@@ -185,7 +185,7 @@ class BaseHub : Hub
     }
 
     /// <summary>
-    /// This callback function will be called every time we try to access a protected API while we are using an non-authenticated connection.
+    /// This Callback function will be called every time we try to access a protected API while we are using an non-authenticated connection.
     /// </summary>
     private void OnInvokeFailed(Hub hub, ClientMessage originalMessage, FailureMessage result)
     {

+ 2 - 2
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SignalR/ConnectionAPISample.cs

@@ -51,7 +51,7 @@ public sealed class ConnectionAPISample : MonoBehaviour
     void Start()
     {
 #if !BESTHTTP_DISABLE_COOKIES && (!UNITY_WEBGL || UNITY_EDITOR)
-        // Set a "user" cookie if we previously used the 'Enter Name' button.
+        // SaveLocal a "user" cookie if we previously used the 'Enter Name' button.
         // The server will set this username to the new connection.
         if (PlayerPrefs.HasKey("userName"))
             CookieJar.Set(URI, new Cookie("user", PlayerPrefs.GetString("userName")));
@@ -212,7 +212,7 @@ public sealed class ConnectionAPISample : MonoBehaviour
     }
 
     /// <summary>
-    /// Set a name for this connection.
+    /// SaveLocal a name for this connection.
     /// </summary>
     private void EnterName(string name)
     {

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SignalR/ConnectionStatusSample.cs

@@ -30,7 +30,7 @@ sealed class ConnectionStatusSample : MonoBehaviour
         signalRConnection.OnError += signalRConnection_OnError;
         signalRConnection.OnStateChanged += signalRConnection_OnStateChanged;
 
-        // Set up a callback for Hub events
+        // SaveLocal up a Callback for Hub events
         signalRConnection["StatusHub"].OnMethodCall += statusHub_OnMethodCall;
 
         // Connect to the server

+ 4 - 4
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SignalR/DemoHubSample.cs

@@ -82,7 +82,7 @@ class DemoHubSample : MonoBehaviour
                 demoHub.PlainTask();
                 demoHub.GenericTaskWithContinueWith();
 
-                typedDemoHub.Echo("Typed echo callback");
+                typedDemoHub.Echo("Typed echo Callback");
 
                 // vbDemo is not wrapped in a hub class, it would contain only one function
                 vbDemoHub.Call("readStateValue", (hub, msg, result) => vbReadStateResult = string.Format("Read some state from VB.NET! => {0}", result.ReturnValue == null ? "undefined" : result.ReturnValue.ToString()));
@@ -156,7 +156,7 @@ class TypedDemoHub : Hub
 
     /// <summary>
     /// Client-called, server side implementation of the Echo function.
-    /// When the function successfully executed on the server the OnEcho_Done callback function will be called.
+    /// When the function successfully executed on the server the OnEcho_Done Callback function will be called.
     /// </summary>
     public void Echo(string msg)
     {
@@ -164,7 +164,7 @@ class TypedDemoHub : Hub
     }
 
     /// <summary>
-    /// When the function successfully executed on the server this callback function will be called.
+    /// When the function successfully executed on the server this Callback function will be called.
     /// </summary>
     private void OnEcho_Done(Hub hub, ClientMessage originalMessage, ResultMessage result)
     {
@@ -175,7 +175,7 @@ class TypedDemoHub : Hub
 
     public void Draw()
     {
-        GUILayout.Label("Typed callback");
+        GUILayout.Label("Typed Callback");
 
         GUILayout.BeginHorizontal();
             GUILayout.Space(20);

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SocketIO/SocketIOChatSample.cs

@@ -80,7 +80,7 @@ public sealed class SocketIOChatSample : MonoBehaviour
         // Create the Socket.IO manager
         Manager = new SocketManager(new Uri("https://socket-io-chat.now.sh/socket.io/"), options);
 
-        // Set up custom chat events
+        // SaveLocal up custom chat events
         Manager.Socket.On("login", OnLogin);
         Manager.Socket.On("new message", OnNewMessage);
         Manager.Socket.On("user joined", OnUserJoined);

+ 1 - 1
Assets/LangChaoRTC/MediaSoup/Best HTTP (Pro)/Examples/SocketIO/SocketIOWePlaySample.cs

@@ -88,7 +88,7 @@ public sealed class SocketIOWePlaySample : MonoBehaviour
         // Keep a reference to the root namespace
         Socket = manager.Socket;
 
-        // Set up our event handlers.
+        // SaveLocal up our event handlers.
         Socket.On(SocketIOEventTypes.Connect, OnConnected);
         Socket.On("joined", OnJoined);
         Socket.On("connections", OnConnections);

+ 2 - 2
Assets/LangChaoRTC/Remote/PopPublic/PopCall.cs

@@ -8,9 +8,9 @@ public class PopCall : RemoteSingleton<PopCall>
 {
 
     //private Action action;
-    //public void showCall(Action callback)
+    //public void showCall(Action Callback)
     //{
-    //    action = callback;
+    //    action = Callback;
     //    this.gameObject.SetActive(true);
     //}
 

+ 2 - 2
Assets/LangChaoRTC/Studio/Common/Scripts/LoaderController.cs

@@ -269,7 +269,7 @@ namespace Microsoft.MixedReality.Toolkit.UI
 
         private void AnimateDotTransforms()
         {
-            // Set dot groups' scale
+            // SaveLocal dot groups' scale
             float sinScaleCalc = dotSetScale + Mathf.Sin(Cycles * tau / 2) * dotScaleMultipler;
             float cosScaleCalc = dotSetScale + Mathf.Cos(Cycles * tau / 2) * dotScaleMultipler;
 
@@ -287,7 +287,7 @@ namespace Microsoft.MixedReality.Toolkit.UI
             dot02NewPos.Set(sinScaleCalc, sinScaleCalc, sinScaleCalc);
             dot02.localScale = dot02NewPos;
 
-            // Set dot groups' position Offset from Parent-Null Center
+            // SaveLocal dot groups' position Offset from Parent-Null Center
             dot01NewPos.Set(dotOffset, dotOffset, 0f);
             dot02NewPos.Set(-dotOffset, -dotOffset, 0f);
 

+ 1 - 1
Assets/LangChaoRTC/TextMesh Pro/Examples & Extras/Scripts/ChatController.cs

@@ -36,7 +36,7 @@ public class ChatController : MonoBehaviour {
 
         TMP_ChatInput.ActivateInputField();
 
-        // Set the scrollbar to the bottom when next text is submitted.
+        // SaveLocal the scrollbar to the bottom when next text is submitted.
         ChatScrollbar.value = 0;
 
     }

+ 1 - 1
Assets/LangChaoRTC/TextMesh Pro/Examples & Extras/Scripts/SimpleScript.cs

@@ -30,7 +30,7 @@ namespace TMPro.Examples
             //m_textMeshPro.fontSharedMaterial = Resources.Load("Fonts & Materials/LiberationSans SDF - Bevel", typeof(Material)) as Material;
             //m_textMeshPro.fontSharedMaterial.EnableKeyword("BEVEL_ON");
             
-            // Set various font settings.
+            // SaveLocal various font settings.
             m_textMeshPro.fontSize = 48;
 
             m_textMeshPro.alignment = TextAlignmentOptions.Center;

+ 3 - 3
Assets/LangChaoRTC/TextMesh Pro/Examples & Extras/Scripts/TMP_ExampleScript_01.cs

@@ -37,16 +37,16 @@ namespace TMPro.Examples
             // Load a new material preset which was created with the context menu duplicate.
             m_text.fontSharedMaterial = Resources.Load<Material>("Fonts & Materials/Anton SDF - Drop Shadow");
 
-            // Set the size of the font.
+            // SaveLocal the size of the font.
             m_text.fontSize = 120;
 
-            // Set the text
+            // SaveLocal the text
             m_text.text = "A <#0080ff>simple</color> line of text.";
 
             // Get the preferred width and height based on the supplied width and height as opposed to the actual size of the current text container.
             Vector2 size = m_text.GetPreferredValues(Mathf.Infinity, Mathf.Infinity);
 
-            // Set the size of the RectTransform based on the new calculated values.
+            // SaveLocal the size of the RectTransform based on the new calculated values.
             m_text.rectTransform.sizeDelta = new Vector2(size.x, size.y);
         }
 

+ 1 - 1
Assets/LangChaoRTC/TextMesh Pro/Examples & Extras/Scripts/TeleType.cs

@@ -35,7 +35,7 @@ namespace TMPro.Examples
             //    gameObject.transform.SetParent(canvas.transform);
             //    canvas.GetComponent<Canvas>().renderMode = RenderMode.ScreenSpaceOverlay;
 
-            //    // Set RectTransform Size
+            //    // SaveLocal RectTransform Size
             //    gameObject.GetComponent<RectTransform>().sizeDelta = new Vector2(500, 300);
             //    m_textMeshPro.fontSize = 48;
             //}

+ 16 - 0
Assets/NuGet.config

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <packageSources>
+    <clear />
+    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
+  </packageSources>
+  <disabledPackageSources />
+  <activePackageSource>
+    <add key="All" value="(Aggregate source)" />
+  </activePackageSource>
+  <config>
+    <add key="repositoryPath" value="./Packages" />
+    <add key="PackagesConfigDirectoryPath" value="." />
+    <add key="slimRestore" value="true" />
+  </config>
+</configuration>

+ 77 - 0
Assets/NuGet.config.meta

@@ -0,0 +1,77 @@
+fileFormatVersion: 2
+guid: 59adab7114179f442ba4ae685255d3b3
+labels:
+- NuGetForUnity
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      : Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Android: 1
+        Exclude Editor: 1
+        Exclude Linux64: 1
+        Exclude OSXUniversal: 1
+        Exclude Win: 1
+        Exclude Win64: 1
+  - first:
+      Android: Android
+    second:
+      enabled: 0
+      settings:
+        CPU: ARMv7
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: x86
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: x86_64
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 1
+      settings: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/NuGet.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dbf134857daf7df428aa31cdd055514f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Assets/NuGet/Editor.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: b3fad56c531ac5a4db190a745f589a8e
+folderAsset: yes
+timeCreated: 1510280304
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/NuGet/Editor/NugetForUnity.dll


+ 33 - 0
Assets/NuGet/Editor/NugetForUnity.dll.meta

@@ -0,0 +1,33 @@
+fileFormatVersion: 2
+guid: 8dc1be91775c4bb469f6b74cef450eaa
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 0
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 1
+      settings:
+        DefaultValueInitialized: true
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 21 - 0
Assets/NuGet/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Patrick McCarthy
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 8 - 0
Assets/NuGet/LICENSE.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 1d9014b99ad06af428514a5902d29ff3
+timeCreated: 1573248500
+licenseType: Pro
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/NuGet/README.pdf


+ 8 - 0
Assets/NuGet/README.pdf.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 83c5d2001771f15429a88d67e81366d6
+timeCreated: 1517876157
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 9 - 0
Assets/NuGet/Resources.meta

@@ -0,0 +1,9 @@
+fileFormatVersion: 2
+guid: 1738075a39a390447b7a620ca6962142
+folderAsset: yes
+timeCreated: 1510280362
+licenseType: Free
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/NuGet/Resources/defaultIcon.png


+ 88 - 0
Assets/NuGet/Resources/defaultIcon.png.meta

@@ -0,0 +1,88 @@
+fileFormatVersion: 2
+guid: eec19781926cd2248b7c9abfde8db555
+TextureImporter:
+  fileIDToRecycleName: {}
+  externalObjects: {}
+  serializedVersion: 9
+  mipmaps:
+    mipMapMode: 0
+    enableMipMap: 1
+    sRGBTexture: 1
+    linearTexture: 0
+    fadeOut: 0
+    borderMipMap: 0
+    mipMapsPreserveCoverage: 0
+    alphaTestReferenceValue: 0.5
+    mipMapFadeDistanceStart: 1
+    mipMapFadeDistanceEnd: 3
+  bumpmap:
+    convertToNormalMap: 0
+    externalNormalMap: 0
+    heightScale: 0.25
+    normalMapFilter: 0
+  isReadable: 0
+  streamingMipmaps: 0
+  streamingMipmapsPriority: 0
+  grayScaleToAlpha: 0
+  generateCubemap: 6
+  cubemapConvolution: 0
+  seamlessCubemap: 0
+  textureFormat: -1
+  maxTextureSize: 2048
+  textureSettings:
+    serializedVersion: 2
+    filterMode: -1
+    aniso: -1
+    mipBias: -100
+    wrapU: 1
+    wrapV: 1
+    wrapW: 1
+  nPOTScale: 0
+  lightmap: 0
+  compressionQuality: 50
+  spriteMode: 1
+  spriteExtrude: 1
+  spriteMeshType: 1
+  alignment: 0
+  spritePivot: {x: 0.5, y: 0.5}
+  spritePixelsToUnits: 100
+  spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+  spriteGenerateFallbackPhysicsShape: 1
+  alphaUsage: 1
+  alphaIsTransparency: 1
+  spriteTessellationDetail: -1
+  textureType: 8
+  textureShape: 1
+  singleChannelComponent: 0
+  maxTextureSizeSet: 0
+  compressionQualitySet: 0
+  textureFormatSet: 0
+  platformSettings:
+  - serializedVersion: 2
+    buildTarget: DefaultTexturePlatform
+    maxTextureSize: 2048
+    resizeAlgorithm: 0
+    textureFormat: -1
+    textureCompression: 1
+    compressionQuality: 50
+    crunchedCompression: 0
+    allowsAlphaSplitting: 0
+    overridden: 0
+    androidETC2FallbackOverride: 0
+  spriteSheet:
+    serializedVersion: 2
+    sprites: []
+    outline: []
+    physicsShape: []
+    bones: []
+    spriteID: 215e43cda847e6d44af8b40376eeed8a
+    vertices: []
+    indices: 
+    edges: []
+    weights: []
+  spritePackingTag: 
+  pSDRemoveMatte: 0
+  pSDShowRemoveMatteOption: 0
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Packages.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2240550727cb66342b8c6f704e521a3b
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 8 - 0
Assets/Packages/CommunityToolkit.HighPerformance.8.2.1.meta

@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 25fff1210123a564cb1fd151f49726f8
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Assets/Packages/CommunityToolkit.HighPerformance.8.2.1/.signature.p7s


Some files were not shown because too many files changed in this diff