/// <summary> /// 时间验证客户端验证 /// </summary> /// <param name="verify">时间验证服务客户端委托</param> /// <param name="sender"></param> /// <param name="client"></param> /// <returns></returns> public unsafe static bool Verify(Verifier verify, ClientSocketSender sender, AutoCSer.Net.TcpInternalServer.Client client) { string verifyString = client.Attribute.VerifyString; if (verifyString == null) { long ticks = 0; return(verify(sender, null, 0, null, ref ticks).Value); } return(Verify(verify, sender, client, null, verifyString)); }
/// <summary> /// TCP调用客户端 /// </summary> /// <param name="attribute">TCP 调用服务器端配置信息</param> /// <param name="clientRoute">TCP 客户端路由</param> /// <param name="onCustomData">自定义数据包处理</param> /// <param name="log">日志接口</param> public TcpInternalClient(AutoCSer.Net.TcpInternalServer.ServerAttribute attribute = null, AutoCSer.Net.TcpServer.ClientLoadRoute <AutoCSer.Net.TcpInternalServer.ClientSocketSender> clientRoute = null, Action <SubArray <byte> > onCustomData = null, AutoCSer.Log.ILog log = null) { if (attribute == null) { attribute = AutoCSer.Net.TcpInternalServer.ServerAttribute.GetConfig("AutoCSer.TestCase.Nuget.Server", typeof(AutoCSer.TestCase.Nuget.Server)); } _TcpClient_ = new AutoCSer.Net.TcpInternalServer.Client <TcpInternalClient>(this, attribute, onCustomData, log, clientRoute); if (attribute.IsAuto) { _TcpClient_.TryCreateSocket(); } }
/// <summary> /// TCP调用客户端 /// </summary> /// <param name="attribute">TCP 调用服务器端配置信息</param> /// <param name="onCustomData">自定义数据包处理</param> /// <param name="log">日志接口</param> public TcpInternalClient(AutoCSer.Net.TcpInternalServer.ServerAttribute attribute = null, Action <SubArray <byte> > onCustomData = null, AutoCSer.Log.ILog log = null) { if (attribute == null) { attribute = AutoCSer.Net.TcpInternalServer.ServerAttribute.GetConfig("ITestServer", typeof(AutoCSer.Example.TcpRegisterClient.RegisterClientTestServer)); } _TcpClient_ = new AutoCSer.Net.TcpInternalServer.Client <TcpInternalClient>(this, attribute, onCustomData, log); if (attribute.IsAuto) { _TcpClient_.TryCreateSocket(); } }
/// <summary> /// 时间验证客户端验证 /// </summary> /// <param name="verify">时间验证服务客户端委托</param> /// <param name="sender"></param> /// <param name="client"></param> /// <param name="userID">用户ID</param> /// <param name="verifyString">验证字符串</param> /// <returns></returns> public unsafe static bool Verify(Verifier verify, ClientSocketSender sender, AutoCSer.Net.TcpInternalServer.Client client, string userID, string verifyString) { TcpServer.ServerBaseAttribute attribute = client.Attribute; ulong markData = 0; if (attribute.IsMarkData) { markData = attribute.VerifyHashCode; } long ticks = GetTicks(); TcpServer.ClientSocketBase socket = sender.ClientSocket; bool isError = false; do { ulong randomPrefix = Random.Default.SecureNextULongNotZero(); while (randomPrefix == markData) { randomPrefix = Random.Default.SecureNextULongNotZero(); } socket.ReceiveMarkData = attribute.IsMarkData ? markData ^ randomPrefix : 0UL; sender.SendMarkData = 0; long lastTicks = ticks; TcpServer.ReturnValue <bool> isVerify = verify(sender, userID, randomPrefix, TcpServer.TimeVerifyServer.Md5(verifyString, randomPrefix, ticks), ref ticks); if (isVerify.Value) { sender.SendMarkData = socket.ReceiveMarkData; if (isError) { socket.Log.Debug(sender.ClientSocket.IpAddress.ToString() + ":" + sender.ClientSocket.Port.toString() + " TCP客户端验证时间重试成功"); } return(true); } if (isVerify.Type != TcpServer.ReturnType.Success || ticks <= lastTicks) { socket.Log.Error(sender.ClientSocket.IpAddress.ToString() + ":" + sender.ClientSocket.Port.toString() + " TCP客户端验证失败 [" + isVerify.Type.ToString() + "] " + ticks.toString() + " <= " + lastTicks.toString()); return(false); } socket.Log.Error(sender.ClientSocket.IpAddress.ToString() + ":" + sender.ClientSocket.Port.toString() + " TCP客户端验证时间失败重试 " + ticks.toString() + " - " + lastTicks.toString()); isError = true; }while (true); }
/// <summary> /// 时间验证客户端验证 /// </summary> /// <param name="verify">时间验证服务客户端委托</param> /// <param name="sender"></param> /// <param name="client"></param> /// <returns></returns> public unsafe static bool Verify(Verifier verify, ClientSocketSender sender, AutoCSer.Net.TcpInternalServer.Client client) { long ticks; ServerAttribute attribute = client.Attribute; string verifyString = attribute.VerifyString; if (verifyString == null) { ticks = 0; return(verify(sender, 0, null, ref ticks).Value); } ulong markData = 0; if (attribute.IsMarkData) { markData = attribute.VerifyHashCode; } ticks = Date.NowTime.SetUtc().Ticks; TcpServer.ClientSocketBase socket = sender.ClientSocket; do { ulong randomPrefix = Random.Default.SecureNextULongNotZero(); while (randomPrefix == markData) { randomPrefix = Random.Default.SecureNextULongNotZero(); } socket.ReceiveMarkData = attribute.IsMarkData ? markData ^ randomPrefix : 0UL; sender.SendMarkData = 0; long lastTicks = ticks; TcpServer.ReturnValue <bool> isVerify = verify(sender, randomPrefix, TcpServer.TimeVerifyServer.Md5(verifyString, randomPrefix, ticks), ref ticks); if (isVerify.Value) { sender.SendMarkData = socket.ReceiveMarkData; return(true); } if (isVerify.Type != TcpServer.ReturnType.Success || ticks <= lastTicks) { socket.Log.Add(AutoCSer.Log.LogType.Error, "TCP客户端验证失败 [" + isVerify.Type.ToString() + "] " + ticks.toString() + " <= " + lastTicks.toString()); return(false); } socket.Log.Add(AutoCSer.Log.LogType.Error, "TCP客户端验证时间失败重试 " + ticks.toString() + " - " + lastTicks.toString()); }while (true); }