|
|
@@ -24,7 +24,6 @@ namespace ET.Server
|
|
|
self.OuterUdp.Dispose();
|
|
|
self.OuterTcp.Dispose();
|
|
|
self.InnerSocket.Dispose();
|
|
|
- self.OuterNodes.Clear();
|
|
|
self.IPEndPoint = null;
|
|
|
}
|
|
|
|
|
|
@@ -93,7 +92,8 @@ namespace ET.Server
|
|
|
for (int i = 0; i < n; ++i)
|
|
|
{
|
|
|
uint id = self.checkTimeout.Dequeue();
|
|
|
- if (!self.OuterNodes.TryGetValue(id, out var node))
|
|
|
+ RouterNode node = self.GetChild<RouterNode>(id);
|
|
|
+ if (node == null)
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
@@ -164,10 +164,9 @@ namespace ET.Server
|
|
|
uint connectId = BitConverter.ToUInt32(self.Cache, 9);
|
|
|
string realAddress = self.Cache.ToStr(13, messageLength - 13);
|
|
|
|
|
|
- RouterNode routerNode;
|
|
|
-
|
|
|
// RouterAck之后ConnectIdNodes会删除,加入到OuterNodes中来
|
|
|
- if (!self.OuterNodes.TryGetValue(outerConn, out routerNode))
|
|
|
+ RouterNode routerNode = self.GetChild<RouterNode>(outerConn);
|
|
|
+ if (routerNode == null)
|
|
|
{
|
|
|
Log.Info($"router create reconnect: {self.IPEndPoint} {realAddress} {outerConn} {innerConn}");
|
|
|
routerNode = self.New(realAddress, outerConn, innerConn, connectId, self.CloneAddress());
|
|
|
@@ -240,8 +239,8 @@ namespace ET.Server
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- RouterNode routerNode;
|
|
|
- if (!self.OuterNodes.TryGetValue(outerConn, out routerNode))
|
|
|
+ RouterNode routerNode = self.GetChild<RouterNode>(outerConn);
|
|
|
+ if (routerNode == null)
|
|
|
{
|
|
|
routerNode = self.New(realAddress, outerConn, innerConn, connectId, self.CloneAddress());
|
|
|
Log.Info($"router create: {realAddress} {outerConn} {innerConn} {routerNode.SyncIpEndPoint}");
|
|
|
@@ -266,12 +265,13 @@ namespace ET.Server
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ // 这里可以注释,因增加了connectid的检查,第三方很难通过检查
|
|
|
// 校验ip,连接过程中ip不能变化
|
|
|
- if (!Equals(routerNode.SyncIpEndPoint, self.IPEndPoint))
|
|
|
- {
|
|
|
- Log.Warning($"kcp router syn ip is diff1: {routerNode.SyncIpEndPoint} {self.IPEndPoint}");
|
|
|
- break;
|
|
|
- }
|
|
|
+ //if (!Equals(routerNode.SyncIpEndPoint, self.IPEndPoint))
|
|
|
+ //{
|
|
|
+ // Log.Warning($"kcp router syn ip is diff1: {routerNode.SyncIpEndPoint} {self.IPEndPoint}");
|
|
|
+ // break;
|
|
|
+ //}
|
|
|
|
|
|
// 这里因为InnerConn是0,无法保证连接是同一客户端发过来的,所以这里如果connectid不同,则break。注意逻辑跟reconnect不一样
|
|
|
if (routerNode.ConnectId != connectId)
|
|
|
@@ -280,7 +280,6 @@ namespace ET.Server
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
// 校验内网地址
|
|
|
if (routerNode.InnerAddress != realAddress)
|
|
|
{
|
|
|
@@ -311,7 +310,8 @@ namespace ET.Server
|
|
|
uint outerConn = BitConverter.ToUInt32(self.Cache, 1); // remote
|
|
|
uint innerConn = BitConverter.ToUInt32(self.Cache, 5);
|
|
|
|
|
|
- if (!self.OuterNodes.TryGetValue(outerConn, out RouterNode routerNode))
|
|
|
+ RouterNode routerNode = self.GetChild<RouterNode>(outerConn);
|
|
|
+ if (routerNode == null)
|
|
|
{
|
|
|
Log.Warning($"kcp router syn not found outer nodes: {outerConn} {innerConn}");
|
|
|
break;
|
|
|
@@ -361,7 +361,8 @@ namespace ET.Server
|
|
|
uint outerConn = BitConverter.ToUInt32(self.Cache, 1);
|
|
|
uint innerConn = BitConverter.ToUInt32(self.Cache, 5);
|
|
|
|
|
|
- if (!self.OuterNodes.TryGetValue(outerConn, out RouterNode routerNode))
|
|
|
+ RouterNode routerNode = self.GetChild<RouterNode>(outerConn);
|
|
|
+ if (routerNode == null)
|
|
|
{
|
|
|
Log.Warning($"kcp router outer fin not found outer nodes: {outerConn} {innerConn}");
|
|
|
break;
|
|
|
@@ -398,7 +399,8 @@ namespace ET.Server
|
|
|
uint outerConn = BitConverter.ToUInt32(self.Cache, 1); // remote
|
|
|
uint innerConn = BitConverter.ToUInt32(self.Cache, 5); // local
|
|
|
|
|
|
- if (!self.OuterNodes.TryGetValue(outerConn, out RouterNode routerNode))
|
|
|
+ RouterNode routerNode = self.GetChild<RouterNode>(outerConn);
|
|
|
+ if (routerNode == null)
|
|
|
{
|
|
|
Log.Warning($"kcp router msg not found outer nodes: {outerConn} {innerConn}");
|
|
|
break;
|
|
|
@@ -454,7 +456,8 @@ namespace ET.Server
|
|
|
{
|
|
|
uint innerConn = BitConverter.ToUInt32(self.Cache, 1);
|
|
|
uint outerConn = BitConverter.ToUInt32(self.Cache, 5);
|
|
|
- if (!self.OuterNodes.TryGetValue(outerConn, out RouterNode routerNode))
|
|
|
+ RouterNode routerNode = self.GetChild<RouterNode>(outerConn);
|
|
|
+ if (routerNode == null)
|
|
|
{
|
|
|
Log.Warning($"router node error: {innerConn} {outerConn}");
|
|
|
break;
|
|
|
@@ -494,7 +497,8 @@ namespace ET.Server
|
|
|
uint innerConn = BitConverter.ToUInt32(self.Cache, 1); // remote
|
|
|
uint outerConn = BitConverter.ToUInt32(self.Cache, 5); // local
|
|
|
|
|
|
- if (!self.OuterNodes.TryGetValue(outerConn, out RouterNode routerNode))
|
|
|
+ RouterNode routerNode = self.GetChild<RouterNode>(outerConn);
|
|
|
+ if (routerNode == null)
|
|
|
{
|
|
|
Log.Warning($"kcp router ack not found outer nodes: {outerConn} {innerConn}");
|
|
|
break;
|
|
|
@@ -521,7 +525,8 @@ namespace ET.Server
|
|
|
uint innerConn = BitConverter.ToUInt32(self.Cache, 1);
|
|
|
uint outerConn = BitConverter.ToUInt32(self.Cache, 5);
|
|
|
|
|
|
- if (!self.OuterNodes.TryGetValue(outerConn, out RouterNode routerNode))
|
|
|
+ RouterNode routerNode = self.GetChild<RouterNode>(outerConn);
|
|
|
+ if (routerNode == null)
|
|
|
{
|
|
|
Log.Warning($"kcp router inner fin not found outer nodes: {outerConn} {innerConn}");
|
|
|
break;
|
|
|
@@ -558,7 +563,8 @@ namespace ET.Server
|
|
|
uint innerConn = BitConverter.ToUInt32(self.Cache, 1); // remote
|
|
|
uint outerConn = BitConverter.ToUInt32(self.Cache, 5); // local
|
|
|
|
|
|
- if (!self.OuterNodes.TryGetValue(outerConn, out RouterNode routerNode))
|
|
|
+ RouterNode routerNode = self.GetChild<RouterNode>(outerConn);
|
|
|
+ if (routerNode == null)
|
|
|
{
|
|
|
Log.Warning($"kcp router inner msg not found outer nodes: {outerConn} {innerConn}");
|
|
|
break;
|
|
|
@@ -584,17 +590,9 @@ namespace ET.Server
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public static RouterNode Get(this RouterComponent self, uint outerConn)
|
|
|
- {
|
|
|
- RouterNode routerNode = null;
|
|
|
- self.OuterNodes.TryGetValue(outerConn, out routerNode);
|
|
|
- return routerNode;
|
|
|
- }
|
|
|
-
|
|
|
private static RouterNode New(this RouterComponent self, string innerAddress, uint outerConn, uint innerConn, uint connectId, IPEndPoint syncEndPoint)
|
|
|
{
|
|
|
- RouterNode routerNode = self.AddChild<RouterNode>();
|
|
|
- routerNode.OuterConn = outerConn;
|
|
|
+ RouterNode routerNode = self.AddChildWithId<RouterNode>(outerConn);
|
|
|
routerNode.InnerConn = innerConn;
|
|
|
routerNode.ConnectId = connectId;
|
|
|
routerNode.InnerIpEndPoint = NetworkHelper.ToIPEndPoint(innerAddress);
|
|
|
@@ -602,7 +600,6 @@ namespace ET.Server
|
|
|
routerNode.InnerAddress = innerAddress;
|
|
|
routerNode.LastRecvInnerTime = TimeInfo.Instance.ClientNow();
|
|
|
|
|
|
- self.OuterNodes.Add(outerConn, routerNode);
|
|
|
self.checkTimeout.Enqueue(outerConn);
|
|
|
|
|
|
routerNode.Status = RouterStatus.Sync;
|
|
|
@@ -631,9 +628,7 @@ namespace ET.Server
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
- self.OuterNodes.Remove(routerNode.OuterConn);
|
|
|
-
|
|
|
+
|
|
|
Log.Info($"router remove: {routerNode.Id} outerConn: {routerNode.OuterConn} innerConn: {routerNode.InnerConn}");
|
|
|
|
|
|
routerNode.Dispose();
|