Example #1
0
        private AllUsers()
        {
            bool timeoutFlag;

            users.ExtractAll(LockTimeout, out timeoutFlag);
            if (GetAllPlatformUsers == null)
            {
                return;
            }
            try
            {
                var allUsers = GetAllPlatformUsers();
                if (allUsers == null)
                {
                    return;
                }
                users.AddRange(allUsers.Select(u => new User(u)), LockTimeout);
                lastRequestTime.Touch();
            }
            catch (Exception ex)
            {
                //Console.WriteLine("Ошибка получения списка пользователей\n" + ex);
                Logger.Error("Ошибка получения списка пользователей", ex);
            }
        }
Example #2
0
 private void RoomsReceivedInternal(List <Room> rooms)
 {
     activeRooms.ExtractAll(LockTimeout);
     activeRooms.AddRange(rooms, LockTimeout);
     if (RoomsReceived != null)
     {
         RoomsReceived(rooms);
     }
 }
Example #3
0
        public void AppendLogMessage(string msg)
        {
            logMessages.Add(DateTime.Now.ToString("HH:mm:ss") + " " + msg, 1000);
            // отрезать линюю историю
            if (logMessages.Count <= MaxMessagesInLog)
            {
                return;
            }
            bool timeout;
            var  subMsgList  = logMessages.ExtractAll(1000, out timeout);
            var  countTarget = MaxMessagesInLog - ClearLogBy;

            subMsgList = subMsgList.Skip(Math.Max(0, subMsgList.Count() - countTarget)).Take(countTarget).ToList();
            logMessages.AddRange(subMsgList, 1000);
        }
Example #4
0
        private void button1_Click(object sender, EventArgs e)
        {
            ThreadSafeList <string> list = new ThreadSafeList <string>();
            Random rnd = new Random(DateTime.Now.Millisecond);

            for (int i = 0; i < 10; i++)
            {
                list.Add(rnd.Next(1, 20).ToString());
            }
            string[] aa = { "A1", "B2", "C3", "D4" };
            list.AddRange(aa);
            MessageBox.Show("OK");
            list = new ThreadSafeList <string>(aa);
            list.RemoveAll(s => { int zz; return(!int.TryParse(s, out zz)); });
            ThreadSafeCollection <string> cl = new ThreadSafeCollection <string>();
        }
Example #5
0
 private void AllUsersReceivedInternal(List <User> users, string room)
 {
     if (isStopping)
     {
         return;
     }
     if (string.IsNullOrEmpty(room))
     {
         onlineUsers.ExtractAll(LockTimeout);
         onlineUsers.AddRange(users, LockTimeout);
     }
     if (AllUsersReceived != null)
     {
         AllUsersReceived(users, room);
     }
 }
        public void ThreadSafeListCopyTest()
        {
            var list1 = new ThreadSafeList<QuoteData>();
            var list2 = new ThreadSafeList<int>();

            list1.AddRange(new[] {new QuoteData(1, 2, DateTime.Now), null}, 1000);
            list2.AddRange(new[] {1, 2, 3}, 1000);

            var found1 = list1.Find(x => true, x => new QuoteData(x), 1000);
            Assert.IsTrue(found1.ask == 2 && found1.bid == 1);
            var found2 = list1.Find(x => x == null, x => new QuoteData(x), 1000);
            Assert.IsNull(found2);
            found2 = list1.Find(x => x.ask == 100, x => new QuoteData(x), 1000);
            Assert.IsNull(found2);

            var found3 = list2.Find(x => x == 2, x => x, 1000);
            Assert.IsTrue(found3 == 2);
            found3 = list2.Find(x => x == 100, x => x, 1000);
            Assert.AreEqual(found3, default(int));
        }
        public void ThreadSafeListCopyTest()
        {
            var list1 = new ThreadSafeList <QuoteData>();
            var list2 = new ThreadSafeList <int>();

            list1.AddRange(new[] { new QuoteData(1, 2, DateTime.Now), null }, 1000);
            list2.AddRange(new[] { 1, 2, 3 }, 1000);

            var found1 = list1.Find(x => true, x => new QuoteData(x), 1000);

            Assert.IsTrue(found1.ask == 2 && found1.bid == 1);
            var found2 = list1.Find(x => x == null, x => new QuoteData(x), 1000);

            Assert.IsNull(found2);
            found2 = list1.Find(x => x.ask == 100, x => new QuoteData(x), 1000);
            Assert.IsNull(found2);

            var found3 = list2.Find(x => x == 2, x => x, 1000);

            Assert.IsTrue(found3 == 2);
            found3 = list2.Find(x => x == 100, x => x, 1000);
            Assert.AreEqual(found3, default(int));
        }
Example #8
0
 public void ProcessTradeSignals(List <TradeSignalAction> actions)
 {
     actionsPending.AddRange(actions, 2000);
 }
        private void CheckServerAlive()
        {
            while (!isStopping)
            {
                Thread.Sleep(100);
                var checkTime = liveServerCheckTime.GetLastHitIfHitted();
                if (!checkTime.HasValue)
                {
                    // по непонятным причинам, клиент иногда все-таки переходит в это состояние
                    // заставляем его переподключиться по таймеру
                    if (currentUserId != 0 && !IsOnline)
                    {
                        liveServerCheckTime.SetTime(DateTime.Now + aliveTimeSpan);
                    }
                    continue;
                }
                if (checkTime.Value > DateTime.Now)
                {
                    continue;
                }

                // переподключение:
                // запоминаем все невыполненные запросы, за исключением запросов на вход
                unAnsweredRequests.AddRange(
                    chatSender.GetPendingRequests()
                    .Select(r => r.Value)
                    .Where(r => r.Code != RequestCode.Enter && r.Code != RequestCode.Exit), LockTimeout);
                unAnsweredRequests.AddRange(
                    chatSender.GetRequests().Where(r => r.Code != RequestCode.Enter && r.Code != RequestCode.Exit),
                    LockTimeout);
                if (unAnsweredRequests.Count == 0)
                {
                    continue;
                }
                liveServerCheckTime.ResetHit();

                // 4 debug
                Console.WriteLine("timeout: renew connection");
                bool timeoutFlag;
                var  reqs = unAnsweredRequests.GetAll(LockTimeout, out timeoutFlag);
                foreach (var req in reqs)
                {
                    Console.WriteLine(req.ToString());
                }
                // end of 4 debug

                if (IsOnline)
                {
                    var userId = currentUserId;
                    Exit();
                    currentUserId = userId;
                    // ожидаем перед разрывом соединения
                    Thread.Sleep(200); // TODO: improve
                }
                // очищаем очереди запросов
                chatSender.ClearRequests();
                // переподключаемся, перезаход выполняется в Connected()
                if (chatSender.Chat != null)
                {
                    chatSender.Chat.RenewConnection();
                }
            }
        }