示例#1
0
 public void Set(TcpInternalServer.ServerSocketSender sender, AutoCSer.Net.TcpServer.ServerCallQueue queue)
 {
     this.Sender  = sender;
     CommandIndex = sender.ServerSocket.CommandIndex;
     //CommandFlags = CommandIdentity.GetCommandFlags();
     queue.Add(this);
 }
示例#2
0
        public void Set(TcpInternalServer.ServerSocketSender socket, TcpServer.ServerTaskType taskType)
        {
            this.Sender  = socket;
            CommandIndex = socket.ServerSocket.CommandIndex;
            //CommandFlags = CommandIdentity.GetCommandFlags();
            switch (taskType)
            {
            case TcpServer.ServerTaskType.ThreadPool: if (!System.Threading.ThreadPool.QueueUserWorkItem(ThreadPoolCall))
                {
                    AutoCSer.Threading.TaskSwitchThreadArray.Default.CurrentThread.Add(this);
                }
                return;

            case TcpServer.ServerTaskType.Timeout: AutoCSer.Threading.TaskSwitchThreadArray.Default.CurrentThread.Add(this); return;

            case TcpServer.ServerTaskType.TcpTask: TcpServer.ServerCallThreadArray.Default.CurrentThread.Add(this); return;

            case TcpServer.ServerTaskType.TcpQueue: TcpServer.ServerCallQueue.Default.Add(this); return;

            case TcpServer.ServerTaskType.TcpQueueLink: TcpServer.ServerCallQueue.DefaultLink.Add(this); return;

            case TcpServer.ServerTaskType.Queue: socket.Server.CallQueue.Add(this); return;

            case TcpServer.ServerTaskType.QueueLink: socket.Server.CallQueueLink.Add(this); return;
            }
        }
示例#3
0
 protected static bool verify(TcpInternalServer.ServerSocketSender sender, string userID, ulong randomPrefix, byte[] md5Data, ref long ticks)
 {
     TcpServer.ServerBase <TcpInternalServer.ServerAttribute> server = sender.Server;
     TcpServer.ServerBaseAttribute attribute = server.Attribute;
     if (TcpServer.TimeVerifyServer.CheckVerifyString(server, attribute))
     {
         return(true);
     }
     return(verify(sender, randomPrefix, attribute.VerifyString, md5Data, ref ticks));
 }
示例#4
0
        public void Set(TcpInternalServer.ServerSocketSender socket, TcpServer.ServerTaskType taskType, byte callQueueIndex)
        {
            this.Sender  = socket;
            CommandIndex = socket.ServerSocket.CommandIndex;
            //CommandFlags = CommandIdentity.GetCommandFlags();
            switch (taskType)
            {
            case TcpServer.ServerTaskType.Queue: socket.Server.CallQueueArray[callQueueIndex].Key.Add(this); return;

            case TcpServer.ServerTaskType.QueueLink: socket.Server.CallQueueArray[callQueueIndex].Value.Add(this); return;
            }
        }
示例#5
0
 protected static bool verify(TcpInternalServer.ServerSocketSender sender, ulong randomPrefix, byte[] md5Data, ref long ticks)
 {
     TcpServer.ServerBase <TcpInternalServer.ServerAttribute> server = sender.Server;
     TcpServer.ServerBaseAttribute attribute = server.Attribute;
     if (TcpServer.TimeVerifyServer.CheckVerifyString(server, attribute))
     {
         return(true);
     }
     if (md5Data != null && md5Data.Length == 16)
     {
         if (ticks <= lastVerifyTicks && ticks != sender.TimeVerifyTicks)
         {
             if (sender.TimeVerifyTicks == 0)
             {
                 while (System.Threading.Interlocked.CompareExchange(ref lastVerifyTickLock, 1, 0) != 0)
                 {
                     AutoCSer.Threading.ThreadYield.Yield(AutoCSer.Threading.ThreadYield.Type.TimeVerifyServerSetTicks);
                 }
                 sender.TimeVerifyTicks = ++lastVerifyTicks;
                 System.Threading.Interlocked.Exchange(ref lastVerifyTickLock, 0);
             }
             ticks = sender.TimeVerifyTicks;
             return(false);
         }
         if (TcpServer.TimeVerifyServer.IsMd5(TcpServer.TimeVerifyServer.Md5(attribute.VerifyString, randomPrefix, ticks), md5Data) == 0)
         {
             if (ticks > lastVerifyTicks)
             {
                 while (System.Threading.Interlocked.CompareExchange(ref lastVerifyTickLock, 1, 0) != 0)
                 {
                     AutoCSer.Threading.ThreadYield.Yield(AutoCSer.Threading.ThreadYield.Type.TimeVerifyServerSetTicks);
                 }
                 if (ticks > lastVerifyTicks)
                 {
                     lastVerifyTicks = ticks;
                 }
                 System.Threading.Interlocked.Exchange(ref lastVerifyTickLock, 0);
             }
             if (!attribute.IsMarkData || sender.SetMarkData(attribute.VerifyHashCode ^ randomPrefix))
             {
                 return(true);
             }
         }
     }
     ticks = 0;
     return(false);
 }
示例#6
0
 /// <summary>
 /// 时间验证函数
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="randomPrefix">随机前缀</param>
 /// <param name="verifyString">验证字符串</param>
 /// <param name="md5Data">MD5 数据</param>
 /// <param name="ticks">验证时钟周期</param>
 /// <returns>是否验证成功</returns>
 protected static bool verify(TcpInternalServer.ServerSocketSender sender, ulong randomPrefix, string verifyString, byte[] md5Data, ref long ticks)
 {
     if (md5Data != null && md5Data.Length == 16)
     {
         if (!timeVerifyTick.Check(ref ticks, ref sender.TimeVerifyTicks))
         {
             return(false);
         }
         if (md5 == null)
         {
             md5 = new MD5CryptoServiceProvider();
         }
         if (TcpServer.TimeVerifyServer.IsMd5(TcpServer.TimeVerifyServer.Md5(md5, verifyString, randomPrefix, ticks), md5Data) == 0)
         {
             timeVerifyTick.Set(ticks);
             if (!sender.Server.Attribute.IsMarkData || sender.SetMarkData(sender.Server.ServerAttribute.VerifyHashCode ^ randomPrefix))
             {
                 return(true);
             }
         }
     }
     ticks = 0;
     return(false);
 }
示例#7
0
 protected static bool verify(TcpInternalServer.ServerSocketSender sender, string userID, ulong randomPrefix, byte[] md5Data, ref long ticks)
 {
     TcpServer.ServerBase server = sender.Server;
     return(server.CheckVerifyString() || verify(sender, randomPrefix, server.Attribute.VerifyString, md5Data, ref ticks));
 }