10
10
using UnityObject = UnityEngine . Object ;
11
11
12
12
namespace TinyNet
13
- {
13
+ {
14
14
#region 发送和接收缓冲区
15
15
/// <summary>
16
16
/// 填充数据包
@@ -65,8 +65,8 @@ public static BufferSegment Make(byte onebyte)
65
65
} ;
66
66
return seg ;
67
67
}
68
- }
69
-
68
+ }
69
+
70
70
/// <summary>
71
71
/// 复用缓冲区
72
72
/// </summary>
@@ -192,9 +192,9 @@ public void Reset()
192
192
_offset = 0 ;
193
193
_length = 0 ;
194
194
}
195
- }
195
+ }
196
196
#endregion
197
-
197
+
198
198
#region 解析网络请求
199
199
/// <summary>
200
200
/// 基础请求类
@@ -239,8 +239,8 @@ public virtual void Reset()
239
239
{
240
240
buffer . Reset ( ) ;
241
241
}
242
- }
243
-
242
+ }
243
+
244
244
/// <summary>
245
245
/// 无ID分组
246
246
/// </summary>
@@ -259,8 +259,8 @@ protected virtual void Handle(NetHandler handler, T t)
259
259
}
260
260
261
261
public static event Action < NetHandler , T > DefaultHandler ;
262
- }
263
-
262
+ }
263
+
264
264
/// <summary>
265
265
/// 按ID分组
266
266
/// </summary>
@@ -296,9 +296,9 @@ public static Dictionary<TKey, Action<NetHandler, T>> Handlers
296
296
}
297
297
}
298
298
public static event Action < NetHandler , TKey , T > DefaultHandler ;
299
- }
299
+ }
300
300
#endregion
301
-
301
+
302
302
#region 设置相关
303
303
public class Settings
304
304
{
@@ -322,9 +322,9 @@ public Settings()
322
322
capacity = 2 << 24 ;
323
323
worklimit = 4 ;
324
324
}
325
- }
325
+ }
326
326
#endregion
327
-
327
+
328
328
/// <summary>
329
329
/// 网络连接抽象句柄
330
330
/// </summary>
@@ -340,8 +340,8 @@ public abstract class NetHandler
340
340
public abstract IPEndPoint Local { get ; }
341
341
public abstract short TTL { get ; set ; }
342
342
public abstract bool NoDelay { get ; set ; }
343
- }
344
-
343
+ }
344
+
345
345
/// <summary>
346
346
/// 网络管理全局接口
347
347
/// </summary>
@@ -355,16 +355,16 @@ public abstract class NetManager : IDisposable
355
355
private readonly Dictionary < int , Control > listens = new Dictionary < int , Control > ( ) ;
356
356
private readonly Dictionary < NetHandlerImpl , bool > sockets = new Dictionary < NetHandlerImpl , bool > ( ) ;
357
357
358
- private static readonly Dictionary < NetManager , bool > managers = new Dictionary < NetManager , bool > ( ) ;
359
-
358
+ private static readonly Dictionary < NetManager , bool > managers = new Dictionary < NetManager , bool > ( ) ;
359
+
360
360
#region 内部使用的类
361
361
private class Control
362
362
{
363
363
public bool running ;
364
364
public Action < NetHandler > action ;
365
- }
365
+ }
366
366
#endregion
367
-
367
+
368
368
protected NetManager ( Settings settings )
369
369
{
370
370
this . settings = settings ;
@@ -383,7 +383,7 @@ public void Listen(int port, Action<NetHandler> callback)
383
383
{
384
384
if ( ! running )
385
385
throw new ObjectDisposedException ( ToString ( ) ) ;
386
- new Thread ( delegate ( )
386
+ new Thread ( delegate ( )
387
387
{
388
388
Thread . CurrentThread . Name = "Network Server" ;
389
389
TcpListener server = new TcpListener ( IPAddress . Any , port ) ;
@@ -533,8 +533,8 @@ public void Dispose()
533
533
public void Close ( )
534
534
{
535
535
Dispose ( ) ;
536
- }
537
-
536
+ }
537
+
538
538
#region 连接
539
539
private void ConnectImpl ( string host , int port , int timeout , Action < NetHandler , Exception > callback )
540
540
{
@@ -551,12 +551,12 @@ private void ConnectImpl(string host, int port, int timeout, Action<NetHandler,
551
551
IPAddress [ ] iplist = Dns . EndGetHostAddresses ( ar ) ;
552
552
if ( timeout > 0 )
553
553
{
554
- AddressFamily family = AddressFamily . InterNetworkV6 ;
554
+ AddressFamily family = AddressFamily . InterNetwork ;
555
555
for ( int i = 0 ; i < iplist . Length ; ++ i )
556
556
{
557
- if ( iplist [ i ] . AddressFamily == AddressFamily . InterNetwork )
557
+ if ( iplist [ i ] . AddressFamily == AddressFamily . InterNetworkV6 )
558
558
{
559
- family = AddressFamily . InterNetwork ;
559
+ family = AddressFamily . InterNetworkV6 ;
560
560
break ;
561
561
}
562
562
}
@@ -604,9 +604,9 @@ private void ConnectImpl(string host, int port, int timeout, Action<NetHandler,
604
604
callback ( null , e ) ;
605
605
}
606
606
} , null ) ;
607
- }
607
+ }
608
608
#endregion
609
-
609
+
610
610
private void SendQueue ( NetHandlerImpl handler )
611
611
{
612
612
lock ( workqueue )
@@ -625,7 +625,7 @@ private void SendQueue(NetHandlerImpl handler)
625
625
Interlocked . Decrement ( ref workcount ) ;
626
626
return ;
627
627
}
628
- new Thread ( delegate ( )
628
+ new Thread ( delegate ( )
629
629
{
630
630
Thread . CurrentThread . Name = "Network Write" ;
631
631
while ( running )
@@ -671,8 +671,8 @@ private void SendQueue(NetHandlerImpl handler)
671
671
}
672
672
}
673
673
} ) . Start ( ) ;
674
- }
675
-
674
+ }
675
+
676
676
#region 网络连接的具体类
677
677
private class NetHandlerImpl : NetHandler
678
678
{
@@ -702,7 +702,7 @@ public void OnConnected()
702
702
{
703
703
manager . sockets . Add ( this , true ) ;
704
704
}
705
- new Thread ( delegate ( )
705
+ new Thread ( delegate ( )
706
706
{
707
707
Thread . CurrentThread . Name = "Network Read" ;
708
708
byte [ ] bytes = new byte [ 64 * 1024 ] ;
@@ -805,7 +805,10 @@ public override void Close()
805
805
Loop . Run ( ( ) =>
806
806
{
807
807
if ( manager . settings . events . close != null )
808
+ {
808
809
manager . settings . events . close ( this ) ;
810
+ manager . settings . events . close = null ;
811
+ }
809
812
} ) ;
810
813
}
811
814
}
@@ -945,7 +948,7 @@ private void OnReceive(byte[] bytes, int length)
945
948
size = length - offset ;
946
949
Request old = request ;
947
950
request = manager . NewRequest ( ) ;
948
- Loop . Run ( delegate ( )
951
+ Loop . Run ( delegate ( )
949
952
{
950
953
if ( manager . settings . events . request != null )
951
954
{
@@ -961,15 +964,15 @@ private void OnReceive(byte[] bytes, int length)
961
964
Socket . Close ( ) ;
962
965
if ( manager . settings . events . close != null )
963
966
{
964
- Loop . Run ( delegate ( )
967
+ Loop . Run ( delegate ( )
965
968
{
966
969
if ( manager . settings . events . close != null )
967
970
manager . settings . events . close ( this ) ;
968
971
} ) ;
969
972
}
970
973
if ( manager . settings . events . exception != null )
971
974
{
972
- Loop . Run ( delegate ( )
975
+ Loop . Run ( delegate ( )
973
976
{
974
977
if ( manager . settings . events . exception != null )
975
978
manager . settings . events . exception ( this , e ) ;
@@ -980,9 +983,9 @@ private void OnReceive(byte[] bytes, int length)
980
983
}
981
984
982
985
protected abstract Request NewRequest ( ) ;
983
- protected abstract void ReleaseRequest ( Request request ) ;
986
+ protected abstract void ReleaseRequest ( Request request ) ;
984
987
#endregion
985
-
988
+
986
989
#region 主循环调用
987
990
private static class Loop
988
991
{
@@ -1112,7 +1115,7 @@ void OnApplicationQuit()
1112
1115
}
1113
1116
}
1114
1117
}
1115
- }
1118
+ }
1116
1119
#endregion
1117
1120
}
1118
1121
0 commit comments