1- using System ;
21using System . Collections . Generic ;
32using System . Threading . Tasks ;
3+ using GameFrameX . Runtime ;
44
55namespace GameFrameX . Web . Runtime
66{
@@ -11,101 +11,162 @@ public partial class WebManager
1111 /// </summary>
1212 private sealed class WebJsonData : WebData
1313 {
14+ private Dictionary < string , string > m_Header ;
15+ private Dictionary < string , object > m_Form ;
16+
1417 /// <summary>
1518 /// 获取请求头信息
1619 /// </summary>
17- public Dictionary < string , string > Header { get ; }
20+ public Dictionary < string , string > Header { get { return m_Header ; } }
1821
1922 /// <summary>
2023 /// 获取表单数据
2124 /// </summary>
22- public Dictionary < string , object > Form { get ; }
25+ public Dictionary < string , object > Form { get { return m_Form ; } }
2326
2427 /// <summary>
2528 /// 字符串结果的任务完成源
2629 /// </summary>
27- public readonly TaskCompletionSource < WebStringResult > UniTaskCompletionStringSource ;
30+ public TaskCompletionSource < WebStringResult > UniTaskCompletionStringSource { get ; private set ; }
2831
2932 /// <summary>
3033 /// 字节数组结果的任务完成源
3134 /// </summary>
32- public readonly TaskCompletionSource < WebBufferResult > UniTaskCompletionBytesSource ;
35+ public TaskCompletionSource < WebBufferResult > UniTaskCompletionBytesSource { get ; private set ; }
3336
3437 /// <summary>
35- /// 初始化Web JSON请求数据(用于字节数组结果的GET/POST请求 )
38+ /// 无参构造函数(ReferencePool 需要new约束 )
3639 /// </summary>
37- /// <param name="url">请求URL</param>
38- /// <param name="header">请求头信息</param>
39- /// <param name="isGet">是否为GET请求</param>
40- /// <param name="source">字节数组结果的任务完成源</param>
41- /// <param name="userData">用户自定义数据</param>
42- public WebJsonData ( string url , Dictionary < string , string > header , bool isGet , TaskCompletionSource < WebBufferResult > source , object userData = null ) : base ( isGet , url , userData )
43- {
44- Header = header ;
45- UniTaskCompletionBytesSource = source ;
46- }
40+ public WebJsonData ( ) { }
4741
4842 /// <summary>
49- /// 初始化Web JSON请求数据(用于字符串结果的GET/POST请求)
43+ /// 创建用于字节数组结果的GET/POST请求数据
5044 /// </summary>
51- /// <param name="url">请求URL</param>
52- /// <param name="header">请求头信息</param>
53- /// <param name="isGet">是否为GET请求</param>
54- /// <param name="source">字符串结果的任务完成源</param>
55- /// <param name="userData">用户自定义数据</param>
56- public WebJsonData ( string url , Dictionary < string , string > header , bool isGet , TaskCompletionSource < WebStringResult > source , object userData = null ) : base ( isGet , url , userData )
45+ public static WebJsonData Create ( string url , Dictionary < string , string > header , bool isGet , TaskCompletionSource < WebBufferResult > source , object userData )
5746 {
58- Header = header ;
59- UniTaskCompletionStringSource = source ;
47+ var data = ReferencePool . Acquire < WebJsonData > ( ) ;
48+ data . URL = url ;
49+ data . IsGet = isGet ;
50+ data . UserData = userData ;
51+ data . UniTaskCompletionBytesSource = source ;
52+ CopyHeader ( data , header ) ;
53+ return data ;
6054 }
6155
6256 /// <summary>
63- /// 初始化Web JSON请求数据(用于带表单的字符串结果POST请求)
57+ /// 创建用于字符串结果的GET/POST请求数据
6458 /// </summary>
65- /// <param name="url">请求URL</param>
66- /// <param name="header">请求头信息</param>
67- /// <param name="form">表单数据</param>
68- /// <param name="source">字符串结果的任务完成源</param>
69- /// <param name="userData">用户自定义数据</param>
70- public WebJsonData ( string url , Dictionary < string , string > header , Dictionary < string , object > form , TaskCompletionSource < WebStringResult > source , object userData = null ) : base ( false , url , userData )
59+ public static WebJsonData Create ( string url , Dictionary < string , string > header , bool isGet , TaskCompletionSource < WebStringResult > source , object userData )
7160 {
72- Header = header ;
73- Form = form ;
74- UniTaskCompletionStringSource = source ;
61+ var data = ReferencePool . Acquire < WebJsonData > ( ) ;
62+ data . URL = url ;
63+ data . IsGet = isGet ;
64+ data . UserData = userData ;
65+ data . UniTaskCompletionStringSource = source ;
66+ CopyHeader ( data , header ) ;
67+ return data ;
7568 }
7669
7770 /// <summary>
78- /// 初始化Web JSON请求数据(用于带表单的字节数组结果POST请求)
71+ /// 创建用于带表单的字符串结果POST请求数据
7972 /// </summary>
80- /// <param name="url">请求URL</param>
81- /// <param name="header">请求头信息</param>
82- /// <param name="form">表单数据</param>
83- /// <param name="source">字节数组结果的任务完成源</param>
84- /// <param name="userData">用户自定义数据</param>
85- public WebJsonData ( string url , Dictionary < string , string > header , Dictionary < string , object > form , TaskCompletionSource < WebBufferResult > source , object userData = null ) : base ( false , url , userData )
73+ public static WebJsonData Create ( string url , Dictionary < string , string > header , Dictionary < string , object > form , TaskCompletionSource < WebStringResult > source , object userData )
8674 {
87- Header = header ;
88- Form = form ;
89- UniTaskCompletionBytesSource = source ;
75+ var data = ReferencePool . Acquire < WebJsonData > ( ) ;
76+ data . URL = url ;
77+ data . IsGet = false ;
78+ data . UserData = userData ;
79+ data . UniTaskCompletionStringSource = source ;
80+ CopyHeader ( data , header ) ;
81+ CopyForm ( data , form ) ;
82+ return data ;
9083 }
9184
9285 /// <summary>
93- /// 释放资源,取消未完成的任务
86+ /// 创建用于带表单的字节数组结果POST请求数据
9487 /// </summary>
95- public override void Dispose ( )
88+ public static WebJsonData Create ( string url , Dictionary < string , string > header , Dictionary < string , object > form , TaskCompletionSource < WebBufferResult > source , object userData )
89+ {
90+ var data = ReferencePool . Acquire < WebJsonData > ( ) ;
91+ data . URL = url ;
92+ data . IsGet = false ;
93+ data . UserData = userData ;
94+ data . UniTaskCompletionBytesSource = source ;
95+ CopyHeader ( data , header ) ;
96+ CopyForm ( data , form ) ;
97+ return data ;
98+ }
99+
100+ public override void Clear ( )
96101 {
97102 if ( UniTaskCompletionStringSource != null )
98103 {
99104 UniTaskCompletionStringSource . TrySetCanceled ( ) ;
105+ UniTaskCompletionStringSource = null ;
100106 }
101107
102108 if ( UniTaskCompletionBytesSource != null )
103109 {
104110 UniTaskCompletionBytesSource . TrySetCanceled ( ) ;
111+ UniTaskCompletionBytesSource = null ;
112+ }
113+
114+ if ( m_Header != null )
115+ {
116+ m_Header . Clear ( ) ;
117+ }
118+
119+ if ( m_Form != null )
120+ {
121+ m_Form . Clear ( ) ;
122+ }
123+
124+ base . Clear ( ) ;
125+ }
126+
127+ private static void CopyHeader ( WebJsonData data , Dictionary < string , string > header )
128+ {
129+ if ( header == null || header . Count == 0 )
130+ {
131+ return ;
132+ }
133+
134+ if ( data . m_Header == null )
135+ {
136+ data . m_Header = new Dictionary < string , string > ( ) ;
137+ }
138+ else
139+ {
140+ data . m_Header . Clear ( ) ;
141+ }
142+
143+ foreach ( var kv in header )
144+ {
145+ data . m_Header [ kv . Key ] = kv . Value ;
105146 }
147+ }
106148
107- base . Dispose ( ) ;
149+ private static void CopyForm ( WebJsonData data , Dictionary < string , object > form )
150+ {
151+ if ( form == null || form . Count == 0 )
152+ {
153+ return ;
154+ }
155+
156+ if ( data . m_Form == null )
157+ {
158+ data . m_Form = new Dictionary < string , object > ( ) ;
159+ }
160+ else
161+ {
162+ data . m_Form . Clear ( ) ;
163+ }
164+
165+ foreach ( var kv in form )
166+ {
167+ data . m_Form [ kv . Key ] = kv . Value ;
168+ }
108169 }
109170 }
110171 }
111- }
172+ }
0 commit comments