示例#1
0
        /// <summary>
        /// 登录操作队列处理
        /// </summary>
        private void LoginQueueWork()
        {
            while (true)
            {
                //出队
                var item = QueueLogin.DeQueue();

                if (null != item)
                {
                    UserLoginRecords records = new UserLoginRecords
                    {
                        AreaID         = item.AreaID,
                        AreaName       = item.AreaName,
                        Latitude       = item.Latitude,
                        LoginTime      = item.LoginTime.ToDateTime(),
                        Longitude      = item.Longitude,
                        RecordID       = IDProvider.NewId(),
                        TerminalDevice = item.TerminalDevice,
                        UserID         = item.UserID
                    };

                    //更新用户信息
                    ServicesProvider.Items.UserService.UpdateLastInfo(item.UserID, item.UserName, item.UserType, item.AreaName, item.LoginTime.ToDateTime());

                    //记录登录操作信息
                    ServicesProvider.Items.UserLoginRecordService.AddRecord(records);
                }

                //避免无数据操作时CPU空转
                Thread.Sleep(100);
            }
        }
示例#2
0
        /// <summary>
        /// 未发送出去消息队列处理
        /// </summary>
        private void UnsendQueueWork()
        {
            while (true)
            {
                //出队
                var item = QueueUnSendToDB.DeQueue();

                if (null != item)
                {
                    UnSendMessage message = new UnSendMessage
                    {
                        Content     = item.Content,
                        MessageID   = IDProvider.NewId(),
                        MessageType = item.MessageType,
                        ReceiverID  = item.ReceiverID,
                        SenderID    = item.SenderID,
                        SenderName  = item.SernderName,
                        SendTime    = item.SendTime.ToDateTime()
                    };

                    //写入数据库
                    ServicesProvider.Items.UnsendMessageService.AddMessage(message);
                }

                //避免无数据操作时CPU空转
                Thread.Sleep(100);
            }
        }
示例#3
0
        /// <summary>
        /// 待写入消息历史的队列处理
        /// </summary>
        private void WriteToHistoryQueueWork()
        {
            while (true)
            {
                //出队
                var item = QueueWriteToHistory.DeQueue();

                if (null != item)
                {
                    var userNameDic = ServicesProvider.Items.UserService.GetUserName(new[] { item.SenderID, item.ReceiverID });

                    MessageHistory message = new MessageHistory
                    {
                        Content      = item.Content,
                        MessageID    = IDProvider.NewId(),
                        MessageType  = item.MessageType,
                        ReadTime     = item.SendTime.ToDateTime(),
                        ReceiverID   = item.ReceiverID,
                        ReceiverName = userNameDic.ContainsKey(item.ReceiverID) ? userNameDic[item.ReceiverID] : item.ReceiverName,
                        SenderID     = item.SenderID,
                        SenderName   = userNameDic.ContainsKey(item.SenderID) ? userNameDic[item.SenderID] : string.Empty,
                        SendTime     = item.SendTime.ToDateTime()
                    };

                    //写入数据库
                    ServicesProvider.Items.MessageHistoryService.AddMessage(message);
                }

                //避免无数据操作时CPU空转
                Thread.Sleep(100);
            }
        }
 static void Main(string[] args)
 {
     IQueue<string> queue = new LinkQueue<string>();
     queue.EnQueue("a1");
     queue.EnQueue("a2");
     queue.EnQueue("a3");
     while (queue.IsEmpty() == false)
     {
         Console.WriteLine(queue.QueueFront);
         queue.DeQueue();
     }
 }
示例#5
0
        public void Test()
        {
            LinkQueue <int> stack = new LinkQueue <int>();

            stack.EnQueue(1);
            stack.EnQueue(2);
            stack.EnQueue(3);

            Assert.Equal(1, stack.DeQueue());
            Assert.Equal(2, stack.DeQueue());
            Assert.Equal(3, stack.DeQueue());

            stack.EnQueue(1);
            stack.EnQueue(2);
            Assert.Equal(1, stack.DeQueue());
            Assert.Equal(2, stack.DeQueue());

            stack.EnQueue(3);
            Assert.Equal(3, stack.DeQueue());
            Assert.Equal(0, stack.DeQueue());
        }
示例#6
0
        /// <summary>
        /// 待发送的消息队列
        /// </summary>
        private void WaitSendQueueWork()
        {
            while (true)
            {
                //出队
                var item = QueueWaitSend.DeQueue();

                if (null != item)
                {
                    IChannel channel = GetUserChannel(item.ReceiverID);

                    //通道存在
                    if (null != channel)
                    {
                        //发送消息
                        Server.Send(item, channel);
                    }
                }

                //避免无数据操作时CPU空转
                Thread.Sleep(100);
            }
        }
        /// <summary>
        /// �õ�AOV����������������
        /// </summary>
        /// <returns>AOV����������������</returns>
        public string TopoSort()
        {
            string Result = string.Empty;
            int[] ID = GetInDegressList();
            LinkQueue<int> LQ = new LinkQueue<int>();
            for (int i = 0; i < vertexCount; i++)
            {
                if (ID[i] == 0)
                    LQ.EnQueue(i);
            }
            if (LQ.Length == vertexCount)
                throw new Exception("������ͼ�������.");
            while (LQ.IsEmpty() == false)
            {
                int j = LQ.QueueFront;
                LQ.DeQueue();

                Result += vertexList[j].VertexName + "\n";

                EdgeNode p = vertexList[j].FirstNode;
                while (p != null)
                {
                    ID[p.Index]--;
                    if (ID[p.Index] == 0)
                    {
                        LQ.EnQueue(p.Index);
                    }
                    p = p.Next;
                }
            }
            int k;
            for (k = 0; k < vertexCount; k++)
                if (ID[k] != 0)
                    break;
            return (k == vertexCount) ? Result : "��AOV���л�.";
        }
 /// <summary>
 /// �õ����������������
 /// </summary>
 /// <param name="startNodeName">���й��������������ʼ������</param>
 /// <returns>���������������</returns>
 public string BFSTraversal(string startNodeName)
 {
     string BFSResult = string.Empty;
     int i = GetIndex(startNodeName);
     if (i != -1)
     {
         for (int j = 0; j < vertexCount; j++)
             vertexList[j].Visited = false;
         vertexList[i].Visited = true;
         BFSResult += vertexList[i].VertexName + "\n";
         LinkQueue<int> Q = new LinkQueue<int>();
         Q.EnQueue(i);
         while (Q.IsEmpty() == false)
         {
             int j = Q.QueueFront;
             Q.DeQueue();
             EdgeNode p = vertexList[j].FirstNode;
             while (p != null)
             {
                 if (vertexList[p.Index].Visited == false)
                 {
                     vertexList[p.Index].Visited = true;
                     BFSResult += vertexList[p.Index].VertexName + "\n";
                     Q.EnQueue(p.Index);
                 }
                 p = p.Next;
             }
         }
     }
     return BFSResult;
 }
示例#9
0
        static void Main(string[] args)
        {
            Console.WriteLine(Test(3));

            #region 线性表测试
            ////A<string> a = new A<string>();
            //SingleLinkList<string> list1 = new SingleLinkList<string>();
            //Console.WriteLine("是否是空表:{0}", list1.IsEmpty);
            //list1.Append("早上");
            //ListPrint(list1);

            //Console.WriteLine(list1.GetLength);
            //list1.Insert("你好", 0);
            //ListPrint(list1);

            //list1.Append("中上");
            //ListPrint(list1);


            //list1.Insert("陌生人", 0);
            //ListPrint(list1);
            //Console.WriteLine(list1.GetLength);

            //list1.Insert("傻逼", list1.GetLength-1);
            //ListPrint(list1);


            //Console.WriteLine("倒置表:" + list1.ReverseList());
            //ListPrint(list1);


            //Console.WriteLine("表长:{0}", list1.GetLength);
            //Console.WriteLine("是否是空表:{0}", list1.IsEmpty);
            //Console.WriteLine("删除的是:{0}", list1.Delete(4));
            //Console.WriteLine("表长:{0}", list1.GetLength);
            //ListPrint(list1);


            //Console.WriteLine("获取的是:{0}", list1.GetElem(0));
            //Console.WriteLine("获取的是:{0}", list1.Locate("傻逼"));
            //Console.WriteLine("表长:{0}", list1.GetLength);


            //list1.Delete(list1.GetLength - 2);

            //list1.SetElem("睡觉了", 0);

            //ListPrint(list1);

            //Console.WriteLine("倒置表:" + list1.ReverseList());
            //ListPrint(list1);

            //Console.WriteLine("清空");
            //list1.Clear();

            //Console.WriteLine("倒置表:" + list1.ReverseList());
            //ListPrint(list1);

            //list1.Append("中上");

            //Console.WriteLine("倒置表:" + list1.ReverseList());
            //ListPrint(list1);
            //ListPrint(list1);

            //Console.ReadKey();

            #endregion

            #region Stack测试

            //SeqStack<string> list2 = new SeqStack<string>(4);

            //Console.WriteLine($"判空{list2.IsEmpty},元素:{list2.Count}");
            //DataStructPrint(list2);
            //list2.Clear();
            //DataStructPrint(list2);

            //list2.Push("一");
            //list2.Push("二");
            //list2.Push("三");
            //list2.Push("四");
            //list2.Push("五");
            //DataStructPrint(list2);

            //Console.WriteLine($"判空{list2.IsEmpty},元素:{list2.Count}");


            //Console.WriteLine($"获取:{list2.GetTop()}");

            //Console.WriteLine($"出栈:{list2.Pop()}");
            //Console.WriteLine($"获取:{list2.GetTop()}");

            //Console.WriteLine($"出栈:{list2.Pop()}");
            //Console.WriteLine($"出栈:{list2.Pop()}");
            //Console.WriteLine($"判空{list2.IsEmpty},元素:{list2.Count}");

            //Console.WriteLine($"出栈:{list2.Pop()}");
            //Console.WriteLine($"出栈:{list2.Pop()}");
            //Console.WriteLine($"出栈:{list2.Pop()}");
            //Console.WriteLine($"判空{list2.IsEmpty},元素:{list2.Count}");


            //list2.Push("六");
            //DataStructPrint(list2);


            #endregion

            #region 队列

            LinkQueue <string> list = new LinkQueue <string>();

            Console.WriteLine($"元素个数:{list.Count};是否空:{list.IsEmpty}");

            DataStructPrint(list);

            list.EnQueue("一");
            list.EnQueue("二");
            list.EnQueue("三");
            Console.WriteLine($"元素个数:{list.Count};是否空:{list.IsEmpty}");

            list.EnQueue("四");
            list.EnQueue("五");
            list.EnQueue("六");

            DataStructPrint(list);

            Console.WriteLine($"元素个数:{list.Count};是否空:{list.IsEmpty}");

            Console.WriteLine($"取出:{list.DeQueue()}");
            Console.WriteLine($"取出:{list.DeQueue()}");
            DataStructPrint(list);

            Console.WriteLine($"队头:{list.GetHead()}");

            list.Clear();
            //Console.WriteLine($"取出:{list.DeQueue()}");
            //Console.WriteLine($"取出:{list.DeQueue()}");
            //Console.WriteLine($"取出:{list.DeQueue()}");
            //Console.WriteLine($"取出:{list.DeQueue()}");


            DataStructPrint(list);

            #endregion

            Console.ReadKey();
        }