Răsfoiți Sursa

去掉connectasync channelcount 参数

tanghai 11 ani în urmă
părinte
comite
95c6125a74

+ 2 - 2
CSharp/Platform/Network/IService.cs

@@ -11,9 +11,9 @@ namespace Network
 		/// <param name="action"></param>
 		void Add(Action action);
 
-		Task<IChannel> GetChannel(string host, int port, uint channel = 255);
+		Task<IChannel> GetChannel(string host, int port);
 
-		Task<IChannel> GetChannel(string address, uint channel = 255);
+		Task<IChannel> GetChannel(string address);
 
 		Task<IChannel> GetChannel();
 

+ 3 - 3
CSharp/Platform/TNet/TService.cs

@@ -100,7 +100,7 @@ namespace TNet
 			this.timerManager.Remove(tChannel.SendTimer);
 		}
 
-		public async Task<IChannel> GetChannel(string host, int port, uint channelCount)
+		public async Task<IChannel> GetChannel(string host, int port)
 		{
 			TChannel channel = null;
 			if (this.channels.TryGetValue(host + ":" + port, out channel))
@@ -110,11 +110,11 @@ namespace TNet
 			return await ConnectAsync(host, port);
 		}
 
-		public async Task<IChannel> GetChannel(string address, uint channelCount)
+		public async Task<IChannel> GetChannel(string address)
 		{
 			string[] ss = address.Split(':');
 			int port = Convert.ToInt32(ss[1]);
-			return await GetChannel(ss[0], port, channelCount);
+			return await GetChannel(ss[0], port);
 		}
 
 		public void RunOnce(int timeout)

+ 1 - 1
CSharp/Platform/UNet/UAddress.cs

@@ -32,7 +32,7 @@ namespace UNet
 			}
 		}
 
-		public string HostName
+		public string Host
 		{
 			get
 			{

+ 1 - 1
CSharp/Platform/UNet/UNet.csproj

@@ -45,12 +45,12 @@
     <Compile Include="UPoller.cs" />
     <Compile Include="Library.cs" />
     <Compile Include="NativeMethods.cs" />
-    <Compile Include="PeersManager.cs" />
     <Compile Include="NativeStructs.cs" />
     <Compile Include="UPacket.cs" />
     <Compile Include="USocket.cs" />
     <Compile Include="UChannel.cs" />
     <Compile Include="UService.cs" />
+    <Compile Include="USocketManager.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="Properties\" />

+ 14 - 11
CSharp/Platform/UNet/UPoller.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Concurrent;
 using System.Collections.Generic;
 
 namespace UNet
@@ -10,14 +11,14 @@ namespace UNet
 			Library.Initialize();
 		}
 
-		private readonly PeersManager peersManager = new PeersManager();
+		private readonly USocketManager uSocketManager = new USocketManager();
 		private readonly LinkedList<UEvent> connEEvents = new LinkedList<UEvent>();
 
-		internal PeersManager PeersManager
+		internal USocketManager USocketManager
 		{
 			get
 			{
-				return this.peersManager;
+				return this.uSocketManager;
 			}
 		}
 
@@ -33,9 +34,11 @@ namespace UNet
 		private readonly object eventsLock = new object();
 		private Action events;
 
+		private readonly BlockingCollection<Action> blockingCollection = new BlockingCollection<Action>();
+
 		public UPoller(string hostName, ushort port)
 		{
-			UAddress address = new UAddress { HostName = hostName, Port = port };
+			UAddress address = new UAddress { Host = hostName, Port = port };
 			ENetAddress nativeAddress = address.Struct;
 			this.host = NativeMethods.EnetHostCreate(
 				ref nativeAddress, NativeMethods.ENET_PROTOCOL_MAXIMUM_PEER_ID, 0, 0, 0);
@@ -198,22 +201,22 @@ namespace UNet
 					case EventType.Connect:
 					{
 						// 这是一个connect peer
-						if (this.PeersManager.ContainsKey(uEvent.PeerPtr))
+						if (this.USocketManager.ContainsKey(uEvent.PeerPtr))
 						{
-							USocket uSocket = this.PeersManager[uEvent.PeerPtr];
+							USocket uSocket = this.USocketManager[uEvent.PeerPtr];
 							uSocket.OnConnected(uEvent);
 						}
 								// accept peer
 						else
 						{
 							// 如果server端没有acceptasync,则请求放入队列
-							if (!this.PeersManager.ContainsKey(IntPtr.Zero))
+							if (!this.USocketManager.ContainsKey(IntPtr.Zero))
 							{
 								this.connEEvents.AddLast(uEvent);
 							}
 							else
 							{
-								USocket uSocket = this.PeersManager[IntPtr.Zero];
+								USocket uSocket = this.USocketManager[IntPtr.Zero];
 								uSocket.OnConnected(uEvent);
 							}
 						}
@@ -221,7 +224,7 @@ namespace UNet
 					}
 					case EventType.Receive:
 					{
-						USocket uSocket = this.PeersManager[uEvent.PeerPtr];
+						USocket uSocket = this.USocketManager[uEvent.PeerPtr];
 						uSocket.OnReceived(uEvent);
 						break;
 					}
@@ -240,8 +243,8 @@ namespace UNet
 
 						// 链接已经被应用层接收
 						uEvent.EventState = EventState.DISCONNECTED;
-						USocket uSocket = this.PeersManager[uEvent.PeerPtr];
-						this.PeersManager.Remove(uEvent.PeerPtr);
+						USocket uSocket = this.USocketManager[uEvent.PeerPtr];
+						this.USocketManager.Remove(uEvent.PeerPtr);
 
 						// 等待的task将抛出异常
 						if (uSocket.Connected != null)

+ 6 - 6
CSharp/Platform/UNet/UService.cs

@@ -67,30 +67,30 @@ namespace UNet
 			}
 		}
 
-		private async Task<IChannel> ConnectAsync(string host, int port, uint channelCount)
+		private async Task<IChannel> ConnectAsync(string host, int port)
 		{
 			USocket newSocket = new USocket(this.poller);
-			await newSocket.ConnectAsync(host, (ushort)port, channelCount);
+			await newSocket.ConnectAsync(host, (ushort)port);
 			UChannel channel = new UChannel(newSocket, this);
 			channels[channel.RemoteAddress] = channel;
 			return channel;
 		}
 
-		public async Task<IChannel> GetChannel(string address, uint channelCount)
+		public async Task<IChannel> GetChannel(string address)
 		{
 			string[] ss = address.Split(':');
 			int port = Convert.ToInt32(ss[1]);
-			return await GetChannel(ss[0], port, channelCount);
+			return await GetChannel(ss[0], port);
 		}
 
-		public async Task<IChannel> GetChannel(string host, int port, uint channelCount)
+		public async Task<IChannel> GetChannel(string host, int port)
 		{
 			UChannel channel = null;
 			if (this.channels.TryGetValue(host + ":" + port, out channel))
 			{
 				return channel;
 			}
-			return await ConnectAsync(host, port, channelCount);
+			return await ConnectAsync(host, port);
 		}
 
 		public async Task<IChannel> GetChannel()

+ 13 - 19
CSharp/Platform/UNet/USocket.cs

@@ -12,9 +12,9 @@ namespace UNet
 		private readonly UPoller service;
 		private readonly LinkedList<byte[]> recvBuffer = new LinkedList<byte[]>();
 
-		public Action<UEvent> Connected { get; set; }
-		public Action<UEvent> Received { get; set; }
-		public Action<UEvent> Disconnect { get; set; }
+		public Action<UEvent> Connected { get; private set; }
+		public Action<UEvent> Received { get; private set; }
+		public Action<UEvent> Disconnect { get; private set; }
 		public Action<int> Error { get; set; }
 
 		public USocket(UPoller service)
@@ -92,24 +92,18 @@ namespace UNet
 			NativeMethods.EnetPeerThrottleConfigure(this.peerPtr, interval, acceleration, deceleration);
 		}
 
-		public Task<bool> ConnectAsync(
-				string hostName, ushort port,
-				uint channel = NativeMethods.ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT)
+		public Task<bool> ConnectAsync(string hostName, ushort port)
 		{
-			if (channel > NativeMethods.ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT || channel < NativeMethods.ENET_PROTOCOL_MINIMUM_CHANNEL_COUNT)
-			{
-				throw new ArgumentOutOfRangeException("channel", channel.ToString());
-			}
-
 			var tcs = new TaskCompletionSource<bool>();
-			UAddress address = new UAddress { HostName = hostName, Port = port };
+			UAddress address = new UAddress { Host = hostName, Port = port };
 			ENetAddress nativeAddress = address.Struct;
-			this.peerPtr = NativeMethods.EnetHostConnect(this.service.HostPtr, ref nativeAddress, channel, 0);
+			this.peerPtr = NativeMethods.EnetHostConnect(
+				this.service.HostPtr, ref nativeAddress, NativeMethods.ENET_PROTOCOL_MAXIMUM_CHANNEL_COUNT, 0);
 			if (this.peerPtr == IntPtr.Zero)
 			{
 				throw new UException("host connect call failed.");
 			}
-			this.service.PeersManager.Add(this.peerPtr, this);
+			this.service.USocketManager.Add(this.peerPtr, this);
 			this.Connected = eEvent =>
 			{
 				if (eEvent.EventState == EventState.DISCONNECTED)
@@ -123,7 +117,7 @@ namespace UNet
 
 		public Task<bool> AcceptAsync()
 		{
-			if (this.service.PeersManager.ContainsKey(IntPtr.Zero))
+			if (this.service.USocketManager.ContainsKey(IntPtr.Zero))
 			{
 				throw new UException("do not accept twice!");
 			}
@@ -137,12 +131,12 @@ namespace UNet
 				this.service.ConnEEvents.RemoveFirst();
 
 				this.PeerPtr = uEvent.PeerPtr;
-				this.service.PeersManager.Add(this.PeerPtr, this);
+				this.service.USocketManager.Add(this.PeerPtr, this);
 				tcs.TrySetResult(true);
 			}
 			else
 			{
-				this.service.PeersManager.Add(this.PeerPtr, this);
+				this.service.USocketManager.Add(this.PeerPtr, this);
 				this.Connected = eEvent =>
 				{
 					if (eEvent.EventState == EventState.DISCONNECTED)
@@ -150,10 +144,10 @@ namespace UNet
 						tcs.TrySetException(new UException("socket disconnected in accpet"));
 					}
 
-					this.service.PeersManager.Remove(IntPtr.Zero);
+					this.service.USocketManager.Remove(IntPtr.Zero);
 
 					this.PeerPtr = eEvent.PeerPtr;
-					this.service.PeersManager.Add(this.PeerPtr, this);
+					this.service.USocketManager.Add(this.PeerPtr, this);
 					tcs.TrySetResult(true);
 				};
 			}

+ 7 - 7
CSharp/Platform/UNet/PeersManager.cs → CSharp/Platform/UNet/USocketManager.cs

@@ -3,23 +3,23 @@ using System.Collections.Generic;
 
 namespace UNet
 {
-	internal class PeersManager
+	internal class USocketManager
 	{
-		private readonly Dictionary<IntPtr, USocket> peersManager = new Dictionary<IntPtr, USocket>();
+		private readonly Dictionary<IntPtr, USocket> sockets = new Dictionary<IntPtr, USocket>();
 
 		public void Add(IntPtr peerPtr, USocket uSocket)
 		{
-			this.peersManager.Add(peerPtr, uSocket);
+			this.sockets.Add(peerPtr, uSocket);
 		}
 
 		public void Remove(IntPtr peerPtr)
 		{
-			this.peersManager.Remove(peerPtr);
+			this.sockets.Remove(peerPtr);
 		}
 
 		public bool ContainsKey(IntPtr peerPtr)
 		{
-			if (this.peersManager.ContainsKey(peerPtr))
+			if (this.sockets.ContainsKey(peerPtr))
 			{
 				return true;
 			}
@@ -30,11 +30,11 @@ namespace UNet
 		{
 			get
 			{
-				if (!this.peersManager.ContainsKey(peerPtr))
+				if (!this.sockets.ContainsKey(peerPtr))
 				{
 					throw new KeyNotFoundException("No Peer Key");
 				}
-				return this.peersManager[peerPtr];
+				return this.sockets[peerPtr];
 			}
 		}
 	}